二、密码引擎
在前面看到的所有密码的写入和读出,你可能发现他们都是以secret/
开头的,尝试一下不同的前缀:
vault write foo/bar a=b
会得到一个错误:no handler for route 'foo/bar'
。
因此,前缀代表的是vault所用的密码引擎,默认为secret/
。
启动密码引擎
使用命令vault secrets enable -path=kv kv
可以启动密码引擎kv/
。
也可以使用命令vault secrets list
查看系统中含有的其他引擎。
禁用密码引擎
命令vault secrets disable kv/
可以关闭。
做了以上这些后,到底什么是密码引擎呢?
vault在不同的文件系统上的表现都一致,read/write/delete/list操作都会被转递到这个密码引擎,而密码引擎则会决定如何回应这些操作。
三、动态密码生成
接下来开始体验vault的其他特性了:动态秘钥。和kv(键值对)方式需要你把数据放入不同,动态密码在访问时自动生成,它在你读取之前都不存在,所以也不会有被盗取的风险,因为vault有内置的过期管理办法,动态秘钥可以随时过期。
注意:在开始这一部分前,请先注册好AWS的账户,这里的所有特性都是免费的,但注意你可能产生的任何费用。
启用并配置AWS密码引擎
使用命令vault secrets enable -path=aws aws
可以启用AWS密码引擎。不同的引擎允许不同的行为。
在配置好密码引擎后,需要配置并启用使得它能够和AWS通信,这需要有权限的账户认证,你也可以用root账户秘钥。
$ vault write aws/config/root \
access_key=AKIAI4SGLQPBX6CSENIQ \
secret_key=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
Success! Data written to: aws/config/root
现在上面的信息都被存储在密码引擎中,这个引擎会在将来和AWS通信时使用这些信息。
创建一个角色
接下来我们配置一个角色,角色是友好的标识。vault知道怎么通过AWS的API创建一个IAM用户,不过他也不知道你想在这个用户里使用什么权限,组和权限。这是配置在 - roles的配置选项下的。
举个例子,这里是一个IAM策略,这个策略允许所有的对EC2的操作。当vault生成一个可访问的键时,会自动添加这些策略。生成的一个秘钥具有对EC2的完全访问权限,除了IAM和其他AWS的服务。如果你不熟悉AWS的IAM策略,那也可以,先使用这个先。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1426528957000",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"*"
]
}
]
}
按照线面所说,我们需要把这个策略文件写入到一个命名的role下,我们将它写入到aws/roles/:name
:
$ vault write aws/roles/my-role policy=-<<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1426528957000",
"Effect": "Allow",
"Action": [
"ec2:*"
],
"Resource": [
"*"
]
}
]
}
EOF
Success! Data written to: aws/roles/my-role
使用上面aws/roles/:name
就是告诉vault,当我请求my-role的验证时,创造并添加IAM的策略{ "Version": "2012..." }
。
生成秘钥和废弃
现在AWS密码引擎是启用的,并配置了角色,我们可以请求vault生成一个可访问的密钥对,通过读取aws/creds/:name
,:name
是一个存在的角色的名字。
$ vault read aws/creds/my-role
Key Value
--- -----
lease_id aws/creds/my-role/0bce0782-32aa-25ec-f61d-c026ff22106e
lease_duration 768h
lease_renewable true
access_key AKIAJELUDIANQGRXCTZQ
secret_key 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
security_token <nil>
现在这个access和secretkey可以用来在AWS部署所有的EC2操作,这些key是心生成的,每次运行这个命令都会重新生成key。注意一下lease_id
,可以用来刷新、废弃和检查。
现在可以使用:
$ vault lease revoke aws/creds/my-role/0bce0782-32aa-25ec-f61d-c026ff22106e