You need to enable JavaScript to run this app. 使用Boto3上传S3对象调用PutObject返回AccessDenied错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Boto3上传S3对象调用PutObject返回AccessDenied错误如何解决

S3上传返回AccessDenied问题排查与解决方案

核心原因

你遇到的报错核心触发点是S3的公开访问拦截规则优先级高于IAM权限:你的代码上传时指定了"ACL": "public-read"参数,但当前AWS账号的目标存储桶/全局S3配置开启了「阻止公开访问(Block Public Access)」规则,就算使用根账号操作也会被直接拦截,完全符合你测试时的现象。

具体排查步骤

  • 首先检查目标存储桶的阻止公开访问配置:进入S3控制台打开对应存储桶,切换到「权限」标签找到「阻止公开访问(桶设置)」项,只要开启了「阻止新的公开ACL和上传公开的对象」选项,上传时指定公开类ACL就会直接返回AccessDenied。
  • 其次检查账号全局S3阻止公开访问配置:进入S3控制台总览页面的全局设置,查看「阻止公开访问(账户设置)」,如果全局开启了拦截规则,账号下所有存储桶都会受影响。
  • 额外排查组织级限制:如果你的账号归属于AWS Organizations组织,检查上层是否配置了限制S3公开操作、或限制指定区域S3访问的SCP(服务控制策略),该类策略优先级高于账号内的权限配置。
  • 快速验证方法:注释掉代码extra_args中的"ACL": "public-read"行后重试上传,如果可以正常上传即可100%确认是公开访问拦截导致的问题。

修复方案

  • 若业务需要上传的对象为公开访问权限:关闭对应存储桶/账号级阻止公开访问配置中,拦截公开ACL的对应选项即可。
  • 若业务不需要对象公开:直接删除代码中的ACL参数即可,默认上传的对象为私有权限,不会触发拦截规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 23:45:03