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安装与初始化核心流程 下载安装 编辑配置文件 启动 Vault 初始化 (生成Key) 分发Unseal Key 执行Unseal (3次) 注意:生产环境中Unseal Key必须安全分开保管,Root 需立即保护

以上就是Vault安装、配置、初始化、Unseal的全流程。你可以在自己的测试环境里动手走一遍,感受一下。很多坑都是在实战中踩出来的,比如我一开始忘了配api_addr,结果客户端报错“connection refused”,折腾了半小时才发现是地址写错了。嗯,多试试就好了。