Vault安装与初始化
说到Vault的安装与初始化,很多朋友一上来就踩坑。我记得刚接触Vault时,按着官方文档克隆仓库、编译、折腾了一上午……后来才发现,直接下个二进制包就完事了。嗯,今天咱们就把这步走顺,从下载安装到Unseal,一条龙给你讲明白。
下载和安装
Vault官方提供了预编译的二进制包,支持Linux、macOS、Windows。我个人习惯用Linux服务器做管理节点,所以这里主要讲Linux下的安装。
方法一:直接下载二进制
# 以Linux amd64为例
wget https://releases.hashicorp.com/vault/1.15.6/vault_1.15.6_linux_amd64.zip
unzip vault_1.15.6_linux_amd64.zip
sudo mv vault /usr/local/bin/
vault --version
解压完就一个二进制文件,直接放到PATH里,简单粗暴。这种方法版本最新,也方便做自动化部署。
方法二:包管理器
如果你用的是Ubuntu或CentOS,可以用官方仓库。但注意,镜像更新可能比官方慢一两个版本。我更喜欢手动下载,心里有数。
小建议:生产环境不要直接apt install vault。你想想看,万一仓库里的版本有已知漏洞还没修呢?手动下载并校验SHA256,更可控。
配置文件详解
Vault的配置文件通常是HCL格式,也可以写JSON。核心是定义存储后端(storage)、监听器(listener)、以及各种功能开关。
下面是一个最小可用的配置示例:
storage "raft" {
path = "/opt/vault/data"
node_id = "vault-1"
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_disable = true
}
api_addr = "http://192.168.1.10:8200"
cluster_addr = "https://192.168.1.10:8201"
ui = true
这里我用了Raft作为存储后端(单节点模式),生产环境建议用Raft集群或者外部存储如Consul。监听器我暂时禁用了TLS,方便本地测试——但在生产环境必须启用HTTPS。
常见的配置项,我列个表:
| 配置项 | 说明 | 我的建议 |
|---|---|---|
| storage | 存储后端,如raft、consul、file | 单机测试用file,生产用raft或consul |
| listener | 监听地址、端口、TLS | 生产必须启用TLS,且地址用内网IP |
| api_addr | 外部访问Vault的地址 | 必须正确设置,否则客户端连不上 |
| ui | 是否启用Web UI | 开发调试可以开,生产建议关掉或限制 |
| telemetry | 监控指标输出 | 建议打开,方便做Prometheus集成 |
⚠️ 我曾经因为storage配置里的path写错了,导致Vault启动后数据落到了别的目录,后来集群节点挂了才发现数据没了。一定要确认路径存在且权限正确,尤其是生产环境的目录。
初始化流程
配置文件搞定后,启动Vault:
vault server -config /etc/vault/config.hcl
启动成功后,终端会显示Server started,但此时Vault是密封(sealed)状态,不能读写任何秘密。下一步就是初始化。
# 执行初始化
vault operator init
你会看到输出一堆Unseal Key和Root :
Unseal Key 1: 5Hh+...
Unseal Key 2: 0hR7...
Unseal Key 3: jtKZ...
Unseal Key 4: qU9y...
Unseal Key 5: +zIk...
Initial Root : hvs.A...
这里的关键是:这些密钥是唯一能解封Vault的凭证。一旦丢失,你的所有秘密就全废了。我见过有人把密钥截图存微信聊天记录里……后来手机丢了,整个团队加班一周重建。
通常我们会生成5个Unseal Key,设置阈值(Key Threshold)为3。意思是:至少需要3个不同的密钥才能解封。这种机制叫“Shamir密钥分享”,说白了就是把一份秘密拆成5份任意3份都能还原。
我建议初始化时使用 vault operator init -key-shares=5 -key-threshold=3 自定义份数和阈值。另外,不要在生产环境把Unseal Key交给同一个人保管,分别存到不同的安全地方,比如密码保险箱、物理保险柜、甚至分开记在脑子里。
Unseal流程
初始化后Vault仍处于密封状态,需要解封才能使用。单机环境,你需要执行至少3次unseal命令:
vault operator unseal
# 输入第一个Key
vault operator unseal
# 输入第二个Key
vault operator unseal
# 输入第三个Key
每输入一个正确的Key,Vault的Sealed状态会逐步降低(显示为1/3、2/3、3/3)。当达到阈值后,Vault就解封了。
解封后可以用Root 登录:
vault login hvs.A...
登录成功就可以正常操作了。注意Root 的权限极大,一般只在初始化或紧急恢复时使用。日常操作应该创建有权限限制的或使用其他认证方式(后续章节会讲)。
关于Unseal,有一个常见的陷阱:如果Vault因为重启、崩溃等原因重新密封,你必须再次用Unseal Key解封。自动Unseal的方案(如使用GCP KMS、Azure Key Vault等自动解封机制)可以避免人工介入,但那是另一个话题了。我这里只是让你先理解手工流程。
以上就是Vault安装、配置、初始化、Unseal的全流程。你可以在自己的测试环境里动手走一遍,感受一下。很多坑都是在实战中踩出来的,比如我一开始忘了配api_addr,结果客户端报错“connection refused”,折腾了半小时才发现是地址写错了。嗯,多试试就好了。