AWS Vault是一个在开发环境中安全地存储和访问AWS凭证的工具。
AWS Vault在你的操作系统的安全密钥库中存储IAM凭证,然后从这些凭证中生成临时凭证,暴露给你的外壳和应用程序。它被设计成对AWS CLI工具的补充,并且知道你在~/.aws/config 。
请查看公告博文以了解更多细节。
安装
你可以安装AWS Vault:
- 通过下载最新版本
- 在使用Homebrew Cask的macOS上。
brew install --cask aws-vault - 在MacOS上使用MacPorts。
port install aws-vault - 在Windows上用Chocolatey安装。
choco install aws-vault - 在Windows上使用Scoop。
scoop install aws-vault - 在Linux上使用Homebrew:在Linux上使用Homebrew。
brew install aws-vault - 在Arch Linux上。
pacman -S aws-vault - 在Gentoo Linux上:
emerge --ask app-admin/aws-vault(先启用Guru) - 在FreeBSD上。
pkg install aws-vault - 在OpenSUSE上:启用devel:languages:go repo然后
zypper install aws-vault - 用Nix。
nix-env -i aws-vault - 用asdf-vm。
asdf plugin-add aws-vault https://github.com/karancode/asdf-aws-vault.git && asdf install aws-vault <version>
文档
配置、用法、技巧和窍门可在USAGE.md文件中找到。
金库后端
支持的金库后端是:
- macOS Keychain
- Windows凭证管理器
- Secret Service(Gnome Keyring,KWallet)
- 广联达钱包
- 通行证
- 加密的文件
使用--backend 标志或AWS_VAULT_BACKEND 环境变量来指定。
快速启动
# Store AWS credentials for the "jonsmith" profile
$ aws-vault add jonsmith
Enter Access Key Id: ABDCDEFDASDASF
Enter Secret Key: %%%
# Execute a command (using temporary credentials)
$ aws-vault exec jonsmith -- aws s3 ls
bucket_1
bucket_2
# open a browser window and login to the AWS Console
$ aws-vault login jonsmith
# List credentials
$ aws-vault list
Profile Credentials Sessions
======= =========== ========
jonsmith jonsmith -
它是如何工作的
aws-vault 使用亚马逊的STS服务,通过 或 API调用生成GetSessionToken AssumeRole 临时凭证。这些证书会在很短的时间内过期,所以泄露证书的风险会降低。
然后AWS Vault通过以下两种方式之一将临时凭证暴露给子进程
-
环境变量被写到子进程中。注意在下面的例子中,AWS的证书是如何被写出来的
$ aws-vault exec jonsmith -- env | grep AWS AWS_VAULT=jonsmith AWS_DEFAULT_REGION=us-east-1 AWS_REGION=us-east-1 AWS_ACCESS_KEY_ID=%%% AWS_SECRET_ACCESS_KEY=%%% AWS_SESSION_TOKEN=%%% AWS_SECURITY_TOKEN=%%% AWS_SESSION_EXPIRATION=2020-04-16T11:16:27Z -
启动本地EC2实例元数据服务器。这种方法的好处是,任何使用亚马逊SDK的东西都会根据需要自动刷新凭证,所以会话时间可以尽可能短。缺点是每个主机只能运行一个,而且因为它绑定了
169.254.169.254:80,所以需要你的sudo密码。
默认情况下是使用环境变量,但你可以通过exec 命令中的--server 标志来选择进入本地实例元数据服务器。
角色和MFA
最佳做法是创建角色来委托权限。为了安全起见,你还应该要求用户提供一个由多因素认证(MFA)设备生成的一次性密钥。
首先,你需要在IAM中创建用户和角色,以及设置一个MFA设备。然后,你可以设置IAM角色来执行MFA。
下面是一个使用角色和MFA的配置实例:
[default]
region = us-east-1
[profile jonsmith]
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile foo-readonly]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/ReadOnly
[profile foo-admin]
source_profile = jonsmith
role_arn = arn:aws:iam::22222222222:role/Administrator
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role1]
source_profile = jonsmith
role_arn = arn:aws:iam::333333333333:role/Role1
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
[profile bar-role2]
source_profile = bar-role1
role_arn = arn:aws:iam::333333333333:role/Role2
mfa_serial = arn:aws:iam::111111111111:mfa/jonsmith
以下是你可以从aws-vault得到的信息
| 命令 | 凭证 | 缓存 | MFA |
|---|---|---|---|
aws-vault exec jonsmith --no-session | 长期的凭证 | 没有 | 没有 |
aws-vault exec jonsmith | 会话令牌 | 会话令牌 | 有 |
aws-vault exec foo-readonly | 角色 | 没有 | 没有 |
aws-vault exec foo-admin | 会话令牌 + 角色 | 会话令牌 | 有 |
aws-vault exec foo-admin --duration=2h | 角色 | 角色 | 是的 |
aws-vault exec bar-role2 | 会话令牌 + 角色 + 角色 | 会话令牌 | 是 |
aws-vault exec bar-role2 --no-session | 角色 + 角色 | 角色 | 是的 |
开发
macOS的发布版本是经过代码签名的,以避免在钥匙串中出现额外的提示。你可以通过以下方式验证这一点。
$ codesign --verify --verbose $(which aws-vault)
如果你正在开发或自己编译aws-vault二进制文件,你可以通过访问钥匙串访问>证书助手>创建证书->证书类型来生成一个自签名证书。代码签名。然后你可以用以下方式签署你的二进制文件。
$ go build .
$ codesign --sign <Name of certificate created above> ./aws-vault