AWS SSO登录凭据作为环境变量



假设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}"

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

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

  • 我看不出这个行为在AWS中的记录;
  • 还从名为的目录中读取缓存似乎不可靠;
  • 我不知道在其他机器上使用不同的配置有多便携。

理想情况下,我希望得到的答案是:

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

现在可以使用AWS CLI的内置功能来完成。

简单地运行eval "$(aws configure export-credentials --profile your-profile-name --format env)",你应该很好去。

凭证值可以从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库。

我有两个可能的解决方案:

  1. 使用类似aws-vault的东西来暴露凭证。
  2. 修改docker容器以使用默认凭证链,并将~./aws目录挂载到容器中。

安装aws2-wrap之后,我可以导出AWS环境变量并使用

将它们传递给容器
eval "$(aws2-wrap --export)"
docker run -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_SESSION_TOKEN -e AWS_DEFAULT_REGION my-image-name

我在Docker Github问题中发现了aws2-wrap,以增加对AWS SSO的支持。关于如何通过创建docker context与docker一起使用AWS SSO,请参阅该线程的另一个建议。

相关内容

  • 没有找到相关文章

最新更新