API Gateway による Lambda 呼び出し範囲の確認

API Gateway による Lambda の呼び出しを、必要なステージ、メソッド、パスに限定してください。

説明

API Gateway に与える Lambda 呼び出し権限の source_arn が広いと、意図しないステージやメソッドからも関数を呼び出せます。この権限は API Gateway サービスによる呼び出しを許可するもので、API クライアントの認証や認可を代替しません。

想定される影響

  • 別の API ルートが同じ関数を統合先にすると、意図しない実行を許可する可能性があります。
  • クライアントのアクセス制御も不十分な場合、関数の不正利用や実行費用の増加につながります。

対処方法

source_arn を必要な API ステージ、HTTP メソッド、リソースパスに限定してください。API メソッドの認証と認可も別途設定し、承認済みリクエストが成功し、不要なルートからの呼び出しが拒否されることを確認してください。

例

Lambda 呼び出し権限の抜粋です。参照する API と関数は別途構成してください。prod、GET、orders は、実際のデプロイステージ、メソッド、パスに置き換えてください。

変更前

hcl
resource "aws_lambda_permission" "example" {
  statement_id  = "AllowAPIGatewayInvoke"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.example.function_name
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.example.execution_arn}/*/*"
}

変更後

hcl
resource "aws_lambda_permission" "example" {
  statement_id  = "AllowAPIGatewayInvoke"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.example.function_name
  principal     = "apigateway.amazonaws.com"
  source_arn    = "${aws_api_gateway_rest_api.example.execution_arn}/prod/GET/orders"
}

変更後の許可は、prod ステージの GET /orders に限定されます。この変更だけで API のユーザー認証が設定されるわけではありません。

参考資料