AWS Vault的详细指南

833 阅读2分钟

AWS Vault是一个在开发环境中安全地存储和访问AWS凭证的工具。

AWS Vault在你的操作系统的安全密钥库中存储IAM凭证,然后从这些凭证中生成临时凭证,暴露给你的外壳和应用程序。它被设计成对AWS CLI工具的补充,并且知道你~/.aws/config

请查看公告博文以了解更多细节。

安装

你可以安装AWS Vault:

文档

配置、用法、技巧和窍门可在USAGE.md文件中找到。

金库后端

支持的金库后端是:

使用--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通过以下两种方式之一将临时凭证暴露给子进程

  1. 环境变量被写到子进程中。注意在下面的例子中,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
    
  2. 启动本地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

参考资料和启发