説明
SQSキューポリシーでPrincipal: "*"を許可すると、意図した範囲を超えてメッセージ操作を許す可能性があります。実際の権限はAction、Resource、条件、ほかのポリシーと併せて確認してください。主体のワイルドカードだけで、読み取り・削除・キュー管理の全操作が許可されるわけではありません。
サーバー側の暗号化(SSE)を使うキューはHTTPSとSignature Version 4を要求し、匿名のSendMessage・ReceiveMessage要求を拒否します。暗号化はアクセス制御の代わりではないため、認証済みの主体やサービスの権限も適切に制限する必要があります。
想定される影響
- 送信権限が実際に広く適用されると、アクセスが不要な主体によるメッセージ投入がコンシューマーの処理結果に影響する場合があります。
- 読み取りや削除も許可されていれば、メッセージ内容の漏えいやメッセージの削除につながる可能性があります。実際の影響はアプリケーションの検証・処理にも左右されます。
対処方法
Principalに必要なアカウント・ロール・サービス、Actionに必要な操作、Resourceに実際のキューARNを指定してください。- SNS連携では、
sns.amazonaws.comサービス主体、sqs:SendMessage、対象キューARN、承認済み送信元トピックのaws:SourceArn条件を組み合わせてください。 - キュー暗号化を維持し、連携サービスに必要なKMS権限と、ほかのポリシーの条件・拒否を確認してください。必要な配信は成功し、承認していない主体や送信元の要求は拒否されることをテストしてください。
例
指定アカウント・リージョンのmy-queueのARNをqueue_arnに、承認済み送信元トピックのARNをsns_topic_arnに渡してください。このポリシーはSNSサブスクリプション自体を作成しないため、サブスクリプションと必要な暗号化権限は別途準備してください。
変更前
yaml
- name: example
community.aws.sqs_queue:
name: my-queue
region: ap-southeast-2
policy:
Version: "2012-10-17"
Statement:
Sid: First
Effect: Allow
Principal: "*"
Action: sqs:SendMessage
Resource: "{{ queue_arn }}"
広い範囲の主体にメッセージ送信を許可しています。適用される要求条件やほかのアクセス制御も確認する必要があります。
変更後
yaml
- name: example
community.aws.sqs_queue:
name: my-queue
region: ap-southeast-2
policy:
Version: "2012-10-17"
Statement:
Sid: First
Effect: Allow
Principal:
Service: sns.amazonaws.com
Action: sqs:SendMessage
Resource: "{{ queue_arn }}"
Condition:
ArnEquals:
aws:SourceArn: "{{ sns_topic_arn }}"
承認済みトピックを送信元とするSNSサービスからの送信に限定します。そのトピックからの配信が成功し、ほかの送信元の要求が拒否されることを確認してください。