You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform配置AWS Lambda权限策略时自动添加Condition问题咨询

问题分析与解决

问题根源

  1. 自动生成Condition的原因:Terraform的aws_lambda_permission资源内置了逻辑——只要指定source_arn或source_account参数,就会自动在IAM策略中添加Condition字段(对应AWS:SourceArn的ArnLike判断),这是该资源的默认行为。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:43:18