如何临时切换 AWS CLI 的配置文件?

Posted

技术标签:

【中文标题】如何临时切换 AWS CLI 的配置文件?【英文标题】:How to temporarily switch profiles for AWS CLI? 【发布时间】:2018-09-17 21:16:21 【问题描述】:

更新答案 (7/10/2021):对于 AWS CLI v1,请执行以下操作:

export AWS_DEFAULT_PROFILE=user2

对于 AWS CLI v2,以下内容将起作用:

export AWS_PROFILE=user2

完整的问题如下:


(1.) 在为 AWS CLI 成功配置第二个配置文件后,我尝试使用以下命令在我的 bash 会话中将配置文件设置为 user2,但未成功:

export AWS_PROFILE=user2

...根据此处的建议:https://docs.aws.amazon.com/cli/latest/userguide/cli-multiple-profiles.html

(2.) 以下命令有效:

aws s3 ls --profile user2

所以我知道 AWS CLI 和 user2 配置文件都在我的计算机上运行。

(3.) 但是,当我随后(即输入“export AWS_PROFILE=user2”后)尝试类似:

aws s3 ls

...AWS 的响应假设我想将其作为默认用户(不是 user2)进行查询

(4.) 因此,我可以从命令行使用 user2 配置文件的唯一方法是继续将“--profile user2”附加到每个命令,这很乏味。

(5.)

echo $AWS_PROFILE

产量:

>> user2

,正如预期的那样。

知道这里发生了什么吗?我确定我在某个地方犯了一些愚蠢的错误。

【问题讨论】:

您正在寻找的是预期的行为。请参阅此 AWS 文档:docs.aws.amazon.com/cli/latest/userguide/…。您能否确认您在运行 aws 命令的同一会话中设置环境变量? 你从AWS_PROFILE=user2 aws s3 ls得到什么? that 是否成功使用user2 您使用的是哪个版本的 aws-cli? 这也将帮助您了解 awscli 在 wrt 凭据中所做的事情:aws s3 ls --debug | grep botocore.session 你可以试试AWS_DEFAULT_PROFILE=user2 吗? 【参考方案1】:

创建或编辑此文件:

% vim ~/.aws/credentials

列出任意数量的密钥对:

[default]
aws_access_key_id=AKIAiosFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[user1]
aws_access_key_id=AKIAI44QH8DHBEXAMPLE
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

包括--profile user1 以选择个人资料并做你喜欢的事:

aws s3api list-buckets --profile user1
# any aws cli command now using user1 pair of keys

.... 或 ....

设置一个局部变量来选择你要使用的键对:

% export AWS_PROFILE=user1

然后做你喜欢的事:

aws s3api list-buckets  # any aws cli command now using user1 pair of keys

更多细节: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html

【讨论】:

该选项在原始问题描述中被列为次优。这不是一个好方法,因为它涉及将“--profile [user]”附加到您运行的每个 CLI 命令。 我建议删除,您的答案中没有任何内容未在上述答案中明确说明。【参考方案2】:

接受的答案假设您使用的是 Linux 或 Mac 终端。我为这两个操作系统添加了命令。

窗口

set AWS_PROFILE=profile_name

Linux 或 Mac

export AWS_PROFILE=profile_name

这些将设置您每次执行 aws 命令时将使用的 aws 配置文件。但是,如果您只想为一个 aws 命令临时切换配置文件。

aws [command] [sub-command] --profile [profile-name]

【讨论】:

这里的windows答案是针对cmd的。对于 powershell,它是 $env:AWS_PROFILE = 'profile_name'【参考方案3】:

对于 AWS CLI v1,最简洁的解决方案是:

export AWS_DEFAULT_PROFILE=user2

之后,像这样的命令:

aws s3 ls

...从相应的帐户处理。

对于 AWS CLI v2,以下内容将起作用:

export AWS_PROFILE=user2

【讨论】:

根据 Diego 在下面的评论,此变量名称已重命名为 AWS_PROFILE。 More here. @emilebaizel 实际上 "export AWS_PROFILE=[profile_name]" 从来没有为我或其他许多人工作过,因此这个问题很受欢迎。 使用最新的 AWS CLI 是否仍然会失败? @emilebaizel "export AWS_PROFILE=user2" 在 AWS CLI v2 中有效【参考方案4】:

对于windows使用

set AWS_DEFAULT_PROFILE=user2

【讨论】:

您好,欢迎来到 SO!请阅读How to write a good answer。尝试包含您的答案与已接受的答案相比更好和/或不同的地方!【参考方案5】:

You can add the profile flag

aws s3 ls --profile marketingadmin

【讨论】:

【参考方案6】:
user@machine:~/.aws$ aws --version
aws-cli/2.1.2 Python/3.7.3 Linux/5.4.0-53-generic exe/x86_64.linuxmint.20

如果我有很多命名配置文件,我会在 .bashrc 中添加别名。

例如:

alias harry-tuttle='export AWS_PROFILE=harry-tuttle'

然后切换配置文件成为一个输入更少的命令。

要查看您的所有个人资料:

aws configure list-profiles`

【讨论】:

【参考方案7】:

AWS cli 有 3 种读取变量的方式

key_id / key_secret 的环境变量 通过 cred/config 配置文件(通常在 ~/.aws/cre...) 内嵌手动值

见:https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#credentials

一种方式将被另一种方式覆盖。基于 OP,可能是虽然 DEFAULT_PROFILE 设置为 userX,但 AWS_ACCESS_KEY_ID 和/或 AWS_SECRET_ACCESS_KEY 环境变量设置为其他值。

您可以为 shell 函数创建一个别名,通过使用

将凭据加载到当前环境
"export AWS_ACCESS_KEY_ID=XXXXXXX;"... and more

或者通过秘密管理器更安全地加载

"export AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile XXXX)"... and more

导出所有访问密钥/秘密等,然后检查内存中是否加载了正确的凭据

aws configure list

最后.. 将变量重置为“默认”.. 作为一个好习惯,以确保您作为 AWS 角色执行所需的操作;特别是在使用多个配置文件时。希望这会有所帮助。

【讨论】:

【参考方案8】:

你可以看到它是如何工作的

$ export AWS_PROFILE=myprofile
$ aws s3 ls --debug 2>&1 | grep profile
2018-04-08 19:19:17,990 - MainThread - botocore.session - DEBUG - Loading variable profile from environment with value 'myprofile'.

我怀疑这对你有什么不同。

你也可以验证

$ AWS_PROFILE=myprofile aws s3 ls --debug 2>&1 | grep profile

$ aws s3 ls --profile myprofile --debug 2>&1 | grep profile

都给出相同的结果。

【讨论】:

这些命令对我来说不会产生相同的结果。前两个不产生任何输出。最后一个产生以下输出:“2018-04-08 23:11:33,683 - MainThread - awscli.clidriver - DEBUG - 输入到 CLI 的参数:['s3', 'ls', '--profile', 'myprofile ', '--debug'] 2018-04-08 23:11:33,683 - MainThread - botocore.credentials - DEBUG - 因为配置文件名称已显式设置,所以跳过环境变量凭据检查。 @JamesShapiro 从第一个命令中删除 | grep profile 看看里面有什么

以上是关于如何临时切换 AWS CLI 的配置文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Elastic Beanstalk 配置 aws cli 配置文件?

如何使用有效的 AWS 配置文件配置 Alexa ask-cli?

如何更改aws cli中的默认配置文件变量?

ECS 任务。如何在容器中使用 AWS CLI

Vue CLI 项目在 yarn -> npm 切换后不会热重载。也没有配置文件?

aws CLI使用