能否仅通过另一账号的IAM组跨账号担任指定IAM角色?
问题结论
该需求完全可以实现,但你设想的配置方案存在核心错误,无法生效:IAM角色信任策略不支持直接将IAM组设置为信任主体(Principal),IAM组是用户的集合容器,本身不是可发起API请求的认证身份,直接填写组ARN会被IAM识别为无效主体,直接拒绝所有跨账号扮演请求。
正确实现逻辑
AWS跨账号角色扮演的权限校验是双向的,必须同时满足账号B侧(被访问资源侧)的信任策略放行、账号A侧(访问发起侧)的身份权限策略放行,请求才会通过,你可以利用这个机制实现“仅账号A特定组成员可扮演B的角色”的需求:
- 账号B侧的角色信任策略仅信任账号A的根主体,代表账号A下的身份具备申请扮演该角色的资格,不会直接放开所有账号A身份的权限
- 账号A侧仅给指定IAM组附加扮演账号B目标角色的权限,不在该组内的身份默认没有对应权限,自然无法发起成功的扮演请求
具体配置
1. 账号B侧EKS访问角色的信任策略
将原有信任策略修改为以下内容,替换占位符为实际账号ID:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::<账号A的12位账号ID>:root" } } ] }
如果你需要更强的安全约束,可以在
Condition字段增加额外校验,比如强制要求扮演角色时必须使用MFA验证。
2. 账号A侧附加到目标IAM组的权限策略
将原有组策略的Resource字段替换为账号B目标角色的ARN即可:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<账号B的12位账号ID>:role/<账号B中EKS访问角色的名称>" } ] }
配置校验说明
配置完成后可以做两类测试验证效果:
- 使用账号A中归属目标IAM组的用户/身份调用
sts:AssumeRole接口,可以成功获取临时凭证,结合你之前配置的EKS aws-auth ConfigMap映射即可正常访问EKS集群 - 使用账号A中不在目标IAM组的用户/身份调用相同接口,会直接返回权限不足错误,符合预期的访问控制要求
内容的提问来源于stack exchange,提问作者jonnybinthemix
相关产品推荐
相关产品推荐

