Vault transit engine auto unseal启动未传递VAULT_TOKEN问题咨询
问题根因定位
- 你在VAULT-2当前shell会话中执行的
export VAULT_TOKEN仅对当前会话生效,若Vault服务通过systemd、init脚本等系统服务方式启动,服务运行的隔离环境不会继承普通用户的shell环境变量,导致Vault启动时读取不到访问VAULT-1的token,触发missing client token报错 - 你当前的transit seal配置块未显式指定token或token读取路径,也没有在服务环境配置中注入对应变量,是问题的直接诱因
修复方案
方案1:在transit配置中显式指定token(推荐更安全的token文件方式)
- 将合法token写入仅Vault服务用户可读的文件,避免明文写在主配置中:
echo "s.XazV" > /etc/vault.d/.transit-token chown vault:vault /etc/vault.d/.transit-token chmod 600 /etc/vault.d/.transit-token
- 修改VAULT-2的
/etc/vault.d/vault.hcl中seal块配置,新增token_file参数:
seal "transit" { address = "http://192.168.100.100:8200" disable_renewal = "false" key_name = "autounseal" mount_path = "transit/" tls_skip_verify = "true" token_file = "/etc/vault.d/.transit-token" }
- 重启VAULT-2服务即可正常自动解封。
方案2:在系统服务配置中注入环境变量
如果希望通过环境变量传递token,修改VAULT-2的Vault服务systemd配置文件(通常路径为/etc/systemd/system/vault.service),在[Service]段新增如下配置:
Environment="VAULT_TOKEN=s.XazV"
修改完成后执行以下命令生效:
systemctl daemon-reload systemctl restart vault
额外校验项
修复后若仍有问题,可排查以下配置:
- 确认VAULT-1上已正确挂载transit引擎到
transit/路径,且已创建名称为autounseal的加密密钥 - 确认VAULT-1上给token
s.XazV绑定的策略包含如下权限:
path "transit/encrypt/autounseal" { capabilities = ["update"] } path "transit/decrypt/autounseal" { capabilities = ["update"] }
内容的提问来源于stack exchange,提问作者G_G
相关产品推荐
相关产品推荐

