如何解决Terraform中获取Lambda函数代码签名配置时的AccessDeniedException错误
解决Terraform部署Lambda时的AccessDeniedException(代码签名配置)问题
针对你遇到的这个权限错误,我整理了几个实用的解决方案,你可以逐一尝试:
1. 给Terraform执行角色补充必要的IAM权限
这个错误的核心原因是:AWS Provider 3.16.0以上的版本会默认尝试获取Lambda的代码签名配置,但你的IAM角色缺少对应的lambda:GetCodeSigningConfig权限。你可以给执行Terraform的IAM角色添加以下权限Policy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:GetCodeSigningConfig", "Resource": "*" } ] }
如果你的Lambda有特定的代码签名配置,建议把Resource限定为对应的配置ARN,这样更符合最小权限原则。
2. 确认AWS Provider与Terraform版本的兼容性
你当前用的是Terraform v0.13.4,虽然资料说AWS Provider 3.18.0能解决这个问题,但得先确认两者的兼容性。Terraform 0.13.4对Provider版本有一定限制,你可以在versions.tf里明确锁定兼容的版本范围:
terraform { required_providers { aws = { source = "hashicorp/aws" version = "~> 3.18.0" # 锁定在3.18.x系列,确保和Terraform 0.13.4兼容 } } }
然后执行terraform init -upgrade来升级Provider到指定版本,再重新部署试试。
3. 显式跳过代码签名配置检查(如果不需要的话)
如果你的Lambda根本不需要使用代码签名配置,那可以在Terraform的Lambda资源定义里显式设置code_signing_config_arn为空字符串,强制Provider跳过对该配置的自动检测:
resource "aws_lambda_function" "your_lambda" { # 你的其他Lambda配置(比如函数名、运行时、ECR镜像地址等) code_signing_config_arn = "" }
这个方法能直接绕过权限检查环节,快速解决问题。
额外排查点
如果以上方法都没效果,你可以试试:
- 执行
terraform state refresh刷新状态文件,确保本地状态和AWS云端一致 - 检查是否有SCP(服务控制策略)或者其他IAM权限边界限制了
lambda:GetCodeSigningConfig的调用
内容的提问来源于stack exchange,提问作者wawawa
相关产品推荐
相关产品推荐

