Vie*_*iet 6 amazon-web-services amazon-iam
我正在尝试使用不同的配置文件运行 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
Run Code Online (Sandbox Code Playgroud)
.aws$ cat credentials
[default]
aws_access_key_id = ID
aws_secret_access_key = KEY
Run Code Online (Sandbox Code Playgroud)
在SECOND_ACCOUNT有有信任关系,允许从任何用户管理员角色(访问所有资源),FIRST_ACCOUNT假设它。
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<FIRST_ACCOUNT>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的帐户FIRST_ACCOUNT也有承担角色的政策:
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*"
}
]
Run Code Online (Sandbox Code Playgroud)
FIRST_ACCOUNTsts:assumeRole上的用户名。FIRST_ACCOUNT的信托关系admin中的作用SECOND_ACCOUNT。admin角色添加SECOND_ACCOUNT到 my.aws/config和.aws/credentials.但是,我无法使用 CLI 切换到另一个配置文件:
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<FIRST_ACCOUNT>:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
}
Run Code Online (Sandbox Code Playgroud)
Vie*_*iet 10
所以我从AWS post找到了解决方案。
问题:
在 的信任关系中SECOND_ACCOUNT admin,有条件:
"Condition": {
"Bool": {
"aws:MultiFactorAuthPresent": "true"
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着它需要来自 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"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我添加到.aws/credentials:
[mfa]
aws_access_key_id = ID_FROM_ABOVE
aws_secret_access_key = KEY_FROM_ABOVE
aws_session_token = TOKEN_FROM_ABOVE
Run Code Online (Sandbox Code Playgroud)
然后编辑了.aws/config:
[mfa]
output = json
region = us-east-1
[profile secondaccount]
role_arn = arn:aws:iam::<SECOND_ACCOUNT_ID>:role/admin
source_profile = mfa
Run Code Online (Sandbox Code Playgroud)
然后我就可以使用--profile secondaccount.
如果您选择这样做,这是 AWS 的最佳实践,AWS 建议使用脚本来自动化获取新令牌的过程。
如果您“懒惰”,请删除condition信任关系中的 。
| 归档时间: |
|
| 查看次数: |
1388 次 |
| 最近记录: |