Actionに「*」を指定したSQSキューポリシー

SQSキューポリシーの全操作への許可を、必要なメッセージ操作と承認済みの主体に限定してください。

説明

SQSキューポリシーでAction: "*"を許可すると、メッセージ処理に必要な範囲を超える操作を許可する可能性があります。メッセージを送信する主体と、受信・削除する主体の権限は分けてください。実際のアクセスには、主体、キューリソース、条件、ほかのポリシーによる許可・拒否も影響します。

SQSは、キューポリシーで別のアカウントに許可できる操作を制限しています。たとえばDeleteQueueやSetQueueAttributesは、この方法ではアカウント間の権限付与ができません。ワイルドカードだけで、すべての外部主体がキューを管理できるとは限りません。メッセージの削除とキュー自体の削除も別の操作です。

想定される影響

  • 過剰な権限が実際に適用されると、意図しないメッセージの参照・送信・削除を許す可能性があります。
  • 意図しないメッセージやメッセージの消失は、コンシューマーの処理結果、サービス間のデータフロー、可用性に影響する場合があります。

対処方法

  • sqs:SendMessageやsqs:ReceiveMessageなど、必要な操作を明示し、不要な全操作への許可を削除してください。
  • Resourceに実際のキューARNを指定し、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

このステートメントは、対象のロールにメッセージ送信の権限だけを付与します。コンシューマーが必要な場合は、そのロールに受信・削除の権限を別途付与し、ポリシー全体を確認してください。

参考資料