如何为AWS另一账户所有用户授予S3桶ListBucket权限?
解决AWS S3跨账户授予所有用户ListBucket权限的问题
错误原因
你之前使用arn:aws:iam::<account_b>:user/*作为Principal的配置无效,是因为AWS不允许在S3桶策略中通过通配符直接指定另一账户的所有IAM用户,这种写法会触发Invalid principal in policy错误。
可行解决方案
方案1:通过账户根ARN授权,配合IAM内部权限控制
直接将账户B的根ARN作为Principal,然后在账户B的IAM体系内控制哪些用户可以访问该桶:
桶策略示例(替换<account_b_id>和<your_bucket_name>为实际值):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account_b_id>:root" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::<your_bucket_name>" } ] }
配置完成后,在账户B中给需要访问的用户/用户组添加IAM权限策略,允许s3:ListBucket操作目标桶即可。
方案2:使用条件键限制账户来源
如果需要更精准地限定只有账户B的实体能访问,可以用aws:PrincipalAccount条件键,配合通配符Principal:
桶策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::<your_bucket_name>", "Condition": { "StringEquals": { "aws:PrincipalAccount": "<account_b_id>" } } } ] }
这种方式会允许账户B下的所有IAM用户、角色等实体执行ListBucket操作,同样需要账户B内部的IAM策略允许对应用户的该操作才能生效。
注意事项
AWS的权限遵循桶策略 + IAM策略的交集规则,只有两者都允许的操作,用户才能实际执行。所以即使桶策略开放了权限,账户B的用户仍需要自身IAM策略具备对应的s3:ListBucket权限。
内容的提问来源于stack exchange,提问作者pyCthon
相关产品推荐
相关产品推荐

