我有一个 AWS 多账户设置,我使用 IAM Identity Center 来管理用户和控制访问。我正在使用托管 AWS 角色来授予仅查看访问权限。当我登录到这些帐户之一(我们称之为
prod
)时,我希望能够使用 STS 在另一个帐户中扮演角色(我们称之为 shared
)。
为此,我需要在
shared
中设置一个 IAM 角色,该角色授予适当的访问权限,并具有允许我这样做的信任策略。最初我是从这个开始的(有效):
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<prodAccountID>:root"
},
"Action": "sts:AssumeRole",
}
]
}
如何将该主体从来自 prod
的
anything更改为仅通过 SSO 登录且具有特定角色的主体?
举个例子:
$ aws sts get-caller-identity
{
"UserId": "<some-id>:<username>",
"Account": "<prodAccountID>",
"Arn": "arn:aws:sts::<prodAccountID>:assumed-role/AWSReservedSSO_view-only_9ec0318096f8cdd9/<username>"
}
我希望任何具有
AWSReservedSSO_view-only_9ec0318096f8cdd9
角色的人都能够担任该角色。
经过大量试验和错误,结果证明
aws:PrincialARN
是所承担角色的 ARN。我不清楚这是否是防弹的。
但它确实允许这样的信托政策来完成我正在寻找的事情:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<prodAccountID>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:PrincipalARN": "arn:aws:iam::<prodAccountID>:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_view-only_*"
}
}
}
]
}
编辑:经过进一步的实验还发现可以这样做:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<prodAccountID>:role/aws-reserved/sso.amazonaws.com/<SSO-region>/AWSReservedSSO_view-only_9ec0318096f8cdd9"
},
"Action": "sts:AssumeRole",
}
]
}
这带来了 SSO 托管角色必须事先存在的限制,并且您需要知道全名 - 不仅仅是它的名称
view-only
。
AWS 稍微隐藏了他们对 IAM Identity Center 如何工作的解释。
AWS 链接
AWS 会为您执行的每个权限集分配创建一个角色。当用户使用身份中心时,用户将承担新创建的角色以及权限集中定义的附加权限。
如果您想将此角色的承担权限授予另一个角色,您需要将特定的信任策略写入目标角色。
AWS 描述了名称的生成方式,以便您可以在需要时自行构建。来自文档:
姓名 | ARN |
---|---|
AWSReservedSSO_权限集名称_唯一后缀 | arn:aws:iam::aws-account-ID:role/aws-reserved/sso.amazonaws.com/aws-region/AWSReservedSSO_permission-set-name_unique-suffix |
例如,如果您创建一个向数据库管理员授予 AWS 账户访问权限的权限集,则会使用以下名称和 ARN 创建相应的角色:
|名称 |ARN|
|--------|---|
|AWSReservedSSO_DatabaseAdministrator_1234567890abcdef| arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/eu-west-2/AWSReservedSSO_DatabaseAdministrator_1234567890abcdef|
如果您删除 AWS 账户中对此权限集的所有分配,则 IAM Identity Center 创建的相应角色也会被删除。如果您稍后对同一权限集进行新分配,IAM Identity Center 会为该权限集创建一个新角色。新角色的名称和 ARN 包含不同的唯一后缀。在此示例中,唯一后缀是 abcdef0123456789.
因此,信托政策应如下所示:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/eu-west-2/AWSReservedSSO_AdministratorAccess_*"
}
}
}
]
}
您首先允许整个账户“111122223333”代入该角色,然后过滤 ARN,以便只有 IAM 身份中心角色可以代入目标角色。您无法将角色直接输入到“委托人”部分,因为不允许使用通配符,并且目标委托人必须存在。