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

跨账号EC2上传文件至AWS S3后访问提示AccessDenied错误

问题根因

该AccessDenied报错是跨账号上传S3对象的典型权限问题:跨账号上传到S3的对象,默认所有权完全归属上传方所属AWS账号,而非存储桶所属账号。你当前配置的桶公有读策略,仅对存储桶所属账号拥有所有权的对象生效,对其他账号上传、所有权未移交的对象无权限约束,因此公有读访问会被直接拒绝。
同账号下本地服务器、EC2上传的对象,所有权天然属于存储桶所属账号,因此能匹配公有读策略正常访问,和你测试的现象完全一致。

解决方案

按需选择以下任意一种方案即可修复:

  • 方案1:上传时指定对象ACL为bucket-owner-full-control
    跨账号EC2调用S3 PutObject接口上传文件时,在请求参数中增加ACL=bucket-owner-full-control配置,上传完成后存储桶所属账号会自动获得该对象的完整控制权,此时桶的公有读策略正常生效,直接访问URL不会返回403。
    若使用AWS CLI上传,参考命令如下:
    aws s3 cp 本地文件路径 s3://<替换为你的存储桶名>/对象存储路径 --acl bucket-owner-full-control
    
    若使用各语言AWS SDK上传,找到对应SDK的ACL配置项,将值设置为bucket-owner-full-control即可。
  • 方案2:在存储桶层面开启对象所有权配置,强制接管所有上传对象所有权
    该方案不需要修改上传端的任何代码、命令配置,直接在S3控制台操作即可:
    1. 进入目标S3存储桶控制台,打开「权限」选项卡
    2. 找到「对象所有权」板块,点击编辑
    3. 选择「Bucket owner preferred」或「Bucket owner enforced」选项后保存
      配置完成后,所有跨账号上传到该桶的对象,所有权会自动归属存储桶所属账号,公有读策略对所有上传对象直接生效。

补充说明:选择「Bucket owner enforced」选项时,会直接禁用所有对象级别的ACL,所有权限统一由桶策略管控,是AWS目前官方推荐的S3权限配置方式,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:54:31