如何临时切换 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?