Vault的主要功能:管理机密信息,动态获取,多云多工具多平台支持。机密信息即例如口令,密钥,api appkey,token,一切跟credentials挂钩的,又或者你心中的小秘密。
Vault下载,open source版是免费的:https://www.vaultproject.io/downloads
下载后会得到一个zip,解压之后的Vault是一个单独的executable,运行之后会启动一个server,可以使用CLI和Web来互动。CLI也是由同一个executable提供的。server的ip地址和端口的值依据环境变量VAULT_ADDR,例如在nix上可用export VAULT_ADDR=http://127.0.0.1:8200
,或者也可以用-address="http:127.0.0.1:8200"
在命令中指明。
Vault启动的方式有两种:prod(默认)和dev。
vault server -config=[configfilepath]# production
vault server -dev #dev
默认启动时会被要求指明一个HCL(HashiCorp Configuration Langu)格式的config文件来提供server的启动选项。简单的例子,(详情请看 https://www.vaultproject.io/docs/configuration)。创建config.hcl:
storage "file" {
path = "path_to_your_desired_storage_location“
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
vault server -config=config.hc # may need sudo to use mlock
Good to know:
一般来说dev版的任何东西都是不建议用在真正的生产环境中,更不用说关于信息安全的产品了。Vault默认的启动方式即为推荐的最安全的启动方式,但是dev版的Vault会相对更容易来使用和测试。Vault可以按照它字面意思来想象成一个宝箱,一般来说装了好东西的宝箱都会有锁,而且东西越好这个锁就越难破解。没有被打开的Vault被认为是‘sealed',准确来说是用来decrypt数据的密钥处于encrypted状态。想要unseal一个Vault则需要一个master key来decrypt这些加密数据的密钥。Vault使用了Shamir‘s Secret Sharing算法将完整的master key分成了多份,每一份被称为一个shard。只有集齐了一定数量的shard后才能复原master key然后unseal the Vault。比如说,master key可以分成5个share,集齐任意3个便可恢复master key,这里的3被称为‘门槛(threshold,也有叫阈的)’。Vault默认启动时是sealed,并需要运行vault operator init -key-shares=3 -key-threshold=5
来初始化并显示所有的share,然后需要运行多次vault operator unseal
并输入shares来开启Vault。相比于prod版,dev版的Vault则把开锁的过程简化了,启动时Vault即为’unsealed',并且只有一个完整的master key(unseal key)。这里会用dev来启动Vault来方便讲解。
Vault启动之后,可以打开浏览器去VAULT_ADDR指定地址访问web界面,但下面将以CLI为例讲解。一般来说先要确定Vault server的状态,看看是否正在运行,以及是否处于unsealed状态,可以使用vault status
,检查’Sealed'为false。并且记录下来‘Unseal Key’和‘Root Token',他们看起来长这样:
Unseal Key: Mq+5+ezxO4vAAiWyncF1pW7O44UmNKg9PMEbmxfheOQ=
Root Token: s.XvoVCPsh6H05TYWumwLPZMMI
然后可以进行一些简单的操作,涉及到的term之后会具体讲解:
显示已启动的secret engine:vault secrets list
显示已有的policy:vault policy list
显示正在使用的token:vault print token
储存一个口令:vault kv put secret/me/abadpassword password=hashicorpvault
读取刚才储存的口令:vault kv get secrets/me/abadpassword