Terraform配置AWS Lambda权限策略时自动添加Condition问题咨询
问题分析与解决
问题根源
- 自动生成Condition的原因:Terraform的
aws_lambda_permission资源内置了逻辑——只要指定source_arn或source_account参数,就会自动在IAM策略中添加Condition字段(对应AWS:SourceArn的ArnLike判断),这是该资源的默认行为。 - Resource ARN重复错误:你错误地将Lambda函数自身的ARN赋值给了
source_arn参数,同时function_name使用的是函数名称,Terraform在拼接ARN时出现格式错误,导致生成了带重复前缀的无效ARN。
修正后的配置代码
要得到你预期的仅包含Resource字段的策略,需删除source_arn参数,并直接引用函数ARN避免名称拼接问题:
resource "aws_lambda_permission" "lambda_function" { statement_id = "AllowSecretsManagerInvoke" action = "lambda:InvokeFunction" function_name = aws_lambda_function.myfunction.arn principal = "secretsmanager.amazonaws.com" }
验证结果
修正后生成的IAM策略将与你预期完全一致:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "AllowSecretsManagerInvoke", "Effect": "Allow", "Principal": { "Service": "secretsmanager.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:{region}:{account}:function:myfunction" } ] }
额外说明
如果需要限制仅特定Secrets Manager资源调用Lambda,source_arn应填写目标Secrets Manager的ARN而非Lambda自身的ARN,此时Terraform生成的Condition是合理的,也不会出现ARN重复问题。
内容的提问来源于stack exchange,提问作者K P
相关产品推荐
相关产品推荐

