从Lambda调用另一个Lambda触发AccessDeniedException,求权限配置指导
解决Lambda调用另一个Lambda的AccessDenied问题
问题原因
你当前的Lambda执行角色(lambda-s3-full-access)缺少调用目标Lambda函数的权限,现有的AWSLambdaBasicExecutionRole仅包含Lambda日志相关权限,没有lambda:InvokeFunction权限。
配置步骤
1. 为执行角色添加自定义权限策略
给调用方Lambda的执行角色(也就是报错里的lambda-s3-full-access角色)添加一条包含lambda:InvokeFunction权限的策略,具体如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-1:nnnn:function:cache-s-s" } ] }
- 替换
Resource里的ARN为你实际要调用的目标Lambda的ARN;若需允许调用同一账号同一区域下所有Lambda,可使用通配符arn:aws:lambda:us-west-1:nnnn:function:*,但生产环境不建议用通配符,严格遵循最小权限原则。
2. 验证目标Lambda的资源策略(可选)
若添加上述权限后仍报错,检查目标Lambda的资源策略是否允许调用方角色访问:
- 进入目标Lambda配置页,找到「权限」标签下的「资源策略」
- 添加允许调用方角色ARN访问的规则,示例:
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "AllowInvokeFromCallingLambdaRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::nnnn:role/lambda-s3-full-access" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-1:nnnn:function:cache-s-s" } ] }
3. 确认角色信任关系
确保调用方Lambda的执行角色信任关系允许Lambda服务扮演该角色,信任策略需包含:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
注意事项
- 权限变更通常需要1-5分钟生效,若刚配置完仍报错,稍等片刻再测试。
- 始终以最小权限原则配置权限,避免过度授权带来的安全风险。
内容的提问来源于stack exchange,提问作者user2498899
相关产品推荐
相关产品推荐

