希曼日记

Vault 线上部署与硬化

本页目录 3
  1. 关键设计
  2. 硬化(2026-08-17 审查后当日落地,均行为验证)
  3. 踩坑速记

位置:腾讯云 VPS,与 Pangolin 三件套同机(实测 4C/3.7G——性能审查纠正了 1C2G 的假设)。入口 https://vault.<域名>,traefik 终结 TLS(泛证书),容器不发布任何主机端口。部署资产在 docker-deploy 仓 vault/ 目录。

关键设计

  • 认证选 AppRole 而非 kubernetes auth,是反向可达性决定的:kubernetes auth 需要 Vault 回连集群 apiserver,内网集群公网够不着;AppRole 纯出站,方向与 newt 隧道一致
  • raft 单节点 + KV v2;策略 eso-read 只读(secret/data/* 与 secret/metadata/*——KV v2 写成 secret/* 会 403)
  • 测试级取舍:单 unseal key 与 root token 同机存放(0600,不入库);VPS 或容器重启后回到 sealed,需手动 unseal

硬化(2026-08-17 审查后当日落地,均行为验证)

项验证
专网 vault_backend 10.66.0.0/24,退出 pangolin_frontend(可达邻居 15 → 1)frontend 网络容器访问 vault:8200 结果 BLOCKED
审计 vault audit enable fileaudit.log 落盘,开启状态持久于 storage,重启后自动恢复
listener 加 x_forwarded_for_authorized_addrs审计里 remote_address 为真实公网 IP,而非 traefik 内网 IP
容器级禁 swap(memswap_limit = memory limit)配合 disable_mlock=true,防明文密钥页落入未加密 swap
raft snapshot明文迁移前后各一份,异地存放

踩坑速记

  • vault 官方镜像 entrypoint 只 chown 自带的 /vault/file,自定义 raft data 目录要在宿主机侧 chown 100:1000
  • vault status 在 sealed 时退出码为 2,set -o pipefail 下接管道会把 || 兜底值拼进捕获结果
  • jq 的 // 把 false 当「空」,判断 sealed 布尔值要 tostring
  • docker exec 要吃 heredoc(如 policy write -)必须带 -i
  • 选专网子网前先查全机:172.16–31 的 /16 可能已被各 compose 网络占满,还要避开云厂商 VPC 网段

相关:L3 密钥管理 · ESO 接线 · Pangolin内网穿透实战