使用AWS CLI时,有没有办法可以指定它来使用凭证文件而不是存储在env变量中的值?
$ aws ec2 describe-instances --profile saml
saml
是存储在〜/ .aws / credentials中的凭证文件中的配置文件名称。我希望AWS CLI默认使用此凭据文件,而不使用存储在env变量中的文件。我怎么能这样做?
答案 0 :(得分:2)
不幸的是,您无法通过环境变量指定凭据文件的优先级。
http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-environment
环境变量会覆盖配置和凭据文件,并且可用于编写脚本或将命名配置文件临时设置为默认值。
构建另一个答案中提到的内容,您可以编写一个包装脚本:
我用下面(非常基本的)bash脚本测试了这个。我有一个名为$ REGION的环境变量。考虑以下名为" script.sh"。
的shell脚本#!/bin/bash
export REGION=""
echo "REGION = "$REGION
在调用脚本之前,我要回复$ REGION'证明它确实存在:
ubuntu@ip-172-31-24-61:~$ echo $REGION
us-east-1
然后我调用脚本,它使变量空出来并回显它显示它现在是空的。
ubuntu@ip-172-31-24-61:~$ ./script.sh
REGION =
一旦脚本终止,我就会回复$ REGION'从命令行和环境变量完全没问题。
ubuntu@ip-172-31-24-61:~$ echo $REGION
us-east-1
如果将此应用于您的用例,您可以编写一个将环境变量置零的包装脚本(通过导出AWS_ACCESS_KEY_ID =""),将所有命令行选项传递给AWS CLI。当CLI执行时,它将不会看到环境变量,因为它们已在其执行范围内被清除。
我不知道如何做的一件事就是让一个bash脚本获取所有未知数量的命令行参数,并将它们全部传递给另一个命令。我不认为这很困难,我只是不知道该怎么做。
但是,我确定如果你创建另一个问题,有人可以提供帮助!
另一种方法是,如果您不想使用它们,只需删除环境变量。
编辑2 我已经找到了如何制作一个非常简单的包装脚本来解决您的问题。在您实现此功能之前,我强烈建议您查看以下链接,以便更好地了解其工作原理以及实现此目的的其他方法。例如,您可以使用$ @和$ *来执行此操作,这可能是更普遍接受的方式。
#!/bin/bash
params=""
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""
for arg; do
params="$params $arg"
done
aws $params
两个出口' links null使环境变量无效。同样,环境变量只会在这个包装脚本的生命周期中被删除,因为它是在脚本范围内完成的,而不是全局的。
然后,for循环遍历用于运行脚本的所有命令行参数,将它们附加到字符串变量,然后调用' aws'使用包含所有命令行参数的字符串。
http://tldp.org/LDP/abs/html/wrapper.html
Bash: convert command line arguments into array
https://linuxconfig.org/bash-script-how-to-check-number-of-supplied-command-line-arguments
Check number of arguments passed to a Bash script
答案 1 :(得分:1)
aws命令行不支持指定不同的配置文件。
您可以做的是创建一个包装器,然后在运行aws命令之前写入文件~/.aws/credentials
,然后删除凭证文件
答案 2 :(得分:1)
您可以使用env
暂时取消设置变量:
env --unset=AWS_ACCESS_KEY_ID --unset=AWS_SECRET_ACCESS_KEY aws ec2 describe-instances --profile saml
由于变量将被取消设置,aws
将使用您的凭证文件。