| name | aws-wa-security |
| description | AWS Well-Architected Security Pillar review. Checks IAM, encryption, network security, and detective controls in IaC code. Integrates with owasp-review for application code. |
Security Pillar
๋ฐ์ดํฐ ๋ณดํธ, ID/์ ๊ทผ ๊ด๋ฆฌ, ํ์ง ์ ์ด ๊ด์ ์์ IaC ์ฝ๋๋ฅผ ๊ฒํ ํฉ๋๋ค.
ํต์ฌ ์์น
- ๊ฐ๋ ฅํ ์๊ฒฉ ์ฆ๋ช
๊ธฐ๋ฐ: IAM, MFA
- ์ถ์ ๊ฐ๋ฅ์ฑ ํ์ฑํ: CloudTrail, ๋ก๊น
- ๋ชจ๋ ๊ณ์ธต์ ๋ณด์ ์ ์ฉ: VPC, Security Group, WAF
- ๋ณด์ ๋ชจ๋ฒ ์ฌ๋ก ์๋ํ: Security Hub, Config
- ์ ์ก ์ค/์ ์ฅ ๋ฐ์ดํฐ ๋ณดํธ: ์ํธํ, KMS
๊ฒํ ํญ๋ชฉ
SEC-01: IAM ์ต์ ๊ถํ
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| Critical | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: IAM ์ ์ฑ
์ด ์ต์ ๊ถํ ์์น์ ์ค์ํ๋์ง ํ์ธ
Terraform ํจํด:
# ์ทจ์ฝ - ๊ณผ๋ํ ๊ถํ
resource "aws_iam_policy" "bad" {
policy = jsonencode({
Statement = [{
Effect = "Allow"
Action = "*"
Resource = "*"
}]
})
}
# ์์ - ์ต์ ๊ถํ
resource "aws_iam_policy" "good" {
policy = jsonencode({
Statement = [{
Effect = "Allow"
Action = ["s3:GetObject", "s3:PutObject"]
Resource = "arn:aws:s3:::my-bucket/*"
}]
})
}
SEC-02: S3 ์ํธํ
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| Critical | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: S3 ๋ฒํท์ ์๋ฒ ์ธก ์ํธํ๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธ
Terraform ํจํด:
# ์ทจ์ฝ - ์ํธํ ์์
resource "aws_s3_bucket" "bad" {
bucket = "my-bucket"
}
# ์์ - KMS ์ํธํ
resource "aws_s3_bucket_server_side_encryption_configuration" "good" {
bucket = aws_s3_bucket.example.id
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "aws:kms"
kms_master_key_id = aws_kms_key.mykey.arn
}
}
}
SEC-03: RDS ์ํธํ
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| Critical | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: RDS ์ธ์คํด์ค์ ์ํธํ๊ฐ ์ค์ ๋์ด ์๋์ง ํ์ธ
Terraform ํจํด:
# ์ทจ์ฝ
resource "aws_db_instance" "bad" {
storage_encrypted = false
}
# ์์
resource "aws_db_instance" "good" {
storage_encrypted = true
kms_key_id = aws_kms_key.rds.arn
}
SEC-04: Security Group ๊ท์น
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| Critical | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: 0.0.0.0/0 ์ธ๋ฐ์ด๋ ๊ท์น ํ์ธ (SSH/RDP)
Terraform ํจํด:
# ์ทจ์ฝ - ์ ์ฒด IP ํ์ฉ
resource "aws_security_group_rule" "bad" {
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
# ์์ - ํน์ IP๋ง ํ์ฉ
resource "aws_security_group_rule" "good" {
type = "ingress"
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["10.0.0.0/8"]
}
SEC-05: VPC Flow Logs
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| High | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: VPC์ Flow Logs๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธ
SEC-06: GuardDuty
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| High | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: GuardDuty๊ฐ ํ์ฑํ๋์ด ์๋์ง ํ์ธ
SEC-07: KMS ํค ๋กํ
์ด์
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| High | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: KMS ํค ์๋ ๋กํ
์ด์
์ด ํ์ฑํ๋์ด ์๋์ง ํ์ธ
SEC-08: ํผ๋ธ๋ฆญ S3 ๋ฒํท
| ์ฌ๊ฐ๋ | ํ์ง ์ ํ |
|---|
| Critical | ์๋ ํ์ง |
๊ฒํ ๋ด์ฉ: S3 ๋ฒํท์ด ํผ๋ธ๋ฆญ์ผ๋ก ์ค์ ๋์ด ์๋์ง ํ์ธ
Terraform ํจํด:
# ์ทจ์ฝ
resource "aws_s3_bucket_public_access_block" "bad" {
bucket = aws_s3_bucket.example.id
block_public_acls = false
block_public_policy = false
}
# ์์
resource "aws_s3_bucket_public_access_block" "good" {
bucket = aws_s3_bucket.example.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
owasp-review ์ฐ๋
์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋ฐ๊ฒฌ ์ owasp-review ์คํฌ ์ฐธ์กฐ ์ ์:
src/, app/, lib/ ๋ฑ ์ ํ๋ฆฌ์ผ์ด์
๋๋ ํ ๋ฆฌ ๊ฐ์ง
- ์ฌ์ฉ์ ํ์ธ ํ OWASP ๋ณด์ ๋ฆฌ๋ทฐ ์ํ
IaC ํ๋ซํผ๋ณ ํจํด
์์ธ ํจํด์ ๋ค์ ์ฐธ์กฐ:
Compliance ๋งคํ
| ํญ๋ชฉ | PCI-DSS | HIPAA | SOC2 |
|---|
| IAM ์ต์ ๊ถํ | 7.1 | ยง164.312(a)(1) | CC6.3 |
| ๋ฐ์ดํฐ ์ํธํ | 3.4 | ยง164.312(a)(2)(iv) | CC6.1 |
| ๋คํธ์ํฌ ๋ณด์ | 1.3 | ยง164.312(e)(1) | CC6.6 |
์ ์ ์ฐ์
| ํญ๋ชฉ | ๊ฐ์ค์น |
|---|
| IAM ์ต์ ๊ถํ | 20% |
| ๋ฐ์ดํฐ ์ํธํ (S3, RDS, EBS) | 25% |
| ๋คํธ์ํฌ ๋ณด์ | 20% |
| ํ์ง ์ ์ด (GuardDuty, Flow Logs) | 20% |
| KMS ๊ด๋ฆฌ | 15% |