SQS 큐 정책의 과도한 작업 허용 점검

필요한 메시지 작업과 생산자·소비자만 허용하세요.

설명

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은 여전히 *입니다. 승인된 생산자와 필요한 조건으로 더 제한하세요.

참조