説明
SQS キューポリシーのワイルドカード Principal は、不特定の主体に権限を与える可能性があります。実際の許可は Action、Resource、条件、他の権限制御に依存するため、公開主体だけで全要求が許可されるとは限りません。
IP 条件は接続経路を制限しますが、主体自体を特定しません。承認済みの送信元・受信者を明示し、暗号化と必要な KMS 権限を維持してください。暗号化されたキューは匿名の SendMessage と ReceiveMessage を拒否します。
想定される影響
- 許可されたメッセージ操作が悪用されると、不要な処理が投入されたり、メッセージが漏えい・削除されたりするおそれがあります。
- 共有する送信元アドレスだけで許可すると、同じ経路を使う不要な主体もアクセスできる可能性があります。
対処方法
- Principal を必要なアカウント・ロール・サービスに制限し、メッセージ操作も業務に必要な範囲に絞ってください。
- 公開エンドポイントの IP 条件には実際の外部送信元アドレスを使ってください。VPC エンドポイント経由の場合は、その経路に適した条件を確認してください。
- キューポリシー、送信元・受信者の権限、キーアクセスを合わせて確認し、正常な処理と未承認のアクセスの拒否を試験してください。
例
参照キューは別途定義してください。203.0.113.0/24 は文書用アドレスなので、承認済みの実際の外部送信元範囲に置き換え、ロール ARN も実際の値に変更してください。
変更前
hcl
resource "aws_sqs_queue_policy" "example" {
queue_url = aws_sqs_queue.q.id
policy = <<EOF
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
"Effect": "Allow",
"Principal": "*",
"Action": "sqs:*",
"Resource": "${aws_sqs_queue.q.arn}",
"Condition" : {
"IpAddress" : {
"aws:SourceIp":"203.0.113.0/24"
}
}
}]
}
EOF
}
全主体を許可しますが、IP 条件も適用されます。全インターネットアドレスへの公開ではないため、許可経路で不要な主体がアクセスできないか確認してください。
変更後
hcl
resource "aws_sqs_queue_policy" "example" {
queue_url = aws_sqs_queue.q.id
policy = <<POLICY
{
"Version": "2012-10-17",
"Id": "Queue1_Policy_UUID",
"Statement": [{
"Sid":"Queue1_AnonymousAccess_AllActions_AllowlistIP",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::111122223333:role/queue-client"},
"Action": "sqs:*",
"Resource": "${aws_sqs_queue.q.arn}",
"Condition" : {
"IpAddress" : {
"aws:SourceIp":"203.0.113.0/24"
}
}
}]
}
POLICY
}
同じ IP 条件を維持し、主体を指定ロールに絞っています。sqs:* は広いままなので、実際に必要なメッセージ操作だけを許可してください。