我怎样才能放弃扮演的角色?

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

我有账户 A,我从中承担了账户 B 的角色。现在,由于我的工作已完成,我想承担账户 C 的角色。但由于只有账户 A 可以承担账户 C 的角色,而账户 B 则不能,所以我我无法这样做。

有什么方法可以使用户无效/切换所承担的角色吗?最短超时为 15 分钟,这对用户来说等待时间太长。

编辑:尝试通过 AWS CLI 实现它

运行以下命令:

aws sts assume-role --role-arn **** --role-session-name jenkins --external-id ****
amazon-web-services amazon-iam sts
3个回答
9
投票

据我了解,您使用assume-role,您将获得一组如下所示的凭据

    {
        "AssumedRoleUser": {
            "AssumedRoleId": "AROA3XFRBF535PLBIFPI4:s3-access-example",
            "Arn": "arn:aws:sts::123456789012:assumed-role/xaccounts3access/s3-access-example"
        },
        "Credentials": {
            "SecretAccessKey": "9drTJvcXLB89EXAMPLELB8923FB892xMFI",
            "SessionToken": "AQoXdzELDDY//////////wEaoAK1wvxJY12r2IrDFT2IvAzTCn3zHoZ7YNtpiQLF0MqZye/qwjzP2iEXAMPLEbw/m3hsj8VBTkPORGvr9jM5sgP+w9IZWZnU+LWhmg+a5fDi2oTGUYcdg9uexQ4mtCHIHfi4citgqZTgco40Yqr4lIlo4V2b2Dyauk0eYFNebHtYlFVgAUj+7Indz3LU0aTWk1WKIjHmmMCIoTkyYp/k7kUG7moeEYKSitwQIi6Gjn+nyzM+PtoA3685ixzv0R7i5rjQi0YE0lf1oeie3bDiNHncmzosRM6SFiPzSvp6h/32xQuZsjcypmwsPSDtTPYcs0+YN/8BRi2/IcrxSpnWEXAMPLEXSDFTAQAM6Dl9zR0tXoybnlrZIwMLlMi1Kcgo5OytwU=",
            "Expiration": "2016-03-15T00:05:07Z",
            "AccessKeyId": "ASIAJEXAMPLEXEG2JICEA"
        }
    }

您在运行命令时导出或直接使用的凭据。

  1. 当您直接使用它们时,您仅使用特定命令的凭据,在下一个命令中您将再次返回帐户 A。

  2. 导出时,您可以轻松调用 unset 命令来取消设置导出的 var,您将返回到帐户 A,然后再次调用假设角色并导出帐户 C 的凭据。


0
投票

扩展@samtoddler 答案

虽然您无法使用 aws cli 直接“撤销”会话令牌,或者在将角色指定为 aws cli 配置文件时“重新承担”角色,但您可以通过调用 sts 直接承担角色来实现类似的结果:AssumeRole API 使用 aws CLI,然后将

AWS_ACCESS_KEY_ID
,
AWS_SECRET_ACCESS_KEY
,
AWS_SESSION_TOKEN
,
AWS_DEFAULT_REGION
设置为环境变量。

您可以使用此脚本来承担角色,并且每次调用都会使用新的会话令牌覆盖会话令牌

#!/bin/bash

# Run aws sts assume-role and capture the output
assume_role_output=$(aws sts assume-role "$@" | cat)

# Extract temporary credentials from the output
export AWS_ACCESS_KEY_ID=$(echo $assume_role_output | jq -r '.Credentials.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo $assume_role_output | jq -r '.Credentials.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo $assume_role_output | jq -r '.Credentials.SessionToken')

# Extract AWS_DEFAULT_REGION from the --region parameter
AWS_DEFAULT_REGION=$(echo "$@" | awk -F'--region ' '{print $2}' | awk '{print $1}')
export AWS_DEFAULT_REGION

# Display the exported variables
echo "AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID"
echo "AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY"
echo "AWS_SESSION_TOKEN: $AWS_SESSION_TOKEN"
echo "AWS_DEFAULT_REGION: $AWS_DEFAULT_REGION"

请注意,之前的会话令牌将保持有效,直至过期(通常为 1 小时)。

用途:

~/development/aws/training ······································································································································· 19:55:14 ─╮
❯ source assume-role --profile mine --role-arn arn:aws:iam::************:role/mine-admin-role --role-session-name mine-role-session --region us-east-1                       ─╯
AWS_ACCESS_KEY_ID: ************
AWS_SECRET_ACCESS_KEY: ************
AWS_SESSION_TOKEN: ************
AWS_DEFAULT_REGION: us-east-1

 ~/development/aws/training ······································································································································· 20:07:53 ─╮
❯ aws sts get-caller-identity | cat                                                                                                                                          ─╯
{
    "UserId": "************:mine-role-session",
    "Account": "************",
    "Arn": "arn:aws:sts::************:assumed-role/mine-admin-role/mine-role-session"

请注意,使用

source
执行它,以便环境变量适用于您的 shell 会话。 就像魅力一样。


-1
投票

如果您使用 CLI,则无需“删除”假定的角色。

您应该使用 命名配置文件 并通过使用

--profile
CLI 开关显式指定配置文件名称,或者通过更改命令之间的
AWS_PROFILE
env 变量来在不同帐户中执行命令。

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