0

鉴于登录aws login sso成功。

Successully logged into Start URL: *****

从这里我想启动我的服务,该服务需要设置以下环境变量和 AWS 凭证:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_SESSION_TOKEN

如何将这些变量提取到当前 shell 中?

我目前正在使用的解决方法:

我找到了一种可能的解决方法,对我有用:我注意到在我登录并运行aws sts get-caller-identity它后,它会在目录中创建文件~/.aws,从那里可以使用如下脚本对其进行解析:

#!/usr/bin/env bash

set -e

AWS_ACCESS_KEY_ID=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.AccessKeyId' --raw-output)
AWS_SECRET_ACCESS_KEY=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.SecretAccessKey' --raw-output)
AWS_SESSION_TOKEN=$(cat ~/.aws/cli/cache/*.json | jq '.Credentials.SessionToken' --raw-output)

>&2 echo "✨ you need to eval output of this script in your current window:"
>&2 echo '    eval $('$0')'
>&2 echo ""
echo "export AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"
echo "export AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}"
echo "export AWS_SESSION_TOKEN=${AWS_SESSION_TOKEN}"

在设置环境变量评估此脚本的输出后,我可以使用 AWS 凭证启动我的服务。eval $(./parse-aws-cache.sh)

它今天对我有用,但我对这个解决方案有一些疑问:

  • 我看不到这种行为在 AWS 中的记录位置;
  • 还从一个名为something cache的目录中读取数据似乎并不可靠;
  • 我不知道在具有不同配置的其他机器上工作有多便携。

理想情况下,我希望得到一个答案:

  • 提供另一种更可靠的方式来获取这些环境变量;
  • 或者给出一个合理的确认,从缓存文件中解析这些变量的方法实际上是可以使用的。
4

2 回答 2

0

我在这里有两种可能的解决方案:

  1. 使用类似aws-vault的东西 来公开凭证。
  2. 修改您的 docker 容器以使用默认凭证链并将您的~./aws目录挂载到容器中。
于 2021-10-14T22:36:50.697 回答
0

可以从 SDK 获取凭证值,而不是解析缓存文件。

这是打印出 AWS 凭证的 Javascript 代码:

const { fromSSO } = require("@aws-sdk/credential-provider-sso");
const getCredentials = fromSSO({ profile: "-MY-AWS-PROFILE" });

getCredentials().then(credentials => {
  console.error('✨ you need to eval output of this script in your current window');
  console.error(`  eval $(node ${__filename})`);

  console.log(`export AWS_ACCESS_KEY_ID=${credentials.accessKeyId}`);
  console.log(`export AWS_SECRET_ACCESS_KEY=${credentials.secretAccessKey}`);
  console.log(`export AWS_SESSION_TOKEN=${credentials.sessionToken}`);
}).catch(e => {
  console.error('Error parsing credentials', e);
});

唯一的问题是它依赖于 NodeJs,并且需要安装 SDK 库。

于 2021-08-21T20:37:43.443 回答