AWS S3配置指定账户root ARN授予全账户访问权限失效问题
AWS S3跨账户全身份授权不生效解决方案
问题根因
在桶策略中填写对端账户root ARN作为Principal,是AWS跨账户授权的第一步,仅代表桶所属账户允许对端账户的身份访问该资源。按照AWS权限校验规则,对端账户的身份还需要在本账户内被分配对应的S3操作权限,才能正常访问,两层权限同时满足才会生效,缺省第二步就会出现配置不生效的情况。
两种可选配置方案
方案一:标准双层授权方案(安全等级高,推荐生产环境使用)
你需要同时在两个账户侧完成配置:
- 桶所属账户侧保持现有Principal配置即可,完整的桶策略参考如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GrantCrossAccountAccess", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:root" ] }, "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<替换为你的桶名>", "arn:aws:s3:::<替换为你的桶名>/*" ] } ] }
- 对端授权账户侧,由管理员给需要访问S3桶的用户、角色、用户组添加对应S3操作权限,权限策略参考如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<替换为桶名>", "arn:aws:s3:::<替换为桶名>/*" ] } ] }
方案二:单桶策略直接授权(无需对端账户额外配置,适合测试/内部场景使用)
如果不需要对端账户做二次权限管控,可以直接通过桶策略条件匹配对端账户所有身份,无需对端账户做额外配置,策略参考如下:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "GrantAllIdentityInSpecificAccountAccess", "Effect": "Allow", "Principal": "*", "Action": [ "s3:ListBucket", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<替换为你的桶名>", "arn:aws:s3:::<替换为你的桶名>/*" ], "Condition": { "StringEquals": { "aws:PrincipalAccount": [ "111122223333", "444455556666" ] } } } ] }
注意事项:使用该方案时需要先调整S3桶的「阻止公开访问」配置,关闭「阻止通过新的公开桶或访问点策略授予的公开访问」和「阻止通过任何公开桶或访问点策略授予的公开访问」两个开关,否则策略会被AWS主动拦截。
额外排查点
如果完成以上配置后仍然无法访问,可按以下顺序排查:
- 确认桶策略中Action和Resource字段匹配你实际需要执行的操作,比如上传对象需要添加
s3:PutObject权限 - 确认桶内对象没有设置独立的ACL限制跨账户访问
- 确认对端身份没有附加明确拒绝该S3桶访问的权限策略
内容的提问来源于stack exchange,提问作者Maik
相关产品推荐
相关产品推荐

