SQS キューポリシーの公開主体への許可の確認

キューを使う主体を明示し、必要なメッセージ操作とアクセス条件に制限してください。

説明

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:* は広いままなので、実際に必要なメッセージ操作だけを許可してください。

参考資料