使用S3 Sync下载AWS合并账单报告时遭遇Access Denied错误求助
解决AWS合并账单S3 Sync跨账户访问被拒绝的问题
我来帮你排查这个S3 Sync的访问拒绝问题——你提到能成功列出桶内文件但下载每个文件都报错,这种场景在跨账户访问AWS合并账单桶时非常常见,核心问题通常出在IAM权限与桶策略的组合授权逻辑上,下面一步步拆解:
1. 确认IAM用户的权限覆盖范围
你已经拥有s3:ListBucket权限(否则无法列出文件),但下载文件必须同时具备s3:GetObject权限,而且要注意权限的资源路径:
- 只给桶级别的资源(
arn:aws:s3:::your-billing-bucket)只能操作桶本身(比如列表),无法访问桶内的具体对象 - 必须添加对象级别的资源路径
arn:aws:s3:::your-billing-bucket/*才能获取文件
你的IAM用户策略应该类似这样:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::your-billing-bucket" }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::your-billing-bucket/*" } ] }
2. 检查桶策略的跨账户授权逻辑
AWS的权限是IAM策略 + 桶策略的逻辑与,两者都允许才能生效。你当前的桶策略可能只授权了列表权限,没有覆盖对象的读取权限,需要明确给跨账户IAM用户添加s3:GetObject权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789:user/IAMUser" }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::your-billing-bucket", "arn:aws:s3:::your-billing-bucket/*" ] } ] }
特别注意:合并账单桶内的文件默认属于AWS账单账户的根用户,ACL通常是私有,所以必须通过桶策略授予跨账户用户访问权限,仅靠IAM用户权限是不够的。
3. 单独测试单个文件下载定位问题
如果还是报错,建议先用s3api命令单独测试一个文件的下载,获取更精确的错误信息:
aws s3api get-object --bucket your-billing-bucket --key 2024-01/aws-billing-report.csv test-download.csv
这个命令会返回更具体的拒绝原因,比如是IAM权限缺失还是桶策略限制,帮你快速定位问题。
关于上传文件的补充(针对你提到的场景)
如果上传文件也遇到访问拒绝,需要在IAM策略和桶策略中同时添加s3:PutObject权限,资源路径同样要覆盖your-billing-bucket/*,确保权限覆盖到上传的对象。
内容的提问来源于stack exchange,提问作者Culture
相关产品推荐
相关产品推荐

