アクセス範囲が過剰な API Gateway REST API ポリシー

REST API のリソースポリシーは、必要な呼び出し元、操作、API パスだけを許可してください。

説明

REST API のリソースポリシーで全プリンシパルに広い呼び出し権限を与えると、意図しないアクセスを許可する可能性があります。実際のアクセスにはメソッドの認証、認可、他の適用可能なポリシーも関係するため、公開許可だけで認証を回避できるとは限りません。

想定される影響

  • 適用されるアクセス制御が許可すると、未承認のクライアントも API を呼び出せます。
  • 過剰な呼び出しによってバックエンド機能が悪用され、費用やサービス負荷が増える可能性があります。

対処方法

必要な呼び出し元と execute-api:Invoke だけを許可してください。Resource には実際の API 実行 ARN と必要なステージ、メソッド、パスを指定してください。適切な条件でさらに制限し、メソッド認証と合わせて正常なリクエストと拒否すべきリクエストをテストしてください。

例

リソースポリシーの抜粋です。参照する API を別途構成し、アカウント、ユーザー、パス、IP アドレスを承認済みの値に置き換えてください。変更後の IAM ユーザーによるリクエストには、AWS_IAM メソッド認証と SigV4 署名が必要です。

変更前

hcl
resource "aws_api_gateway_rest_api_policy" "example" {
  rest_api_id = aws_api_gateway_rest_api.api_gw.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "execute-api:*",
      "Resource": "${aws_api_gateway_rest_api.api_gw.execution_arn}/*/*/*"
    }
  ]
}
EOF
}

変更後

hcl
resource "aws_api_gateway_rest_api_policy" "example" {
  rest_api_id = aws_api_gateway_rest_api.api_gw.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::123456789012:user/test-user"
        ]
      },
      "Action": "execute-api:Invoke",
      "Resource": "${aws_api_gateway_rest_api.api_gw.execution_arn}/prod/GET/orders",
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": "123.123.123.123/32"
        }
      }
    }
  ]
}
EOF
}

変更後のポリシーは、特定のユーザー、GET /orders、接続元 IP に許可を限定します。他の適用可能なポリシーと実際のメソッド設定も確認してください。

参考資料