You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:50:16