説明
SQSキューポリシーでAction: "*"を許可すると、メッセージ処理に必要な範囲を超える操作を許可する可能性があります。メッセージを送信する主体と、受信・削除する主体の権限は分けてください。実際のアクセスには、主体、キューリソース、条件、ほかのポリシーによる許可・拒否も影響します。
SQSは、キューポリシーで別のアカウントに許可できる操作を制限しています。たとえばDeleteQueueやSetQueueAttributesは、この方法ではアカウント間の権限付与ができません。ワイルドカードだけで、すべての外部主体がキューを管理できるとは限りません。メッセージの削除とキュー自体の削除も別の操作です。
想定される影響
- 過剰な権限が実際に適用されると、意図しないメッセージの参照・送信・削除を許す可能性があります。
- 意図しないメッセージやメッセージの消失は、コンシューマーの処理結果、サービス間のデータフロー、可用性に影響する場合があります。
対処方法
sqs:SendMessageやsqs:ReceiveMessageなど、必要な操作を明示し、不要な全操作への許可を削除してください。Resourceに実際のキューARNを指定し、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
このステートメントは、対象のロールにメッセージ送信の権限だけを付与します。コンシューマーが必要な場合は、そのロールに受信・削除の権限を別途付与し、ポリシー全体を確認してください。