如何覆盖env变量并在AWS CLI中使用AWS凭证文件?

时间:2016-02-03 01:01:18

标签: amazon-web-services amazon-ec2 aws-cli

使用AWS CLI时,有没有办法可以指定它来使用凭证文件而不是存储在env变量中的值?

$ aws ec2 describe-instances --profile saml

saml是存储在〜/ .aws / credentials中的凭证文件中的配置文件名称。我希望AWS CLI默认使用此凭据文件,而不使用存储在env变量中的文件。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

不幸的是,您无法通过环境变量指定凭据文件的优先级。

http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#cli-environment

  

环境变量会覆盖配置和凭据文件,并且可用于编写脚本或将命名配置文件临时设置为默认值。

构建另一个答案中提到的内容,您可以编写一个包装脚本:

  • 使用export命令覆盖环境变量(我认为这只是在脚本范围内是临时的)
  • 将命令传递给aws CLI
  • 完成后,包装器脚本将终止,环境变量应该按照它们的方式返回(我认为)

我用下面(非常基本的)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将使用您的凭证文件。