설명
SES의 이메일 주소·도메인에 연결된 정책은 그 자격 증명을 사용할 주체와 허용할 SES 작업을 정합니다. 발송 권한을 불필요한 주체에게 위임하면 다른 사람이 해당 주소나 도메인으로 메일을 보낼 수 있습니다. 이 정책을 IAM 사용자·역할 자체를 관리하는 권한과 혼동하면 안 됩니다.
실제 발송에는 검증된 자격 증명, 해당 리전의 발송 설정과 정책 조건도 적용됩니다. 필요한 발송 주체와 작업만 허용하세요.
잠재적 영향
- 승인되지 않은 발송이 허용되면 스팸이나 피싱에 도메인이 악용될 수 있습니다.
- 메일 오남용은 도메인 평판과 수신자의 신뢰를 떨어뜨릴 수 있습니다.
해결 방법
- 불필요한 전체 주체 허용을 제거하고 실제 메일 발송 계정·역할만 지정하세요.
- 필요한 ses:SendEmail 또는 ses:SendRawEmail 등으로 작업을 제한하고 Resource에 연결된 SES 자격 증명의 ARN을 지정하세요.
- 정상 발송은 성공하고 승인되지 않은 발송은 거부되는지 확인하며 사용하지 않는 위임 정책을 제거하세요.
예시
검증된 SES 도메인의 정책 발췌입니다. 참조 도메인은 별도로 정의·검증하고 역할 ARN은 실제 발송 역할로 바꾸세요. SMTP 발송에는 SendRawEmail 권한이 필요합니다.
변경 전
hcl
resource "aws_ses_identity_policy" "ses_policy" {
identity = aws_ses_domain_identity.example.arn
name = "example"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "*",
"Principal": {
"AWS": "*"
},
"Effect": "Allow",
"Resource": "${aws_ses_domain_identity.example.arn}"
}
]
}
EOF
}
모든 AWS 주체와 광범위한 작업을 허용하도록 요청합니다. SES가 지원하는 작업과 실제 필요한 위임 범위를 확인해야 합니다.
변경 후
hcl
resource "aws_ses_identity_policy" "ses_policy" {
identity = aws_ses_domain_identity.example.arn
name = "example"
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "ses:SendEmail",
"Principal": {
"AWS": "arn:aws:iam::987654321145:role/email-service"
},
"Effect": "Allow",
"Resource": "${aws_ses_domain_identity.example.arn}"
}
]
}
EOF
}
같은 자격 증명의 SendEmail을 지정한 역할에 한정합니다. 실제 API·SMTP 방식과 발송 조건에 필요한 권한을 맞추세요.