使用Terraform跨账号调用Lambda时遇403权限问题求助
Terraform跨账号调用Lambda遇AccessDeniedException(403)问题排查
问题描述
使用Terraform跨账号部署并调用AWS Lambda函数,已在provider.tf中配置Assume Role(ARN为arn:aws:iam::123456789101:role/AssumedRole),该角色已授予lambda:*权限。通过aws_lambda_invocation数据源调用Lambda时触发403 AccessDeniedException,但为角色添加管理员权限后可正常调用,推测缺少Lambda之外的关联权限。
配置代码
provider.tf
terraform { required_providers { aws = { source = "hashicorp/aws" version = "4.33.0" } } } provider "aws" { region = "us-east-1" assume_role { role_arn = "arn:aws:iam::123456789101:role/AssumedRole" session_name = "TF" } }
Lambda调用数据源
data "aws_lambda_invocation" "start-execution" { function_name = aws_lambda_function.start-execution-lambda.function_name depends_on = [aws_lambda_function.start-execution-lambda] input = <<JSON { "key1": "value1", "key2": "value2" } JSON }
错误信息
╷ │ Error: AccessDeniedException: │ status code: 403, request id: │ │ with data.aws_lambda_invocation.start-execution,
排查与解决方案
1. 检查Lambda函数资源策略(跨账号场景核心)
若Lambda函数部署在其他账号,或同一账号下资源策略有严格限制,需确保Lambda的资源策略明确允许AssumedRole调用:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789101:role/AssumedRole" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789101:function:start-execution-lambda" } ] }
2. 确认AssumedRole权限的资源范围
即使配置了lambda:*动作,需确保权限策略的Resource字段为*,或明确包含目标Lambda的ARN,避免资源范围限制导致的403:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:*", "Resource": "*" } ] }
3. 检查KMS加密相关权限
如果Lambda的代码包、环境变量或执行角色使用了AWS KMS加密,AssumedRole需要额外的KMS权限:
- 添加
kms:Decrypt权限,资源指定对应KMS密钥的ARN
4. 升级AWS Provider版本
当前使用的4.33.0版本较旧,可能存在跨账号Lambda调用的兼容性问题,建议升级到最新稳定版本:
terraform { required_providers { aws = { source = "hashicorp/aws" version = ">= 5.0.0" } } }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

