Vault Enterprise Operations and Recovery
验证:未记录
- 适用版本
- 未记录
- 验证范围
- 尚未登记验证记录。
本文缩写(英文全称与中文含义)
| 缩写 | 英文全称/名称 | 中文含义 |
|---|---|---|
| API | Application Programming Interface | 应用程序编程接口 |
| ARN | Amazon Resource Name | AWS 资源名称,用于唯一标识资源 |
| AWS | Amazon Web Services | 亚马逊云服务 |
| CLI | Command-Line Interface | 命令行接口 |
| DB | Database | 数据库 |
| DBA | Database Administrator | 数据库管理员 |
| DR | Disaster Recovery | 灾难恢复 |
| HMAC | Hash-based Message Authentication Code | 基于散列的消息认证码 |
| IAM | Identity and Access Management | 身份与访问管理 |
| IdP | Identity Provider | 身份提供方 |
| JWT | JSON Web Token | 一种携带声明的令牌格式 |
| KMS | Key Management Service | 密钥管理服务 |
| KV | Key-Value | 键值存储模型 |
| MFA | Multi-Factor Authentication | 多因素认证 |
| OIDC | OpenID Connect | 基于 OAuth 2.0 的身份认证协议 |
| RPO | Recovery Point Objective | 恢复点目标,可接受的数据丢失时间范围 |
| RTO | Recovery Time Objective | 恢复时间目标,可接受的恢复耗时 |
| TLS | Transport Layer Security | 传输层安全协议 |
| UI | User Interface | 用户界面 |
1. 人员与权限#
| 身份 | 权限边界 |
|---|---|
| 应用 | 只读取自身 KV 路径、签发自身数据库 role 的凭据 |
| 值班运维 | 健康、Raft 状态、受控快照操作;不默认读取业务 secret |
| 配置发布身份 | 审批后修改限定 auth/policy/engine 配置,禁止任意自我提权 |
| 密钥保管人 | 分别持有 recovery share,不持有共享 root token |
| 审计人员 | 读取独立审计平台,不修改 Vault policy |
Policy 是路径级控制;租户强隔离还需考虑独立集群或 Enterprise namespaces。能修改 policy/auth 的身份可以间接扩大权限,应视为高权限变更入口。
2. OIDC + MFA#
使用企业 IdP,MFA 在 IdP 登录流程强制执行。先建立 OIDC application,配置 Vault UI 回调和 CLI 回调:
https://vault.internal:8200/ui/vault/auth/oidc/oidc/callback
http://localhost:8250/oidc/callback本例 auth mount 为 oidc,回调中的路径必须与实际 mount 一致。不要配置宽泛通配回调。
保存 vault-ops.hcl,只授予运维读取与快照导出:
path "sys/health" {
capabilities = ["read"]
}
path "sys/leader" {
capabilities = ["read"]
}
path "sys/storage/raft/configuration" {
capabilities = ["read"]
}
path "sys/storage/raft/autopilot/state" {
capabilities = ["read"]
}
path "sys/storage/raft/snapshot" {
capabilities = ["read"]
}管理员配置 OIDC,client secret 通过权限 0600 的文件交付:
vault policy write vault-ops vault-ops.hcl
vault auth enable oidc
vault write auth/oidc/config oidc_discovery_url=https://id.example.com/realms/platform oidc_client_id=vault oidc_client_secret=@/secure/bootstrap/oidc-client-secret.txt default_role=platform-ops保存 platform-ops.json;IdP 必须在 token/userinfo 中按配置提供 groups claim:
{
"role_type": "oidc",
"user_claim": "sub",
"groups_claim": "groups",
"bound_audiences": ["vault"],
"bound_claims": {"groups": ["vault-platform-ops"]},
"allowed_redirect_uris": [
"https://vault.internal:8200/ui/vault/auth/oidc/oidc/callback",
"http://localhost:8250/oidc/callback"
],
"oidc_scopes": ["profile", "groups"],
"token_policies": ["vault-ops"],
"token_ttl": "15m",
"token_max_ttl": "1h"
}vault write auth/oidc/role/platform-ops @platform-ops.json在另一终端清除 bootstrap token 后登录,验证实际身份:
unset VAULT_TOKEN
vault login -method=oidc role=platform-ops
vault operator raft list-peers
vault token capabilities kv/data/prod/orders/config预期运维可查看集群、不能读取订单 secret。不具备指定 IdP group 的人员不能取得此 role。人员离职还需处理已签发的 Vault token,不只删除 IdP 用户。OIDC/JWT
完成应用与管理身份交接后,在仍持有 bootstrap root 的专用会话执行 vault token revoke -self。后续恢复或高权限配置使用审批后的独立身份;无常驻管理员时,通过 recovery quorum 的 break-glass 流程临时生成 root、完成变更后撤销。
3. 审计与监控#
启用 file audit,将每个节点的日志送入独立日志账号/平台。审计字段默认存在 HMAC 等保护,但日志仍可能含敏感元数据,不开放给所有开发者。
至少一个已启用 audit device 必须能成功写入,否则 Vault 可拒绝请求。企业可配置独立的第二审计通道,并分别监控磁盘、日志采集与远端延迟;不要用关闭审计解决磁盘告警。Audit devices
| 监控项 | 验收或告警 |
|---|---|
| Seal / initialized / leader | 意外 sealed、未初始化节点进入服务、leader 反复变动 |
| Raft | 多数派、节点健康、提交延迟、磁盘空间与延迟 |
| API | 登录/读取失败率、请求延迟、资源饱和 |
| Tokens / leases | 数量异常增长、续期失败、数据库撤销失败 |
| TLS / KMS | 证书到期、KMS 授权失败、key 禁用/删除事件 |
| Audit | 写入失败、磁盘不足、外送延迟、异常高权限操作 |
| Backup | 最近成功快照年龄、跨区复制和恢复演练结果 |
Prometheus 通过受限身份访问 /v1/sys/metrics?format=prometheus;不为方便采集直接公开无认证指标。监控应在 Vault 不可用时仍能告警。
4. Raft 快照备份#
使用有 sys/storage/raft/snapshot 读取权限的独立备份身份:
umask 077
VAULT_BACKUP_DIR=$(mktemp -d)
VAULT_BACKUP_FILE="$VAULT_BACKUP_DIR/vault-$(date -u +%Y%m%dT%H%M%SZ).snap"
vault operator raft snapshot save "$VAULT_BACKUP_FILE"
vault operator raft snapshot inspect "$VAULT_BACKUP_FILE"将快照加密传至独立备份账号,并保存校验和、Vault 版本、seal 类型、KMS key ARN、时间和演练记录。运行配置、TLS 材料、插件版本、IAM/KMS 权限不应只依赖 Raft 快照保存。
示例目标:每 15 分钟备份,复制至隔离存储;实际 RPO 取决于最近可用且成功验证的副本,RTO 包含重建、解封、外部系统对账和应用恢复。snapshot inspect 通过不等于完成恢复验证。
5. 隔离恢复 Hands-on#
以下只在专用恢复环境执行,禁止对在线生产集群覆盖快照。
- 选定已校验快照,准备兼容 Vault 版本的空集群,配置原快照所需的 seal/KMS 访问。
- 隔离应用入口与数据库/云 API 写路径,避免旧 lease 在恢复时误操作外部系统;审计通道保持可写。
- 按空集群流程初始化并取得临时管理访问。确认
VAULT_ADDR指向恢复集群。 - 导入快照。初始化产生了不同 seal 元数据时,只有确认 seal 材料兼容后才使用
-force。
export VAULT_ADDR=https://vault-restore.internal:8200
export VAULT_CACERT=/secure/restore/vault-ca.crt
vault status
# 仅针对已隔离、已批准覆盖的恢复环境。
vault operator raft snapshot restore -force /secure/restore/approved.snap-force 跳过部分一致性检查,不绕过底层加密,也不能用任意新 KMS key 解密旧快照。恢复后按实际状态重启/解封、检查 peers 并重建其余节点;恢复前的临时 token 可能失效,需使用恢复点有效的管理身份或 quorum 恢复流程。
- 核对 mounts、policies、auth 和合成 canary;旧快照可能恢复当时的 token/lease 状态,评估已撤销凭据重新出现的风险。
- 数据库管理密码可能已在快照后轮换,快照中的旧密码与真实数据库不一致。先由 DBA/云平台对账并修复连接配置,再逐项解除外部访问隔离。
- 使用测试数据库验证签发、续期、撤销;确认新审计、备份有效后,才按事故流程切换应用入口。
跨 Region 恢复还必须解决 seal 依赖:原区域 KMS 不可用时,复制一个快照到另一 Region 不足以解封。seal 迁移、KMS 多 Region 设计或 Enterprise DR 的具体支持需提前验证,不在事故中临时换 key。Raft snapshot
6. 升级与故障演练#
| 场景 | 实验与验收 |
|---|---|
| 单节点故障 | 一次停止一台,确认客户端重试、leader 选举和集群恢复 |
| KMS 授权丢失 | 隔离环境撤销测试授权,验证重启无法解封与告警链路 |
| Audit 磁盘问题 | 验证写入失败、备用通道和容量告警,不影响真实集群 |
| DB lease 撤销失败 | 临时阻断测试 DB,检查重试、残留角色和恢复后回收 |
| Agent token 到期 | 观察重新认证、模板刷新和连接池更换 |
| 快照恢复 | 核对 canary、权限、外部凭据与实际 RTO/RPO |
升级先查目标版本发行说明、兼容性与必须经过的中间版本。保存并验证升级前快照,在预生产演练;按官方版本路径滚动处理 standby 与 active,保持多数派。不要假定新版本写过的数据能直接降级读取。
7. 发布与故障处理边界#
- Terraform 管理 Vault 配置时,检查 provider 行为;普通敏感字段可能进入 state,
sensitive不等于不落盘。 - 不把 Vault 所依赖的 KMS、TLS 私钥恢复材料、备份访问凭据仅存放在这个 Vault 内,避免启动依赖闭环。
- KV 更新不会自动轮换第三方真实密码;动态 engine 管理的外部凭据需核对撤销是否执行成功。
- 正式拆除前先迁移应用、撤销/核对外部租约、保存所需备份,再清理集群;不要先删除 KMS key。
与 AWS 企业灾备流程 配套:Vault 自身、数据库和应用需要一致的恢复顺序,不能只恢复 secret 服务就宣布业务恢复。