VPC内Lambda无法跨账号删除S3对象问题求助
问题诊断与解决
核心问题:权限配置中的资源ARN不匹配
你的VPC网关终端节点策略和Lambda角色策略里,指定的资源ARN都是arn:aws:s3:::bucket-name-a/*,但从目标S3桶的策略可以看到,实际要操作的桶是bucket-name,ARN为arn:aws:s3:::bucket-name/*。VPC网关终端节点策略会拦截所有不符合规则的请求,当策略里的资源和实际目标桶不匹配时,请求会被静默拒绝——这就是为什么Lambda执行无报错,但对象没被删除的原因;而改成全权限策略后,终端节点不再过滤请求,此时Lambda角色和桶策略的权限组合生效,删除操作就能成功。
修正步骤
- 修改VPC网关终端节点策略
将资源ARN替换为目标桶的正确值:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::1111111:role/lambdaRoleA" }, "Action": "s3:DeleteObject", "Resource": "arn:aws:s3:::bucket-name/*" } ] }
- 修正Lambda角色策略
同样把资源ARN改成目标桶的:
{ "Action": "s3:DeleteObject", "Effect": "Allow", "Resource": "arn:aws:s3:::bucket-name/*" }
额外验证
确保三个权限组件的规则完全对齐:
- Lambda执行角色:明确允许对目标桶执行
DeleteObject - VPC网关终端节点策略:允许该角色通过终端节点访问目标桶
- 目标S3桶策略:授权该角色对桶内对象执行
DeleteObject
内容的提问来源于stack exchange,提问作者fatjojo
相关产品推荐
相关产品推荐

