説明
aws_lambda_permission の action が目的と異なると、必要な呼び出しが失敗したり、不要な権限を与えたりする可能性があります。関数の呼び出しには lambda:InvokeFunction が必要ですが、Lambda リソースポリシーでは lambda:GetFunction など他の対応する操作も許可できます。
想定される影響
- イベントソースが関数を呼び出せず、処理が遅延または失敗する可能性があります。
- 不要な操作権限が加わると、ポリシー管理とアクセス制御が複雑になります。
対処方法
関数を呼び出す目的では action を lambda:InvokeFunction に設定してください。他の操作は必要性とサービスの対応状況を確認し、principal と source_arn も必要な範囲に限定してください。デプロイ後に意図した連携をテストしてください。
例
CloudWatch Logs に関数の呼び出しを許可する抜粋です。参照する関数とロググループは別途構成してください。
変更前
hcl
resource "aws_lambda_permission" "example" {
action = "lambda:DeleteFunction"
function_name = aws_lambda_function.logging.function_name
principal = "logs.eu-west-1.amazonaws.com"
source_arn = "${aws_cloudwatch_log_group.default.arn}:*"
}
変更後
hcl
resource "aws_lambda_permission" "example" {
action = "lambda:InvokeFunction"
function_name = aws_lambda_function.logging.function_name
principal = "logs.eu-west-1.amazonaws.com"
source_arn = "${aws_cloudwatch_log_group.default.arn}:*"
}
lambda:DeleteFunction は、このログ配信に必要な呼び出し権限ではありません。変更後は同じプリンシパルとロググループに関数の呼び出しを許可します。