跨AWS账户S3 Bucket同步遇权限问题:ListObjectsV2访问被拒
AWS S3跨账户同步权限排查:AccessDenied 问题解决思路
问题背景
你使用dest_profile(对应拥有目标桶所有权的服务账户)执行跨账户S3同步时遇到权限错误:
aws s3 sync s3://SOURCE_BUCKET s3://DEST_BUCKET --profile dest_profile
错误信息:
fatal error: An error occurred (AccessDenied) when calling the ListObjectsV2 operation: Access Denied
单独执行aws s3 ls s3://SOURCE_BUCKET --profile dest_profile也报相同错误,且已请求源桶添加了如下桶策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "XX_ReadOnlyAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::......:user/....." }, "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<bucket-name>", "arn:aws:s3:::<bucket-name>/*" ] } ] }
可能遗漏的配置项
- 验证服务账户ARN准确性:桶策略中
Principal字段的ARN必须与你的服务账户ARN完全匹配,包括账户ID、用户名,不能有任何拼写或格式错误。比如确认arn:aws:iam::123456789012:user/my-service-user是正确的。 - 检查源桶公共访问阻止设置:如果源桶所在账户开启了
Block public access中的Block public policies或Restrict public buckets,会导致自定义桶策略失效。需要源桶管理员关闭这两项(你的访问是指定特定IAM用户,不属于公共访问范畴)。 - 排查服务账户IAM策略的显式拒绝:你的服务账户自身的IAM策略可能存在
Deny语句,覆盖了桶策略的Allow权限。检查是否有针对s3:ListBucket、s3:GetObject的拒绝规则,或者IP地址、MFA等条件限制导致无法访问。 - 确认对象级ACL权限:如果源桶内的对象是其他用户上传的,可能设置了对象级ACL拒绝你的服务账户访问。此时即使桶策略允许,对象ACL的优先级更高,需要源桶管理员调整对象ACL。
- 用策略模拟器验证策略有效性:让源桶管理员使用AWS控制台的策略模拟器,模拟你的服务账户执行
s3:ListBucket和s3:GetObject操作,确认策略是否真正生效。有时候策略语法看似正确,但存在隐藏的格式错误(如引号、逗号)导致不生效。
内容的提问来源于stack exchange,提问作者GCGM
相关产品推荐
相关产品推荐

