Principal이 '*'인 SQS 큐 정책

SQS 큐 정책의 와일드카드 주체를 필요한 계정·역할·서비스와 원본 조건으로 제한하세요.

설명

SQS 큐 정책에서 Principal: "*"를 허용하면 의도한 대상보다 넓은 범위에 메시지 작업을 허용할 수 있습니다. 실제 권한은 Action, Resource, 조건과 다른 정책을 함께 확인해야 하며, 주체 와일드카드만으로 읽기·삭제·큐 관리 권한이 모두 부여되는 것은 아닙니다.

서버 측 암호화(SSE)를 사용하는 큐는 HTTPS와 Signature Version 4를 요구하며 익명 SendMessage·ReceiveMessage 요청을 거부합니다. 암호화는 필요한 접근 제어를 대신하지 않으므로 인증된 주체와 서비스의 권한도 제한해야 합니다.

잠재적 영향

  • 메시지 전송 권한이 실제로 넓게 허용되면 해당 권한이 필요 없는 주체가 메시지를 넣어 소비자의 처리 결과에 영향을 줄 수 있습니다.
  • 읽기나 삭제 권한도 허용된 경우 메시지 내용이 노출되거나 메시지가 사라질 수 있습니다. 실제 영향은 애플리케이션의 검증·처리 방식에도 달려 있습니다.

해결 방법

  • 필요한 계정·역할·서비스를 Principal로 지정하세요. Action에는 필요한 작업을, Resource에는 실제 큐 ARN을 넣으세요.
  • SNS 연동에는 sns.amazonaws.com 서비스 주체, sqs:SendMessage, 대상 큐 ARN과 원본 토픽 ARN의 aws:SourceArn 조건을 함께 구성하세요.
  • 큐 암호화를 유지하고 연동 서비스에 필요한 KMS 권한과 다른 정책의 조건·거부를 확인하세요. 필요한 메시지 전달은 성공하고 승인하지 않은 주체·소스의 요청은 거부되는지 시험하세요.

예시

queue_arn은 지정한 계정·리전의 my-queue ARN으로, sns_topic_arn은 승인된 원본 토픽 ARN으로 제공하세요. 정책은 SNS 구독 자체를 만들지 않으므로 구독과 필요한 암호화 권한을 별도로 준비해야 합니다.

변경 전

yaml
- name: example
  community.aws.sqs_queue:
    name: my-queue
    region: ap-southeast-2
    policy:
      Version: "2012-10-17"
      Statement:
        Sid: First
        Effect: Allow
        Principal: "*"
        Action: sqs:SendMessage
        Resource: "{{ queue_arn }}"

광범위한 주체에 메시지 전송을 허용하는 문입니다. 적용되는 요청 조건과 다른 접근 제어도 확인해야 합니다.

변경 후

yaml
- name: example
  community.aws.sqs_queue:
    name: my-queue
    region: ap-southeast-2
    policy:
      Version: "2012-10-17"
      Statement:
        Sid: First
        Effect: Allow
        Principal:
          Service: sns.amazonaws.com
        Action: sqs:SendMessage
        Resource: "{{ queue_arn }}"
        Condition:
          ArnEquals:
            aws:SourceArn: "{{ sns_topic_arn }}"

승인된 토픽을 원본으로 하는 SNS 서비스의 메시지 전송으로 제한합니다. 실제 토픽에서 전달은 성공하고 다른 소스의 요청은 거부되는지 확인하세요.

참조