跨AWS账号通过IAM角色访问S3桶权限异常问题
问题:切换AWS角色后无法跨账号访问S3桶
我们有3个AWS账号,仅在其中1个账号(记为账号A)创建了IAM用户,这些用户通过Switch Role切换到另外两个账号(账号B、账号C)的角色登录。账号A下有一个名为logs-s3-bucket的S3桶,用户切换到账号B/C后无法查看该桶。
已配置的权限信息:
- 桶策略已为账号B的
dev-switch-role和账号C的prod-switch-role授予s3:ListBucket和s3:GetObject权限,具体策略如下:
[ { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::975062884610:role/dev-switch-role", "arn:aws:iam::243225358771:role/prod-switch-role" ] }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::logs-s3-bucket" }, { "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::975062884610:role/dev-switch-role", "arn:aws:iam::243225358771:role/prod-switch-role" ] }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::logs-s3-bucket/*" } ]
- 账号B/C中的切换角色已附加
AdministratorAccess管理策略
但用户切换角色后仍无法访问该S3桶。
排查与解决步骤
1. 确认角色ARN的正确性
核对桶策略中指定的dev-switch-role和prod-switch-role的ARN,确保账号ID、角色名称完全匹配,无拼写错误或格式问题。
2. 检查AWS Organizations服务控制策略(SCP)
如果账号B/C属于AWS Organizations,需检查组织或账号级别的SCP是否限制了跨账号S3访问。常见的限制SCP会拒绝访问非本账号的S3资源,例如:
{ "Effect": "Deny", "Action": "s3:*", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": "${aws:PrincipalAccount}" } } }
若存在此类SCP,需修改规则,添加对账号A的logs-s3-bucket的例外授权。
3. 验证S3桶的访问控制列表(ACL)
登录账号A的AWS控制台,进入logs-s3-bucket的权限页面,检查"访问控制列表":
- 添加账号B/C的账号ID,授予"列出"(对应
s3:ListBucket)和"读取对象"(对应s3:GetObject)权限。
4. 使用IAM Access Analyzer模拟权限
在账号A中打开IAM Access Analyzer,执行权限模拟:
- 主体选择目标角色的ARN(如
arn:aws:iam::975062884610:role/dev-switch-role) - 操作选择
s3:ListBucket和s3:GetObject,资源指定桶和对象的ARN - 查看模拟结果,定位是否存在拒绝项或未授权的具体原因。
5. 检查目标角色的权限边界
如果目标角色设置了权限边界,确认边界策略允许访问跨账号的S3资源。权限边界会限制角色的最大权限范围,即使角色附加了AdministratorAccess,若边界不允许跨账号操作,也会导致访问被拒绝。
内容的提问来源于stack exchange,提问作者Jainam
相关产品推荐
相关产品推荐

