我正在尝试使用其他配置文件运行AWS CLI命令:
.aws$ cat config
[default]
region = us-east-1
output = json
[profile secondaccount]
role_arn = arn:aws:iam::<SECOND_ACCOUNT_ID>:role/admin
source_profile = default
.aws$ cat credentials
[default]
aws_access_key_id = ID
aws_secret_access_key = KEY
SECOND_ACCOUNT
具有管理员角色(访问所有资源),该角色具有信任关系,以允许FIRST_ACCOUNT
中的任何用户来承担它。
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<FIRST_ACCOUNT>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
我在FIRST_ACCOUNT
上的帐户也有担任该角色的政策:
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*"
}
]
FIRST_ACCOUNT
上的用户名上,以拥有sts:assumeRole。FIRST_ACCOUNT
附加到admin
的{{1}}角色的信任关系中。SECOND_ACCOUNT
的{{1}}角色同时添加到我的admin
和SECOND_ACCOUNT
中。但是,我无法使用CLI切换到另一个配置文件:
.aws/config
的内容
答案 0 :(得分:1)
为了使secondaccount
扮演admin
的角色,它必须使用default
个人资料中的凭据。在所提供的示例中,您的default
配置文件未定义访问键,因此无法神奇地在secondaccount
中扮演角色。例如
[default]
region = us-east-1
aws_access_key_id=AKIAJQZVTAZXBSTXXXX
aws_secret_access=MYSECRERACCESS
output = json
[profile secondaccount]
role_arn = arn:aws:iam::<SECOND_ACCOUNT_ID>:role/admin
source_profile = default
它在控制台中适用,因为您在承担目标角色之前使用用户名+密码组合登录,而对于CLI,则假定提供访问密钥+秘密密钥来实现
答案 1 :(得分:0)
所以我从an AWS post找到了解决方案。
问题:
在SECOND_ACCOUNT
admin
的信任关系中,存在以下条件:
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
这意味着它需要MFA的令牌才能执行CLI命令。
我做到了:
$ aws sts get-session-token --serial-number MFA_NUM --token-code CODE_FROM_MFA
{
"Credentials": {
"AccessKeyId": ID,
"SecretAccessKey": KEY,
"SessionToken": TOKEN,
"Expiration": "2019-07-12T01:14:07Z"
}
}
然后我添加到了.aws/credentials
:
[mfa]
aws_access_key_id = ID_FROM_ABOVE
aws_secret_access_key = KEY_FROM_ABOVE
aws_session_token = TOKEN_FROM_ABOVE
然后编辑了.aws/config
:
[mfa]
output = json
region = us-east-1
[profile secondaccount]
role_arn = arn:aws:iam::<SECOND_ACCOUNT_ID>:role/admin
source_profile = mfa
然后,我可以使用--profile secondaccount
运行CLI命令。
如果您选择这样做是AWS的最佳实践,则AWS建议拥有一个脚本来自动执行获取新令牌的过程。
如果您“懒惰”,请删除“信任关系”中的condition
。