설명
SQS 큐 정책의 Principal: "*"와 sqs:* 같은 넓은 작업 허용이 결합되면 의도하지 않은 주체가 큐를 사용할 수 있습니다. 실제 접근은 조건, 명시적 거부와 적용되는 다른 권한 통제에 따라 달라집니다. SQS의 일부 관리 작업은 교차 계정 권한 위임을 지원하지 않습니다.
메시지 생산자와 소비자를 구분해 필요한 권한만 부여하고, 공개 사용이 필요하지 않은 큐의 접근 범위를 제한하세요.
잠재적 영향
- 허용된 메시지 전송이 악용되면 위조 메시지나 대량 요청이 후속 처리를 방해할 수 있습니다.
- 메시지 조회·삭제 권한까지 적용되면 정보 유출이나 처리되지 않은 메시지 손실로 이어질 수 있습니다.
해결 방법
- 필요한 계정·역할·서비스만
Principal에 지정하고 작업을 생산자와 소비자의 용도에 맞게 제한하세요. Resource에는 대상 큐 ARN을 지정하고 서비스 연동에는 지원되는 출처 조건을 추가하세요.- 기존 큐 정책과 다른 허용을 함께 검토해 불필요한 권한을 제거하고 정상 송수신과 승인하지 않은 접근의 거부를 시험하세요.
예시
계정 ID와 역할 ARN은 실제 승인된 값으로 바꾸세요. 역할과 애플리케이션 구성은 생략했습니다.
변경 전
yaml
- name: SQS 큐 생성
community.aws.sqs_queue:
name: my-queue1
region: ap-southeast-1
policy:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: "sqs:*"
Resource: "*"
Principal: "*"
와일드카드 주체에 넓은 SQS 권한을 허용합니다. 조건이 없으므로 업무에 필요한 대상과 작업으로 좁혀야 합니다.
변경 후
yaml
- name: SQS 큐 생성
community.aws.sqs_queue:
name: my-queue1
region: ap-southeast-1
policy:
Version: "2012-10-17"
Statement:
- Effect: Allow
Action: sqs:SendMessage
Resource: arn:aws:sqs:ap-southeast-1:123456789012:my-queue1
Principal:
AWS: arn:aws:iam::123456789012:role/app-producer-role
이 문은 지정한 큐에 대한 메시지 전송만 해당 역할에 허용합니다. 역할의 전체 권한이나 다른 정책까지 제한하는 것은 아니므로 함께 검토하세요.