AWS SQS 큐 정책의 접근 범위 점검

SQS 큐에는 승인된 생산자와 소비자에게 필요한 권한만 허용하세요.

설명

SQS 큐 정책이 Principal에 *를 사용해 넓은 범위의 주체에게 작업을 허용하면 불필요한 메시지 전송이나 접근으로 이어질 수 있습니다. 실제 접근 범위는 Action, Resource, 조건, 명시적 거부와 적용되는 권한에 따라 달라집니다.

SendMessage 허용이 메시지 읽기나 삭제 권한까지 부여하는 것은 아닙니다. 또한 서버 측 암호화가 켜진 큐는 익명 SendMessage와 ReceiveMessage 요청을 거부하지만, 암호화가 과도한 권한을 대신 제한해 주지는 않습니다.

잠재적 영향

  • 원치 않는 메시지로 백엔드 처리가 교란되거나 비용이 증가할 수 있습니다.
  • 읽기나 삭제 작업도 과도하게 허용되면 메시지 내용 노출이나 처리 손실로 이어질 수 있습니다.

해결 방법

큐 정책의 Principal, Action과 Resource를 승인된 대상과 필요한 작업으로 제한하세요. SNS에서 전송한다면 sns.amazonaws.com 서비스 주체와 aws:SourceArn 조건으로 승인된 토픽을 지정하세요. 필요한 생산자·소비자의 요청은 성공하고 미승인 요청은 거부되는지 시험하세요.

예시

동일한 큐에 별도 정책 리소스를 연결해 큐 ARN의 자기 참조를 피합니다. SNS 토픽 리소스는 생략했으며 실제 승인된 토픽을 참조해야 합니다.

변경 전

hcl
resource "aws_sqs_queue" "app_queue" {
  name = "examplequeue"
}

resource "aws_sqs_queue_policy" "app_queue" {
  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를 허용합니다. 이 허용만으로 읽기나 삭제 권한이 생기지는 않습니다.

변경 후

hcl
resource "aws_sqs_queue" "app_queue" {
  name = "examplequeue"
}

resource "aws_sqs_queue_policy" "app_queue" {
  queue_url = aws_sqs_queue.app_queue.id
  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {"Service": "sns.amazonaws.com"},
      "Action": "sqs:SendMessage",
      "Resource": "${aws_sqs_queue.app_queue.arn}",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "${aws_sns_topic.notifications.arn}"
        }
      }
    }
  ]
}
POLICY
}

SNS 서비스 주체와 특정 토픽 ARN 조건으로 전송을 제한합니다. 다른 큐 정책과 관련 IAM·KMS 권한도 함께 확인하세요.

참조