无法切换AWS配置文件CLI,但可以在控制台中进行

时间:2019-07-10 21:00:36

标签: 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
.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。
  • 我尝试将用户ARN从FIRST_ACCOUNT附加到admin的{​​{1}}角色的信任关系中。
  • 我的用户名中没有明确的DENY。
  • 我尝试将SECOND_ACCOUNT的{​​{1}}角色同时添加到我的adminSECOND_ACCOUNT中。

但是,我无法使用CLI切换到另一个配置文件:

.aws/config

我尝试了建议使用herehereherehere

的内容

2 个答案:

答案 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