有没有办法将AWS CLI配置文件导出到环境变量?

Naf*_*Kay 14 amazon-web-services aws-cli

使用某些第三方工具(如Terraform)时,指定AWS CLI配置文件并不容易,我更喜欢使用环境变量而不是配置文件.

我有没有办法让AWS CLI只将当前配置文件AWS_ACCESS_KEY_IDAWS_SECRET_KEY环境变量导出到我的会话?

Fré*_*nri 28

您可以使用以下命令设置环境变量

aws configure get default.aws_access_key_id
aws configure get default.aws_secret_access_key
Run Code Online (Sandbox Code Playgroud)

如果您有其他配置文件可以更改,另一种写入方式是

aws configure get aws_access_key_id --profile <new_profile>
aws configure get aws_secret_access_key --profile <new_profile>
Run Code Online (Sandbox Code Playgroud)

所以例如它会

export TF_VAR_access_key=`aws configure get default.aws_access_key_id`
Run Code Online (Sandbox Code Playgroud)

  • 正在寻找相同的。Bash/zsh 脚本执行相同的操作 https://gist.github.com/mjul/f93ee7d144c5090e6e3c463f5f312587 披露:不是作者,只是发现它有用 (2认同)

Chr*_*est 22

现在,这是AWS CLI 的内置功能

只需打电话 eval "$(aws configure export-credentials --profile your-profile-name --format env)",您就可以开始了。

  • 对于其他用途,还有“env-no-export”格式。例如,您可以通过以下方式轻松地将凭证作为环境变量传递到 docker 容器:`docker run --env-file &lt;(aws configure export-credentials --profile your-profile-name --format env-no-export ) ...` (5认同)

小智 8

对于 sts 假设角色案例,基于 Frederic 的想法,我想出了一个可行的 shell 脚本如下:

aws-env.sh:

#!/bin/bash
export AWS_ACCESS_KEY_ID=$(aws configure get default.aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get default.aws_secret_access_key)
export AWS_SESSION_TOKEN=$(aws configure get default.aws_session_token)

echo AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
echo AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
echo AWS_SESSION_TOKEN=$AWS_SESSION_TOKEN

bash -i
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。


Naf*_*Kay 6

以前没有办法,但现在有.

我写了一个脚本来完成这个,aws-env:

usage: aws-env [-h] [-n] profile

Extract AWS credentials for a given profile as environment variables.

positional arguments:
  profile          The profile in ~/.aws/credentials to extract credentials
                   for.

optional arguments:
  -h, --help       show this help message and exit
  -n, --no-export  Do not use export on the variables.
Run Code Online (Sandbox Code Playgroud)

如果您信任该程序的输出,则可以在shell会话中使用它来导出给定配置文件的变量:

$ aws-env profile-name
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
$ aws-env -n profile-name
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
Run Code Online (Sandbox Code Playgroud)

要将变量导出到当前环境变量中,请将输出作为命令执行(再次,在查看源代码后再执行;)):

$ echo $AWS_ACCESS_KEY_ID

$ $(aws-env profile-name)
$ echo $AWS_ACCESS_KEY_ID
AKJHC...
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但是在@Frederic 发布官方 API 答案后看到您的回答,应该提到 CLI 是建议和支持的方法。 (3认同)

Enr*_* M. 6

在Terraform中

Terraform实际上直接支持AWS CLI配置文件:只需profileawsprovider块中设置适当的属性。

这样的事情应该可以解决问题:

provider "aws" {
  profile = "my_profile"
}
Run Code Online (Sandbox Code Playgroud)

环境变量

相反,如果您必须使用环境变量,则可以通过以下方式使用Frederic的建议:

export AWS_ACCESS_KEY_ID=$(aws configure get my_profile.aws_access_key_id)
export AWS_SECRET_ACCESS_KEY=$(aws configure get my_profile.aws_secret_access_key)
Run Code Online (Sandbox Code Playgroud)

如果要将环境变量传递给脚本,请使用:

AWS_ACCESS_KEY_ID=$(aws configure get my_profile.aws_access_key_id) \
AWS_SECRET_ACCESS_KEY=$(aws configure get my_profile.aws_secret_access_key) \
./script.sh
Run Code Online (Sandbox Code Playgroud)

具有“承担角色”的环境变量

如果您使用配置文件来承担在config字段中指定的角色role_arn,那么随着凭据的生成(在一段时间后过期),事情会变得有些棘手。

但这仍然可行:

read AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN <<< \
   $(aws sts assume-role                                           \
     --role-arn $(aws configure get my_profile.role_arn)           \
     --role-session-name my_profile_session --output text |        \
     awk '/^CREDENTIALS/ { print $2, $4, $5 }')
Run Code Online (Sandbox Code Playgroud)


AXE*_*abs 5

我喜欢 Kay 关于导出所需配置文件的脚本的想法,所以我也写了一个:

PROFILES=$(awk -F"\\\]|\\\[" '/^\[/{print $2}' ~/.aws/credentials)

select PROFILE in $PROFILES; do
  export AWS_ACCESS_KEY_ID="$(aws configure get aws_access_key_id --profile $PROFILE)"
  export AWS_SECRET_ACCESS_KEY="$(aws configure get aws_secret_access_key --profile $PROFILE)"
  export AWS_DEFAULT_REGION="$(aws configure get region --profile $PROFILE)"
  break
done

echo AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
echo AWS_SECRET_ACCESS_KEY=$(echo $AWS_SECRET_ACCESS_KEY|tr '[:print:]' '*')
echo AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION
Run Code Online (Sandbox Code Playgroud)

只需将其放入文件中,然后从 shell 中获取 (.) 即可。 这里链接了一个更新版本,它也获取 AWS _ TOKENS。