允许用户通过 SSO 登录承担 IAM 角色

Ver*_*ola 6 amazon-web-services amazon-iam aws-sso

我正在尝试允许用户在 AWS 上担任角色。我将代入角色策略附加到 IAM 用户所属的组,以便他们可以代入特定角色。问题是用户现在使用 SSO 登录,并且不再允许使用 IAM 用户凭证通过控制台登录,因此用户无法承担该角色。如何配置具有 SSO 登录的用户来承担现有 IAM 角色?当我创建假设角色策略时,我选择了 AssumeRole 和 AssumeRoleWithSaml。但它仍然不起作用。

这就是 AssumeRole 策略的样子

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

该角色的信任关系如下所示

"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Service": "firehose.amazonaws.com"
        },
        "Action": "sts:AssumeRole"
    }
]
Run Code Online (Sandbox Code Playgroud)

Eri*_*son 9

我设法使用以下命令让 SSO 用户在他们经过身份验证的帐户中担任角色。请注意,您需要替换${ACCOUNT_ID}${SSO_ROLE_NAME}${ASSUMABLE_ROLE_NAME}。当然,您可能需要重新打包这些位。

aws iam create-role --role-name ${ASSUMABLE_ROLE_NAME} --assume-role-policy-document file://policy.json --profile $PROFILE
Run Code Online (Sandbox Code Playgroud)

政策.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::${ACCOUNT_ID}:root"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "ArnLike": {
            "aws:PrincipalArn": [
                "arn:aws:iam::${ACCOUNT_ID}:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_${SSO_ROLE_NAME}_*",
                "arn:aws:iam::${ACCOUNT_ID}:role/aws-reserved/sso.amazonaws.com/AWSReservedSSO_${SSO_ROLE_NAME}_*"
            ]
        }
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*Teo 4

您需要明确允许该用户/角色能够担任该角色。目前,校长设置为仅允许“消防服务”承担该角色。

第二个问题是您需要专门允许 SSO 帐户能够访问它。您需要获取当前 SSO 用户会话的 ARN。为了得到这个你应该运行aws sts get-caller-identity

你应该得到这样的东西

{
    "UserId": "BROA5DAM2TACHAA38V9J1:daryl.teo@appetiser.com.au",
    "Account": "1234567890",
    "Arn": "arn:aws:sts::1234567890:assumed-role/AWSReservedSSO_AWSAdministratorAccess_abe68abec87ew/something.username"
}
Run Code Online (Sandbox Code Playgroud)

或 1 内衬aws sts get-caller-identity --output text --query Arn

然后获取该值并将其作为附加策略声明添加到您的策略中。

{
    "Version": "2012-10-17",
    "Statement":
    [
        {
            "Effect": "Allow",
            "Principal":
            {
                "Service": "firehose.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal":
            {
                "AWS": "arn:aws:sts::1234567890:assumed-role/AWSReservedSSO_AWSAdministratorAccess_abe68abec87ew/something.username"
            },
            "Action": "sts:AssumeRole"
        },
    ]
}
Run Code Online (Sandbox Code Playgroud)

现在您可以使用:

aws sts assume-role --role-arn=arn:aws:iam::123456823432:role/NameOfYourRole --role-session-name=role-session-name