Amazon web services 如何在AWS CLI中替代env变量并使用AWS凭据文件?

Amazon web services 如何在AWS CLI中替代env变量并使用AWS凭据文件?,amazon-web-services,amazon-ec2,aws-cli,Amazon Web Services,Amazon Ec2,Aws Cli,使用AWS CLI时,是否有办法指定它使用凭据文件而不是存储在env变量中的值 $aws ec2描述实例——配置文件saml saml是存储在~/.aws/credentials中的凭证文件中的配置文件名。我希望AWS CLI在默认情况下使用此凭据文件,而不使用存储在env变量中的凭据文件。如何执行此操作?很遗憾,您无法指定凭据文件相对于环境变量的优先级 环境变量覆盖配置和凭据文件,对于编写脚本或临时将命名配置文件设置为默认配置文件非常有用 构建另一个答案中提到的内容,您可以编写一个包装器脚本

使用AWS CLI时,是否有办法指定它使用凭据文件而不是存储在env变量中的值

$aws ec2描述实例——配置文件saml


saml
是存储在~/.aws/credentials中的凭证文件中的配置文件名。我希望AWS CLI在默认情况下使用此凭据文件,而不使用存储在env变量中的凭据文件。如何执行此操作?

很遗憾,您无法指定凭据文件相对于环境变量的优先级

环境变量覆盖配置和凭据文件,对于编写脚本或临时将命名配置文件设置为默认配置文件非常有用

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

  • 用export命令覆盖环境变量(我认为这只是脚本范围内的临时命令)
  • 将命令传递到aws CLI
  • 一旦完成,包装器脚本将终止,环境变量将恢复原状(我认为)
我用下面(非常基本的)bash脚本测试了这一点。我有一个名为$REGION的环境变量。考虑下面的shell脚本,称为“脚本.SH”。

在调用脚本之前,我会使用“echo$REGION”来证明它确实存在:

ubuntu@ip-172-31-24-61:~$ echo $REGION
us-east-1
然后我调用这个脚本,它会将变量置零,然后echo显示它现在为空

ubuntu@ip-172-31-24-61:~$ ./script.sh
REGION =
一旦脚本终止,我将从命令行调用'echo$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
两个“导出”链接使环境变量无效。同样,环境变量只会在这个包装器脚本的生命周期内为空,因为它是在脚本的范围内完成的,而不是全局完成的

然后,for循环遍历用于运行脚本的所有命令行参数,将它们附加到字符串变量,然后使用包含所有命令行参数的字符串调用“aws”





aws命令行不支持指定不同的配置文件


您可以做的是,在运行aws命令之前制作一个包装器并写入文件
~/.aws/credentials
,然后删除凭证文件您可以使用
env
临时取消设置变量:

env--unset=AWS\u ACCESS\u KEY\u ID--unset=AWS\u SECRET\u ACCESS\u KEY AWS ec2描述实例--profile saml


由于变量将被取消设置,
aws
将使用您的凭据文件。

OP希望CLI使用凭据文件而不是环境变量,而不是使用其他凭据文件。据推测,OP希望保留环境变量并使用凭据。请参阅上面我的评论(在Brook的回答中)。详细说明我的问题:我们使用一个脚本为AWS CLI生成凭据,并且仅在一小时内有效。所以我总是希望使用这个(每次生成时都会被覆盖)凭证文件,而不是env变量。在这种情况下,我需要做什么?看看我修改过的答案……你总是可以删除环境变量(可能是最简单的)。为什么不重置环境变量呢?我假设OP不想永久删除它们,但有人建议。
#!/bin/bash

params=""
export AWS_ACCESS_KEY_ID=""
export AWS_SECRET_ACCESS_KEY=""

for arg; do
        params="$params $arg"
done

aws $params