如何使用凭证配置文件通过AWS CLI登录

17

我想设置多个AWS配置文件,这样在不同项目间跳转时就能轻松更改设置和凭据。

我已经阅读了AWS文档,但是关于如何选择要使用的配置文件的说明相当模糊。

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

调用GetAuthorizationToken操作时发生错误(UnrecognizedClientException):请求中包含的安全令牌无效。

3个回答

58

设置AWS登录的多个配置文件需要按照以下步骤进行:

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

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_profile中添加一行export 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标志以查看命令使用的凭据。


8
好的回答!你也可以使用 --profile <name> 命令在 CLI 命令中覆盖配置文件中的配置。 - John Rotenstein

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

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

0
几分钟后,我找到了规则:

如果您想使用 AWS_PROFILE ,请确保其余 AWS 环境变量未设置(不是空的 ... 必须是未设置)。

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}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接