假定将来的CLI命令未使用AWS角色

时间:2019-01-28 15:45:37

标签: amazon-web-services aws-cli

我正在尝试在Docker容器中扮演一个角色,但似乎角色没有坚持。以下是aws sts assume-role的输出,后跟aws sts get-caller-identity

jenkins@0d4794bcdd62:~/.aws$ aws sts get-caller-identity
{
    "UserId": "ABCDEFG1234567:i-01234546789abc",
    "Arn": "arn:aws:sts::555555555555:assumed-role/jenkins-masterRole/i-01234546789abc",
    "Account": "555555555555"
}
jenkins@0d4794bcdd62:~/.aws$ aws sts assume-role --role-arn arn:aws:iam::555555555555:role/ec2/CloudFormationRole --role-session-name "test-session-name"
{
    "Credentials": {
        "Expiration": "2019-01-28T16:37:04Z",
        "SessionToken": "[redacted]",
        "AccessKeyId": "[redacted]",
        "SecretAccessKey": "[redacted]"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "[redacted]:test-session-name",
        "Arn": "arn:aws:sts::5555555555555:assumed-role/CloudFormationRole/test-session-name"
    }
}
jenkins@0d4794bcdd62:~/.aws$ aws sts get-caller-identity
{
    "Account": "555555555555",
    "UserId": "ABCDEFG1234567:i-01234546789abc",
    "Arn": "arn:aws:sts::555555555555:assumed-role/jenkins-masterRole/i-01234546789abc"
}

如您所见,aws sts-assume角色正在工作,但似乎没有被应用。以下是我的〜/ .aws / config文件的内容

jenkins@0d4794bcdd62:~/.aws$ cat ~/.aws/config
[default]
region = us-east-1

AWS_CONFIG_FILE=~/.aws/config外,我没有设置任何AWS CLI环境变量。我最初没有设置,但是我在测试时做了。

2 个答案:

答案 0 :(得分:2)

调用type: 'line', data: { ... }, options: { ... annotation: { annotations: [{ value: 100, type: 'line', mode: 'horizontal', scaleID: 'y-axis-0', borderColor: '#D2DAE2', borderWidth: 1, borderDash: [2, 2], label: { content: 'Value 1' } }, { value: 50 type: 'line', mode: 'horizontal', scaleID: 'y-axis-0', borderColor: '#D2DAE2', borderWidth: 1, borderDash: [2, 2], value: 500, label: { content: 'Value 2' } }] } 不会更改AWS CLI的配置。 AWS CLI使用存储在assume-role中的凭证来进行调用。由~/.aws/credentials返回的内容不会自动复制到AWS CLI配置文件中,它们只会显示在屏幕上。

因此,解决您的问题的一种幼稚方法是将访问密钥,秘密密钥和会话ID复制/粘贴到assume-role中。当然,这不会扩展,也不会很方便。有更好的方法。

您可以在CLI中配置配置文件以使用所需的角色。假设您的基本身份有权担任该角色(按照您在问题中担任角色的电话进行操作)

这就是我配置~/.aws/credentials文件以从工作帐户临时访问我的个人帐户的方式。当然,同一帐户中也可以使用相同的技术。

~/.aws/config

角色ARN是您要在目标帐户中担任的角色。

然后您只需键入:

[default] region=eu-west-1 [profile perso] region=eu-west-1 role_arn=arn:aws:iam::[redacted]:role/admin source_profile=default

切换角色。

答案 1 :(得分:0)

您还可以(ab)使用--query选项为临时角色凭据生成环境变量分配,如下所示:

$ roleSessionName=my-example-session

$ arnOfRoleToAssume=arn:aws:iam::123456789012:role/demo 

$ assumeRoleEnv=$(aws sts assume-role \
            --role-session-name="$roleSessionName" \
            --role-arn="$arnOfRoleToAssume"\
            --output text \
            --query='Credentials.[
              join(`=`, [`AWS_ACCESS_KEY_ID`, AccessKeyId]),
              join(`=`, [`AWS_SECRET_ACCESS_KEY`, SecretAccessKey]),
              join(`=`, [`AWS_SESSION_TOKEN`, SessionToken])
          ]')

$ eval "export $assumeRoleEnv"

$ aws sts get-caller-identity # this and further aws calls use the assumed role

此方法的一个优点是不必弄乱共享的配置/凭据。例如,这就是为什么我在awscli-with-assume-role (Docker image)中选择这种方法的原因。