在开发人员计算机上,使用aws --configure
和s3cmd configure
时,AWS 密钥和密钥存储在纯文本文件中。
出于安全原因,我希望至少以安全和加密的方式保存秘密,例如使用 MAC 钥匙串。
环境变量似乎不是解决方案,因为它们也需要安全地保存。
有没有办法以安全的方式存储密钥?
(作为旁注,无需提及所有计算机都有密码,并且密钥在 AWS 中具有所需的最低权限,并且还有其他安全方法。
您可以通过利用 AWS SSO & AWS Organizations,而不是长期凭证(AWS IAM 访问密钥(。短期凭据未加密,但暂时有效(可以配置(。
见 https://latanassov.dev/aws/2020-01-23/aws-sso-aws-cli.html
我在~/.aws/config
文件中使用credential_process
键来实现此目的。将其设置为要运行的命令,该命令将凭据打印到stdout
。我在pass
周围使用 bash 脚本,但您可以使用任何您想要的东西。
例如,我们将通过在~/.aws/config
中设置来配置配置文件simonw
[profile simonw]
credential_process = get-my-creds-cmd
output = json
。然后我们需要该get-my-creds-cmd
命令存在于$PATH
上,或者您可以使用绝对路径引用它。我们将命令创建为 bash 脚本:
#!/bin/bash
accessKey=AKIA... # TODO get this from somewhere secure
secretKey=... # TODO get this from somewhere secure
cat << HEREDOC
{
"Version": 1,
"AccessKeyId": "$accessKey",
"SecretAccessKey": "$secretKey"
}
HEREDOC
确保 bash 脚本位于$PATH
上并chmod +x
它,以便可以执行它。
现在我们可以测试它的工作原理
aws sts get-caller-identity --profile simonw
如果您实现了 bash 脚本来读取 MAC 钥匙串,系统可能会提示您输入密码以解锁钥匙串。
我从这个博客中得到了这个想法。另外,这是官方的AWS文档。