SQS キューポリシーの広すぎる操作許可の確認

必要なメッセージ操作と送信元・受信者だけを許可してください。

説明

不要な主体に広いキュー操作を許可すると、メッセージの送信・取得・削除権限が業務に必要な範囲を超える可能性があります。実際の送信元と受信者に必要な操作だけを許可してください。

実際のアクセスには、ポリシー条件や他の権限制御も関係します。サーバー側の暗号化が有効なキューは匿名の SendMessage と ReceiveMessage を拒否するため、公開主体があるだけで全匿名要求が許可されるとは限りません。

想定される影響

  • 不要なメッセージ送信を許可すると、後続サービスが意図しない処理を実行するおそれがあります。
  • メッセージ取得・削除権限の悪用は、情報漏えいや処理漏れにつながる可能性があります。

対処方法

  • 全操作の許可を、送信元と受信者に必要な SQS 操作に限定してください。
  • Principal を承認済みのアカウント・ロール・サービスに制限してください。SNS 連携では sns.amazonaws.com サービス主体と、対象トピック ARN の aws:SourceArn 条件を使用してください。
  • 暗号化と必要なキー権限を維持し、正規のメッセージ処理と未承認の操作の拒否を確認してください。

例

同じキューポリシーで許可操作を減らす比較です。変更後も主体は全体のままなので、実際のデプロイでは送信元も制限してください。

変更前

hcl
resource "aws_sqs_queue" "app_queue" {
  name = "examplequeue"
}

resource "aws_sqs_queue_policy" "app_queue_policy" {
  queue_url = aws_sqs_queue.app_queue.id

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "*",
      "Resource": "${aws_sqs_queue.app_queue.arn}"
    }
  ]
}
POLICY
}

すべての主体に全操作を許可する設定です。実際に許可されるメッセージ操作と、他の権限制御を合わせて確認してください。

変更後

hcl
resource "aws_sqs_queue" "app_queue" {
  name = "examplequeue"
}

resource "aws_sqs_queue_policy" "app_queue_policy" {
  queue_url = aws_sqs_queue.app_queue.id

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:SendMessage",
      "Resource": "${aws_sqs_queue.app_queue.arn}"
    }
  ]
}
POLICY
}

操作を SendMessage に絞っていますが、Principal は * のままです。承認済みの送信元と必要な条件でさらに制限してください。

参考資料