当前位置: 首页 > 知识库问答 >
问题:

如何在AWS CLI中重写env变量并使用AWS凭据文件?

葛驰
2023-03-14

当使用AWS CLI时,是否有一种方法可以指定它使用凭据文件,而不是存储在env变量中的值?

$aws ec2描述-实例-配置文件SAML

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

共有1个答案

胡承悦
2023-03-14

不幸的是,您不能为凭据文件指定优先于环境变量的优先级。

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

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

  • 使用export命令覆盖环境变量(我认为这只是脚本范围内的临时命令)
  • 将命令传递给aws CLI
  • 完成后,包装器脚本将终止,环境变量应返回到原来的位置(我认为)

我用下面的(非常基本的)bash脚本对此进行了测试。我有一个名为$region的环境变量。考虑下面名为“script.sh”的shell脚本。

#!/bin/bash
export REGION=""
echo "REGION = "$REGION

在调用脚本之前,我用'echo$region'来证明它确实存在:

ubuntu@ip-172-31-24-61:~$ echo $REGION
us-east-1
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

http://tldp.org/ldp/abs/html/wrapper.html
Bash:将命令行参数转换为数组
https://linuxconfig.org/bash-script-how-to-check-number-of-supply-command-line-arguments
检查传递给Bash脚本的参数数

 类似资料:
  • 我在php项目中有一个Dockerfile,我需要在执行过程中传递用户和密码以下载库。 用户和密码必须在生产或本地 .env 文件中隐藏。目前我只是尝试本地选项,用户和密码为空。 我使用过和,但不仅登录失败,而且当我打印变量时,它们是空的。我也试过将变量硬编码,它工作正常,所以问题是变量没有从. env文件中检索。 docker compose开始如下 还有 Dockerfile: .env 的开

  • 我必须在nifi进程中使用aws临时凭证AccessKey、SecretKey和令牌来访问S3对象。AccessKey、SecretKey和Token将由Api调用提供。如何在nifi ListS3对象等中使用这些临时凭证? 我发现的选项之一是使用AWSCre的alsProviderControlllerService,因为这可以根据API调用更新控制器服务的值吗? 在这个场景中我还可以使用其他选

  • 问题内容: 我正在使用Docker和Docker-compose构建一堆nginx + php。 我试图在我的文件中设置时区,并在Dockerfile中使用它,但是我可能会误解文档中的内容。 .env docker-compose.yml php7-fpm / Dockerfile 容器内部的时区设置不正确(在php容器bash中运行)。如果我在Dockerfile中手动编写区域,那么它将起作用。

  • 我的文件夹根目录上有一个。env文件。这是我的。环境 我试图访问application.yml上的PORT变量,但它没有从。env文件中读取变量。这是我的申请。yml

  • 我有一个现有的属性文件,如下所示 系统中有两个操作将获取并设置值。 其思想是,当I调用为true时,该值必须反映在application.properties文件中。 有可能实现我想要的吗?或者我需要一个额外的配置文件吗?

  • 问题内容: 我想创建一个Laravel Web应用程序,允许管理员用户使用Web后端系统更改.env文件中的某些变量(例如数据库凭据)。但是,如何保存更改? 问题答案: 没有内置的方法可以做到这一点。如果您确实想更改文件的内容,则必须结合使用PHP的文件写入方法和某些字符串替换。为了获得一些启发,您应该看一下命令:KeyGenerateCommand.php: 构建文件路径并检查是否存在后,该命令