跨账号假设IAM角色后无法查看指定S3 Bucket问题排查
问题原因与解决方案
你遇到的问题核心是缺少s3:ListAllMyBuckets权限。
AWS S3控制台在展示桶列表时,第一步会调用s3:ListAllMyBuckets接口获取当前身份能访问的所有桶的元数据(比如桶名、创建时间),之后才会根据你对单个桶的ListBucket权限,决定是否展示该桶的内容。你的现有策略只允许对foobar桶执行ListBucket和GetObject,但没有允许列出账号下所有桶的权限,所以控制台直接看不到任何桶。
修正后的策略
在原有策略中添加一条允许s3:ListAllMyBuckets的语句(该操作的资源只能指定为*,因为它是账号级别的全局操作):
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::foobar" }, { "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": "arn:aws:s3:::foobar/*" } ] }
补充说明
- 如果你用CLI直接执行
aws s3 ls s3://foobar,不需要ListAllMyBuckets也能成功,因为这个命令直接调用ListBucket接口,跳过了桶列表的获取步骤;但控制台必须先加载全量桶列表,所以必须添加该权限。 s3:ListAllMyBuckets仅用于展示桶的存在,不会赋予你对其他桶的任何操作权限,后续对桶的操作仍受对应桶的权限策略控制。
内容的提问来源于stack exchange,提问作者AfterWorkGuinness
相关产品推荐
相关产品推荐

