説明
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 のユーザー認証が設定されるわけではありません。