설명
SQS 큐 정책에서 불필요한 주체에 광범위한 작업을 허용하면 메시지 전송·조회·삭제 권한이 업무 범위보다 넓어질 수 있습니다. 큐 정책은 실제 생산자와 소비자가 필요한 작업만 수행하도록 제한해야 합니다.
실제 허용에는 정책 조건과 다른 권한 통제도 적용됩니다. 저장 시 암호화가 활성화된 큐는 익명의 SendMessage와 ReceiveMessage를 거부하므로, 공개 주체가 있다는 이유만으로 모든 익명 요청이 허용된다고 단정할 수는 없습니다.
잠재적 영향
- 불필요한 메시지 전송이 허용되면 후속 서비스가 원치 않는 작업을 처리할 수 있습니다.
- 메시지 조회·삭제 권한의 오용은 정보 유출이나 처리 누락으로 이어질 수 있습니다.
해결 방법
- 전체 작업 허용을 생산자·소비자에게 필요한 SQS 작업만으로 제한하세요.
- Principal을 승인된 계정·역할·서비스로 제한하세요. SNS 연동은 sns.amazonaws.com 서비스 주체와 해당 토픽 ARN의 aws:SourceArn 조건을 사용하세요.
- 암호화와 필요한 키 권한을 유지하고 정상 메시지 처리와 미승인 작업의 거부를 확인하세요.
예시
같은 큐 정책에서 허용 작업을 줄이는 비교입니다. 변경 후도 주체는 전체 범위이므로 실제 배포에서는 생산자 제한을 함께 적용해야 합니다.
변경 전
hcl
resource "aws_sqs_queue" "app_queue" {
name = "examplequeue"
}
resource "aws_sqs_queue_policy" "app_queue_policy" {
queue_url = aws_sqs_queue.app_queue.id
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "*",
"Resource": "${aws_sqs_queue.app_queue.arn}"
}
]
}
POLICY
}
전체 주체에 모든 작업을 허용하도록 설정합니다. 실제로 허용되는 메시지 작업과 추가 권한 통제를 함께 확인하세요.
변경 후
hcl
resource "aws_sqs_queue" "app_queue" {
name = "examplequeue"
}
resource "aws_sqs_queue_policy" "app_queue_policy" {
queue_url = aws_sqs_queue.app_queue.id
policy = <<POLICY
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:SendMessage",
"Resource": "${aws_sqs_queue.app_queue.arn}"
}
]
}
POLICY
}
작업을 SendMessage로 줄이지만 Principal은 여전히 *입니다. 승인된 생산자와 필요한 조건으로 더 제한하세요.