如何配置AWS SSO登录用户承担现有IAM角色?
原本通过给IAM用户所属组附加角色承担策略,让用户能承担特定IAM角色。但用户改用SSO登录后,无法再使用IAM凭证登录控制台,也就无法承担目标角色。已在角色承担策略中添加sts:AssumeRole和sts:AssumeRoleWithSAML权限,但仍未生效,该如何配置SSO登录用户使其能承担现有IAM角色?
现有配置
角色承担策略
"Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "sts:AssumeRole", "sts:AssumeRoleWithSAML" ], "Resource": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/KinesisFirehoseServiceRole--us-east-1-xxxxxxxxxxxxx" } ]
角色信任关系
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" } ]
要让SSO用户能承担目标IAM角色,需要完成两个核心配置:更新目标角色的信任关系,以及在AWS SSO权限集中添加角色承担权限,具体操作如下:
修改目标IAM角色的信任关系
当前目标角色的信任关系仅允许firehose.amazonaws.com服务主体承担,必须添加AWS SSO的身份提供商(IdP)作为可信主体,才能让SSO用户通过SSO身份承担该角色。更新后的信任关系示例(替换占位符为你的实际信息):
"Version": "2012-10-17", "Statement": [ // 保留原有的Firehose服务信任规则 { "Effect": "Allow", "Principal": { "Service": "firehose.amazonaws.com" }, "Action": "sts:AssumeRole" }, // 添加SSO身份提供商的信任规则 { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::你的AWS账号ID:saml-provider/AWSSSO" }, "Action": "sts:AssumeRoleWithSAML", "Condition": { "StringEquals": { "SAML:aud": "https://signin.aws.amazon.com/saml" } } } ]注意:
arn:aws:iam::你的AWS账号ID:saml-provider/AWSSSO中的AWSSSO是AWS SSO默认创建的SAML提供商名称,若你自定义了名称,需替换为实际名称。在AWS SSO权限集中添加角色承担权限
SSO用户的权限由AWS SSO的权限集控制,此前给IAM用户组附加的策略对SSO用户无效,需在对应SSO权限集中添加允许承担目标角色的权限:- 登录AWS SSO控制台,找到目标用户/用户组所属的权限集
- 编辑该权限集,添加自定义权限策略,内容如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::xxxxxxxxxxxx:role/service-role/KinesisFirehoseServiceRole--us-east-1-xxxxxxxxxxxxx" } ] }无需添加
sts:AssumeRoleWithSAML,因为SSO会自动处理SAML断言流程,用户在SSO控制台切换角色时,底层调用的是sts:AssumeRole。验证配置
完成上述操作后,让用户重新登录AWS SSO控制台,在「应用程序」中选择「AWS账户」,找到目标账户后,即可看到并切换至该IAM角色。
内容的提问来源于stack exchange,提问作者Veronica Ajisola

