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

S3 Bucket无法执行PutObject权限问题求助(Lambda+IAM场景)

解决Lambda向S3执行PutObject时的AccessDenied错误

看起来你踩了一个Lambda权限的常见误区——混淆了创建Lambda的IAM用户和Lambda运行时依赖的执行角色的权限!我来帮你拆解问题并给出具体修复步骤:

核心问题分析

你当前配置的S3桶策略是允许IAM用户cdeveloper操作S3资源,但Lambda函数运行时,是通过它自身的**执行角色(Execution Role)**来获取AWS服务访问权限的,完全不会用到创建它的cdeveloper用户身份。这就是为什么你会收到AccessDenied报错。

具体修复步骤

1. 为Lambda执行角色添加S3写入权限

这是最关键的一步:

  • 打开AWS IAM控制台,找到你的Lambda函数对应的执行角色(可以在Lambda函数配置的「权限」标签下直接跳转)
  • 给这个角色添加一条内联策略,赋予它向目标S3桶写入的权限:
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::ag-grid/*"
            }
        ]
    }
    
    (遵循最小权限原则,只添加你需要的操作即可,不需要给s3:*这么宽泛的权限)

2. 验证S3桶策略的必要性(可选)

你当前配置的桶策略是允许cdeveloper用户操作S3,但如果Lambda已经通过执行角色获得了权限,这个桶策略其实不是必须的(除非你有跨账号访问等特殊场景需求)。如果保留的话,要确保没有冲突的Deny策略存在。

3. 排查额外限制因素

如果还是报错,可以检查以下几点:

  • 确认S3桶的**公共访问阻止(Block Public Access)**设置没有限制IAM角色的写入操作(通常不影响,但可以排查)
  • 检查是否有IAM边界(IAM Boundary)或AWS组织级别的服务控制策略(SCP)限制了Lambda执行角色的S3权限
  • 核对Lambda代码中PutObject请求的Bucket名称、文件路径(Key)是否完全匹配arn:aws:s3:::ag-grid/*,比如有没有拼写错误,或者尝试写入桶根目录(arn:aws:s3:::ag-grid)而不是子路径(你的策略只允许子路径操作)

举个简单的Python Lambda代码示例,确保路径匹配:

import boto3

s3_client = boto3.client('s3')

def lambda_handler(event, context):
    # 确保Bucket和Key匹配你的策略范围
    s3_client.put_object(
        Bucket='ag-grid',
        Key='data/test.json',
        Body='{"name": "test"}'
    )
    return {"status": "success"}

内容的提问来源于stack exchange,提问作者user8022517

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:54:00