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

abithluo  于 2023-02-05  发布在  Shell
关注(0)|答案(8)|浏览(119)

更新答复(2021年7月10日):对于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",这是非常繁琐的。
(五)

echo $AWS_PROFILE

产量:

>> user2

,不出所料。
你知道这是怎么回事吗?我肯定在哪里犯了什么愚蠢的错误。

vdgimpew

vdgimpew1#

对于AWS CLI v1,最干净的解决方案是:

export AWS_DEFAULT_PROFILE=user2

之后,命令如下:

aws s3 ls

......从适当的帐户进行处理。
对于AWS CLI v2,以下操作将起作用:

export AWS_PROFILE=user2
vwhgwdsa

vwhgwdsa2#

可接受的答案假设您使用的是Linux或Mac终端。我添加了用于Windows、Linux和Mac OS的命令。

窗口

指令

set AWS_PROFILE=profile_name

动力 shell

$env:AWS_PROFILE = 'profile_name'

Linux或Mac

export AWS_PROFILE=profile_name
这些将设置你的aws配置文件,你将使用每次你执行一个aws命令。但如果你只是想切换配置文件临时为一个aws命令。
aws [command] [sub-command] --profile [profile-name]

3htmauhk

3htmauhk3#

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

$ 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

都给予相同的结果。

yftpprvb

yftpprvb4#

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

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

参见:www.example.comhttps://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角色执行所需的操作;特别是在使用多个配置文件时。希望这有帮助。

jdg4fx2g

jdg4fx2g5#

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`
njthzxwz

njthzxwz6#

Windows使用

set AWS_DEFAULT_PROFILE=user2
gdrx4gfi

gdrx4gfi7#

创建或编辑此文件:

% 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

相关问题