Action에 '*'를 지정한 SQS 큐 정책

SQS 큐 정책의 전체 작업 허용을 필요한 메시지 처리 작업과 승인된 주체로 제한하세요.

설명

SQS 큐 정책에서 Action: "*"를 허용하면 특정 메시지 처리에 필요한 범위보다 넓은 작업을 허용할 수 있습니다. 메시지를 보내는 주체와 받거나 삭제하는 주체의 권한을 구분하세요. 실제 권한에는 접근 주체, 큐 리소스, 조건과 다른 정책의 허용·거부가 함께 적용됩니다.

SQS는 계정 간 큐 정책으로 허용할 수 있는 작업을 제한합니다. 예를 들어 DeleteQueue와 SetQueueAttributes는 계정 간 권한 부여 대상이 아니므로 전체 작업 와일드카드가 모든 외부 주체에게 큐 관리 권한을 준다고 볼 수는 없습니다. 메시지 삭제와 큐 자체 삭제도 다른 작업입니다.

잠재적 영향

  • 필요한 범위를 넘어 메시지 작업이 실제로 허용되면 의도하지 않은 메시지 조회·전송·삭제가 가능해질 수 있습니다.
  • 의도하지 않은 메시지나 메시지 손실은 소비자의 처리 결과, 서비스 간 데이터 흐름과 가용성에 영향을 줄 수 있습니다.

해결 방법

  • 필요한 sqs:SendMessage, sqs:ReceiveMessage 등의 작업을 구체적으로 지정하고 불필요한 전체 작업 허용을 제거하세요.
  • 실제 큐 ARN을 Resource에 넣고 Principal과 조건으로 승인된 계정·역할·서비스에 범위를 제한하세요. 다른 정책의 허용과 명시적 거부도 검토하세요.
  • 적용된 큐 정책을 확인하고 필요한 메시지 처리는 유지되며 불필요한 요청은 거부되는지 시험하세요. community.aws 1.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

이 문은 해당 역할에 메시지 전송 권한만 부여합니다. 메시지 소비자가 필요한 경우 수신·삭제 권한은 그 역할에 별도로 부여하고 전체 정책을 함께 검토하세요.

참조