生产模式下Vault启动后处于Sealed状态无法解封求助
Vault服务已初始化但无法解封排查方案
部署配置参考
本次生产部署使用的Vault配置如下:
ui = true #mlock = true #disable_mlock = true storage "file" { path = "/opt/vault/data" } # HTTPS listener listener "tcp" { address = "0.0.0.0:8200" tls_disable = 1 tls_cert_file = "/opt/vault/tls/tls.crt" tls_key_file = "/opt/vault/tls/tls.key" }
启动vault.systemd服务后执行vault status返回如下状态:
vault status Key Value --- ----- Seal Type shamir Initialized true Sealed true Total Shares 3 Threshold 2 Unseal Progress 0/2 Unseal Nonce n/a Version 1.11.0 Build Date 2022-06-17T15:48:44Z Storage Type file HA Enabled false
排查步骤
按优先级从高到低逐一排查:
- 存储目录权限异常
file存储依赖本地目录读写权限,Vault服务默认以vault用户运行,如果/opt/vault/data目录属主、权限配置错误,服务无法读取初始化生成的加密元数据,就会出现Unseal Nonce为n/a、输入密钥也无法推进解封进度的问题。
执行以下命令检查权限:
正常返回的属主、属组应为vault,目录权限不低于700。如果权限不符,执行修正命令后重启服务:ls -ld /opt/vault/datachown -R vault:vault /opt/vault/data chmod 700 /opt/vault/data systemctl restart vault - 解封密钥与存储数据不匹配
如果/opt/vault/data目录是从其他实例拷贝的旧数据、或者之前初始化时生成的密钥碎片丢失/拿错,Shamir密封机制没有任何后门可以绕过,凑不够对应存储的2片正确密钥碎片就永远无法解封,数据无法恢复。
确认你持有的3片解封密钥是当前/opt/vault/data目录第一次初始化时生成的,没有混用其他环境的密钥。 - 配置加载路径错误
检查systemd服务配置里的启动参数,确认ExecStart字段指定的-config路径就是你编辑的这份配置文件,没有指向其他测试环境的配置,避免服务加载了错误的存储路径,读到其他未知实例的初始化数据。 - mlock权限问题
配置中mlock相关参数被全部注释,默认生产环境Vault会尝试锁定内存防止敏感数据被换出到swap,如果二进制文件没有对应权限,会导致解封流程异常。可以临时在配置中加一行disable_mlock = true重启服务测试,如果能正常解封,再给Vault二进制授予内存锁定权限后关闭该配置:
注意把路径替换成你服务器上实际的vault二进制文件路径。setcap cap_ipc_lock=+ep /usr/bin/vault
配置修正提示
当前listener配置存在逻辑矛盾:tls_disable = 1表示关闭TLS加密,下方配置的证书、私钥路径不会生效,流量会明文传输。生产环境需要启用HTTPS的话,把tls_disable = 1改为tls_disable = 0即可。
正确解封操作
排查完上述问题后,按以下步骤执行解封:
- 先配置本地访问环境变量,因为当前关闭了TLS,地址要写http协议:
export VAULT_ADDR='http://127.0.0.1:8200' - 第一次执行解封命令,输入第一片密钥:
输入完成后返回的Unseal Progress应变为vault operator unseal1/2 - 第二次执行解封命令,输入第二片不同的密钥:
达到阈值2后服务会自动完成解封,此时再执行vault operator unsealvault status就能看到Sealed变为false,之后用初始化生成的root token登录即可正常使用。
内容的提问来源于stack exchange,提问作者timjar3
相关产品推荐
相关产品推荐

