七、部署vault
配置
vault使用HCL文件配置:
storage "consul" {
address = "127.0.0.1:8500"
path = "vault/"
}
listener "tcp" {
address = "127.0.0.1:8200"
tls_disable = 1
}
配置文件中,有两个主要的配置项:
* storage 物理的后端,提供给vault使用,dev server模式下vault会使用内存。
* listener listener决定vault如何监听api请求。
启动
可以轻松的以配置文件启动vault,使用-config
标记:
$ vault server -config=config.hcl
在linux下面可能会出现由mlock导致的错误,mlock可以防止内存被交换到磁盘。在生产中不建议禁用mlock,且mlock需要root权限。
可以使用sudo setcap cap_ipc_lock=+ep $(readlink -f $(which vault))
来使得mlock不需要root权限运行,对于不同的插件都需要分别执行一次此命令。
如果你使用了具有现代版本的systemd的Linux发行版,可以在[Service]配置项下添加如下部分:
LimitMEMLOCK=infinity
初始化vault
初始化时配置vault,仅在服务器是一个没有使用过vault的系统时启用。初始化时,加密秘钥生成,解封秘钥被创建,默认root token也被设置。使用vault operator init
来初始化vault,尽管这是个未授权的请求,它仅在vault没有任何数据时使用,当在HA模式下运行时,初始化在每个集群中使用,而不是每个服务器。
初始化输出两个非常重要的信息:解封秘钥(unsead key)和默认root tokens。
密封/解封
每个初始化后的vault以密封状态启动,这意味着vault可以访问物理存储,但没办法读取其中的任何一个,因为它不知道如何对其进行解密。为了解密vault,你需要一定数量的解密秘钥(unseal key)。vault不会存储任何的解密秘钥分片,它使用一种算法(Shamir’s Secret Sharing)将主密钥拆分成分片。
开始解封vault:
$ vault operator unseal
Unseal Key (will be hidden):
vault不会知道这个秘钥是否正确,直到它得到了一定数量的秘钥。你可以在另一台电脑上使用上述命令,只要他们指向同一台vault服务器。
当你最终解析后,你会得到如下的信息:
Key Value
--- -----
Sealed false
Total Shares 5
Version (version unknown)
Cluster Name vault-cluster-8a8b2c36
Cluster ID 34e94a2e-2d8f-c7cc-271d-96fd438ccc6d
HA Enabled true
HA Mode standby
HA Cluster n/a
这里面的Sealed对应的部分为false时,你的vault就能解封了。如果使用root登录,你默认就是解封的,你可以重新密封vault,通过vault operator seal
,这个只需要一次操作即可,当vault再次被密封,他将清除所有的状态,安全而且锁定的。