설명
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 서비스의 메시지 전송으로 제한합니다. 실제 토픽에서 전달은 성공하고 다른 소스의 요청은 거부되는지 확인하세요.