通过 IAM 身份中心登录时承担角色

问题描述 投票:0回答:2

我有一个 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
角色的人都能够担任该角色。

amazon-web-services amazon-iam aws-sts
2个回答
5
投票

经过大量试验和错误,结果证明

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


0
投票

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 身份中心角色可以代入目标角色。您无法将角色直接输入到“委托人”部分,因为不允许使用通配符,并且目标委托人必须存在。

© www.soinside.com 2019 - 2024. All rights reserved.