如何使用凭据配置文件登录AWS CLI

时间:2017-05-29 13:10:51

标签: amazon-web-services authentication command-line-interface aws-cli amazon-ecr

我想设置多个AWS配置文件,以便在项目之间跳转时可以轻松更改设置和凭据。

我已经阅读了AWS文档,但在登录时如何选择要使用的配置文件却非常模糊。

当我尝试登录时,只是给我这个错误,这似乎表明它没有获取任何凭据。

An error occurred (UnrecognizedClientException) when calling the GetAuthorizationToken operation: The security token included in the request is invalid.

3 个答案:

答案 0 :(得分:23)

要为AWS登录设置多个配置文件,您需要执行以下操作:

  1. 使用您的访问密钥设置凭证文件
  2. 配置文件的默认设置(可选)
  3. 设置AWS_PROFILE环境变量
  4. 删除以前的AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY
  5. 1:〜/ .aws / credentials

    [default]
    aws_access_key_id =
    aws_secret_access_key =
    
    [cat]
    aws_access_key_id = XXXX
    aws_secret_access_key = XXXXXXXXXXXX
    
    [dog]
    aws_access_key_id = XXXX
    aws_secret_access_key = XXXXXXXXXXXX
    

    2:〜/ .aws / config

    [default]
    region = eu-central-1
    
    [profile cat]
    region = us-west-2
    
    [profile dog]
    region = ap-northeast-1
    

    第3。选择个人资料

    所选的配置文件由$AWS_PROFILE环境变量确定。在bash中,可以通过添加一行~\.bash_profileexport AWS_PROFILE="cat"中完成。要在当前终端中切换配置文件,请键入AWS_PROFILE=dog

    <强> 4。删除全局设置

    您还需要确保环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 未设置,因为aws-cli将优先考虑这些变量而非配置文件。

    <强>运行

    然后,您可以登录到您选择的AWS服务。要查看当前使用的个人资料echo $AWS_PROFILE。 ECR登录的示例命令为$(aws ecr get-login)

    <强>调试

    如果您仍然遇到问题,可以添加--debug标记,以查看其用于命令的凭据。

答案 1 :(得分:1)

对我来说,尽管我已完成所有设置,但我的AWS CLI较旧版本导致了此问题。

$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

通过应用上述命令,可以解决我的问题。

答案 2 :(得分:0)

几分钟后,我发现了规则:

如果您想使用AWS_PROFILE,请确保未设置其余的AWS env vars(不要仅 empty ...必须设置为 UNSET )。

profile=$AWS_PROFILE
unset $(printenv |grep AWS_ | cut -f1 -d"=");
export AWS_PROFILE=${profile};

然后:

  # with aws cli >= 1.x
  $(aws ecr get-login --no-include-email --region ${aws_region})

  # with aws cli >= 2.x
  registry=${aws_account_id}.dkr.ecr.${aws_region}.amazonaws.com
  aws ecr get-login-password --region ${aws_region} | docker login --username AWS --password-stdin ${registry}