通过 IAM Identity Center 登录时承担角色

Kas*_*sen 4 amazon-web-services amazon-iam aws-sts

我有一个 AWS 多账户设置,我使用 IAM Identity Center 来管理用户和控制访问。我正在使用托管 AWS 角色来授予仅查看访问权限。当我登录到其中一个帐户(我们称之为prod)时,我希望能够使用 STS 来承担另一个帐户中的角色(我们称之为shared)。

为此,我需要设置一个 IAM 角色来shared授予适当的访问权限,并拥有允许我这样做的信任策略。最初我是从这个开始的(有效):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<prodAccountID>:root"
            },
            "Action": "sts:AssumeRole",
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

如何将该主体从任何来源更改prod为仅通过 SSO 登录并具有特定角色的主体?

举个例子:

$ aws sts get-caller-identity
{
    "UserId": "<some-id>:<username>",
    "Account": "<prodAccountID>",
    "Arn": "arn:aws:sts::<prodAccountID>:assumed-role/AWSReservedSSO_view-only_9ec0318096f8cdd9/<username>"
}
Run Code Online (Sandbox Code Playgroud)

我希望任何有这个AWSReservedSSO_view-only_9ec0318096f8cdd9角色的人都能够担任这个角色。

Kas*_*sen 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_*"
                }
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

编辑:经过进一步的实验还发现可以这样做:

{
    "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",
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这带来了 SSO 托管角色必须事先存在的限制,并且您需要知道全名 - 而不仅仅是它的名称view-only