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

Lambda函数写入S3目录存储桶时遇Access Denied错误求助

解决Lambda写入S3时的AccessDenied错误

首先注意到错误提示是调用CreateSession操作时Access Denied,而非直接put_object失败,这说明问题可能不在Lambda执行角色的S3权限本身,需要从以下几个方向排查:

1. 检查S3桶策略是否存在拒绝规则

S3桶策略会直接覆盖IAM角色权限,哪怕Lambda角色有全S3权限,如果桶策略设置了拒绝写入的规则,依然会报错:

  • 进入S3控制台,找到目标桶pollytts--use1-az6--x-s3,查看权限标签下的桶策略。
  • 确保没有类似以下的拒绝语句:
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::pollytts--use1-az6--x-s3/*"
    }
    
  • 如果桶策略有条件限制(比如IP范围、加密方式),确认Lambda的执行环境符合条件(比如Lambda不在VPC时,公网IP是否在允许列表)。

2. 验证Lambda执行角色的权限范围

  • 确认IAM角色的权限策略中,资源是否包含目标桶的对象路径,正确的资源配置应该是:
    "Resource": [
      "arn:aws:s3:::pollytts--use1-az6--x-s3",
      "arn:aws:s3:::pollytts--use1-az6--x-s3/*"
    ]
    
    只写桶ARN(不带/*)只能操作桶本身,无法写入对象。
  • 检查角色是否有IAM权限边界,如果边界策略没有允许s3:PutObject操作,即使附加了全S3权限也会被拒绝。进入IAM角色详情页,查看权限边界部分。

3. 排查S3访问控制列表(ACL)

  • 查看桶的访问控制列表,确认桶所有者或Lambda角色对应的IAM实体拥有写入权限。
  • 如果桶是由其他AWS账户创建的,需要确认跨账户权限是否配置正确(比如桶所有者授权你的账户写入权限)。

4. 检查VPC相关配置(如果Lambda在VPC内)

如果Lambda部署在VPC中,需要:

  • 确认已配置S3的VPC端点(Gateway类型),且端点策略允许s3:PutObject操作。
  • 检查Lambda所在的子网是否有路由表指向S3端点,没有的话Lambda无法访问S3。
  • 确认安全组没有出站限制,允许访问S3。

5. 验证桶名和区域是否匹配

  • 确认代码中的桶名pollytts--use1-az6--x-s3完全正确,没有拼写错误。
  • 检查Lambda的区域和S3桶的区域是否一致,虽然跨区域可以访问,但部分配置(比如VPC端点)可能限制同区域访问。

额外测试建议

可以在IAM控制台使用策略模拟器,模拟Lambda执行角色调用s3:PutObject操作,目标资源为arn:aws:s3:::pollytts--use1-az6--x-s3/test-file.txt,看是否允许访问。如果模拟器显示拒绝,会给出具体原因,帮助快速定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 08:07:40