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

如何为其他AWS账户授予账单报告S3存储桶读取权限

跨账户S3账单数据访问失败的排查与解决

你猜的很准——bucket-owner-full-control权限缺失确实是这类跨账户S3访问失败的核心原因之一,不过咱们得把整个逻辑和排查步骤理清楚,才能彻底解决问题:

1. 为什么对象所有权是关键?

当AWS账单服务从一个账户向另一个账户的S3桶上传对象时,默认情况下,上传的对象所有权属于上传方的AWS账户,而非桶的所属账户。这时候哪怕你给目标账户的EC2实例配置了桶的GetObject权限,因为对象的所有权不在桶所有者手里,权限规则根本不会生效。

要打破这个限制,必须确保上传操作附带bucket-owner-full-control的ACL,让桶的所有者获得对象的完全控制权。

2. 修复上传时的ACL配置

检查并更新账单报告的上传设置

登录存储账单数据的AWS账户,按以下步骤操作:

  • 进入Billing控制台,找到你正在使用的报告类型(「Cost & Usage Reports」或「Detailed Billing Reports」)
  • 编辑对应的报告配置,在「S3 bucket settings」区域,确认是否勾选了**「Grant Amazon S3 bucket owner full control」**选项。如果没勾选,启用它并保存配置——之后新上传的账单报告就会自动带上正确的ACL。

修复已存在的历史对象权限

对于已经上传的旧账单对象,你需要手动批量更新它们的ACL,让桶所有者获得控制权。可以用AWS CLI执行以下命令(替换成你的桶名和报告路径前缀):

aws s3 cp s3://your-billing-bucket/billing-reports/ s3://your-billing-bucket/billing-reports/ --recursive --acl bucket-owner-full-control

这个命令会递归更新指定路径下所有对象的ACL权限。

3. 确认跨账户权限配置是否完整

除了对象所有权,你还得确保桶策略和IAM角色的配置没有遗漏:

  • S3桶策略:在目标桶的权限配置中,添加允许目标账户EC2实例角色访问的语句,示例如下:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::TARGET-ACCOUNT-ID:role/YOUR-EC2-INSTANCE-ROLE"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws:s3:::your-billing-bucket/billing-reports/*"
    }
  ]
}
  • EC2实例IAM角色:目标账户的EC2实例必须关联了具有S3:GetObject权限的IAM角色,且角色的信任策略要允许EC2服务扮演该角色。

4. 验证权限是否生效

完成上述配置后,你可以在目标账户的EC2实例上执行测试命令,确认是否能正常获取对象:

aws s3 cp s3://your-billing-bucket/billing-reports/latest-hourly-report.csv -

如果能成功输出文件内容,说明权限配置已经正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:20:10