如何为AWS假定角色创建信任策略?跨账号切换遇主体无效报错
跨AWS账号角色扮演的信任关系配置错误解析
问题场景
我有两个AWS账号A和B:账号A内有角色X,账号B内有角色Y。账号A中的某服务已成功扮演角色X,现在需要该服务继续扮演账号B中的角色Y。我尝试将角色X的临时会话ARN(格式为arn:aws:sts::<account A>:assumed-role/<some string>/<some string>)添加到角色Y的信任关系策略中,使用了以下配置:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:sts::<account A>:assumed-role/*/*" }, "Action": "sts:AssumeRole" } ] }
系统返回错误:invalid principal in policy,请问哪里操作错了?
错误原因
AWS IAM信任策略的Principal.AWS字段仅接受持久身份实体的ARN,比如IAM用户ARN、IAM角色ARN、账号根ARN或组织ARN等。而arn:aws:sts::...:assumed-role/...属于临时会话ARN,是角色被扮演后生成的临时身份标识,并非持久的IAM实体,因此不能被用作信任策略的主体。
正确配置方案
你需要将账号A中角色X的持久角色ARN作为信任主体,添加到账号B角色Y的信任关系里。这样当账号A的服务成功扮演角色X后,就可以凭借X的身份请求扮演角色Y。
正确的信任策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account A>:role/X" }, "Action": "sts:AssumeRole" } ] }
如果需要允许账号A下所有角色都能扮演Y(不推荐,建议遵循最小权限原则),也可以使用账号A的根ARN作为主体:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account A>:root" }, "Action": "sts:AssumeRole" } ] }
内容的提问来源于stack exchange,提问作者picardo
相关产品推荐
相关产品推荐

