Lambda函数S3文件上传失败,Assume同角色却成功的问题求助
问题分析与解决方案
1. S3权限策略的Resource配置错误
你的策略中把s3:ListBucket的Resource设置为arn:aws:s3:::mybucket/sub/path/*,这是错误的:
s3:ListBucket是桶级别操作,需要绑定桶的ARN(arn:aws:s3:::mybucket),再通过Condition限制仅允许列出指定前缀的内容;s3:PutObject和s3:PutObjectAcl是对象级操作,绑定arn:aws:s3:::mybucket/sub/path/*是正确的。
修正后的策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::mybucket", "Effect": "Allow", "Condition": { "StringLike": { "s3:prefix": "sub/path/*" } } }, { "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::mybucket/sub/path/*", "Effect": "Allow" } ] }
2. Lambda角色的权限边界限制
检查Lambda服务角色lambda-func-service-role是否配置了权限边界:
- 进入IAM控制台找到该角色,切换到「权限边界」标签页;
- 如果存在权限边界策略,确认其中包含允许
s3:PutObject、s3:PutObjectAcl(以及必要的s3:ListBucket)操作的规则,否则权限边界会覆盖附加策略的允许权限。
3. S3桶策略的拒绝规则
检查目标S3桶的桶策略:
- 登录S3控制台找到
mybucket,进入「权限」-「桶策略」; - 查看是否存在
Effect: Deny的语句,比如限制了请求来源IP、VPC等条件,而Lambda的执行环境不满足这些条件(比如Lambda运行在公共子网,桶策略只允许VPC内请求)。
4. 上传对象路径不匹配
验证Lambda代码中object_name的实际值:
- 在Lambda代码中添加日志打印
object_name,确认其格式为sub/path/view.png,没有额外的相对路径(如sub/path/../view.png)或拼写错误,确保与策略中的sub/path/*前缀完全匹配。
内容的提问来源于stack exchange,提问作者juniper-
相关产品推荐
相关产品推荐

