설명
SQS 큐 정책에서 Action: "*"를 허용하면 특정 메시지 처리에 필요한 범위보다 넓은 작업을 허용할 수 있습니다. 메시지를 보내는 주체와 받거나 삭제하는 주체의 권한을 구분하세요. 실제 권한에는 접근 주체, 큐 리소스, 조건과 다른 정책의 허용·거부가 함께 적용됩니다.
SQS는 계정 간 큐 정책으로 허용할 수 있는 작업을 제한합니다. 예를 들어 DeleteQueue와 SetQueueAttributes는 계정 간 권한 부여 대상이 아니므로 전체 작업 와일드카드가 모든 외부 주체에게 큐 관리 권한을 준다고 볼 수는 없습니다. 메시지 삭제와 큐 자체 삭제도 다른 작업입니다.
잠재적 영향
- 필요한 범위를 넘어 메시지 작업이 실제로 허용되면 의도하지 않은 메시지 조회·전송·삭제가 가능해질 수 있습니다.
- 의도하지 않은 메시지나 메시지 손실은 소비자의 처리 결과, 서비스 간 데이터 흐름과 가용성에 영향을 줄 수 있습니다.
해결 방법
- 필요한
sqs:SendMessage,sqs:ReceiveMessage등의 작업을 구체적으로 지정하고 불필요한 전체 작업 허용을 제거하세요. - 실제 큐 ARN을
Resource에 넣고Principal과 조건으로 승인된 계정·역할·서비스에 범위를 제한하세요. 다른 정책의 허용과 명시적 거부도 검토하세요. - 적용된 큐 정책을 확인하고 필요한 메시지 처리는 유지되며 불필요한 요청은 거부되는지 시험하세요.
community.aws1.5.0에서는policy를 생략하는 것만으로 기존 큐 정책이 제거되지는 않습니다.
예시
같은 큐와 승인된 메시지 생산자 역할을 대상으로 하는 대안입니다. 실제 큐 이름, 소유 계정, 리전과 존재하는 생산자 역할 ARN을 변수로 제공하세요. 계정 간 접근에는 관련 IAM 권한 등 추가 요건도 확인해야 합니다.
변경 전
yaml
- name: SQS queue with broad policy
community.aws.sqs_queue:
name: "{{ queue_name }}"
region: "{{ aws_region }}"
policy:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
AWS: "{{ producer_role_arn }}"
Action: "*"
Resource: "arn:aws:sqs:{{ aws_region }}:{{ aws_account_id }}:{{ queue_name }}"
state: present
생산자 역할에 전체 작업을 허용하므로 메시지 전송에 필요한 범위를 넘을 수 있습니다.
변경 후
yaml
- name: SQS queue with limited policy
community.aws.sqs_queue:
name: "{{ queue_name }}"
region: "{{ aws_region }}"
policy:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
AWS: "{{ producer_role_arn }}"
Action: sqs:SendMessage
Resource: "arn:aws:sqs:{{ aws_region }}:{{ aws_account_id }}:{{ queue_name }}"
state: present
이 문은 해당 역할에 메시지 전송 권한만 부여합니다. 메시지 소비자가 필요한 경우 수신·삭제 권한은 그 역할에 별도로 부여하고 전체 정책을 함께 검토하세요.