我正在尝试在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环境变量。我最初没有设置,但是我在测试时做了。
答案 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)中选择这种方法的原因。