首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >假定AWS角色不用于未来的CLI命令

假定AWS角色不用于未来的CLI命令
EN

Stack Overflow用户
提问于 2019-01-28 23:45:37
回答 2查看 3.3K关注 0票数 2

我试图在一个docker容器中扮演一个角色,但这个角色似乎并不是固定的。下面是后跟aws sts get-caller-identityaws sts assume-role的输出

代码语言:javascript
复制
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文件的内容

代码语言:javascript
复制
jenkins@0d4794bcdd62:~/.aws$ cat ~/.aws/config
[default]
region = us-east-1

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-29 00:19:11

调用assume-role不会更改AWS CLI的配置。AWS CLI使用存储在~/.aws/credentials中的凭据进行调用。assume-role返回的文件不会自动复制到AWS CLI配置文件中,它们只是显示在您的屏幕上。

因此,一种解决问题的简单方法是将访问密钥、密钥和会话id复制/粘贴到~/.aws/credentials中。当然,这既不能扩展,也不方便。有一个更好的方法。

您可以在CLI中配置配置文件以使用所需的角色。假设您的基本身份具有承担该角色的权限(这是根据您在问题中对assume role的调用执行的)

这就是我如何配置我的~/.aws/config文件,以便从我的工作帐户临时访问我的个人帐户。当然,同样的技术也适用于同一个账户。

代码语言:javascript
复制
[default]
region=eu-west-1

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

角色ARN是您希望在目标帐户中承担的角色。

然后,您可以简单地键入:

aws --profile perso s3 ls

来交换角色。

票数 2
EN

Stack Overflow用户

发布于 2019-07-07 06:24:05

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

代码语言:javascript
复制
$ 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)中选择这种方法的原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54405559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档