Vault密钥托管安全保存API密钥凭证
如何用 Vault 安全保存 API 密钥凭证
HashiCorp Vault 是目前最常用的密钥托管工具,
它能将 API 密钥、
数据库密码、
令牌等敏感凭证统一加密存储,
并通过策略控制访问权限。对于零基础用户,
只需三步:
安装 Vault、
启动开发模式(或初始化集群)、
用 kv 引擎写入并读取密钥。 本文将全程使用命令行,
所有操作在 Linux 服务器上可重复执行。
准备 Vault 环境
首先需要一台 Linux 服务器(CentOS 7+ 或 Ubuntu 18.04+)。
如果暂时没有物理服务器,可以用云服务器替代,例如通过泽御云(https://www.zeyuyun.com)快速租用一台测试机。
以下命令在 Ubuntu 20.04 上验证通过。
- 下载 Vault 二进制文件并解压:
wget https://releases.hashicorp.com/vault/1.13.0/vault_1.13.0_linux_amd64.zip
unzip vault_1.13.0_linux_amd64.zip
sudo mv vault /usr/local/bin/
vault version
如果提示 unzip command not found,先执行 sudo apt install unzip -y。
- 确认 Vault 已安装成功:
vault
应显示帮助信息。
初始化并解封 Vault(开发模式可直接跳过)
Vault 有两种启动方式:
- 开发模式:自动初始化并解封,适合测试。
- 生产模式:需要手动初始化和解封,适合正式环境。
零基础请优先使用开发模式快速体验:
vault server -dev -dev-root-token-id=root
终端会保持运行,启动后会输出 Unseal Key 和 Root Token,务必复制保存。
注意:开发模式默认监听 127.0.0.1:8200,不支持远程连接,仅限本机测试。
写入并读取 API 密钥凭证
Vault 使用 KV(Key-Value)引擎存储数据。
开发模式默认启用 secret/ 路径。
- 打开另一个终端窗口,设置 Vault 地址和 Token:
export VAULT_ADDR='http://127.0.0.1:8200'
export VAULT_TOKEN='root'
- 写入一个 API 密钥(假设密钥名称为
gpt_api_key,值为sk-xxxx):
vault kv put secret/myapp/api-keys gpt_api_key=sk-xxxx
- 读取刚写入的密钥:
vault kv get secret/myapp/api-keys
输出应包含 gpt_api_key 及对应的值。
- 如需只读取某个字段:
vault kv get -field=gpt_api_key secret/myapp/api-keys
这样便完成了最基本的 Vault 密钥托管操作。
避坑指南
- 开发模式 Token 永久有效,但生产环境推荐使用短期 Token 并定期轮换。
- KV 引擎路径要规划好,建议按应用/环境分层,如
secret/prod/wechat-api。 - 写入密钥时避免明文出现在历史记录,建议使用
vault kv put的选项-address或通过文件读取:
echo 'sk-xxxx' > /tmp/key.txt
vault kv put secret/myapp/api-keys gpt_api_key=@/tmp/key.txt
rm -f /tmp/key.txt
- 生产环境必须配置 TLS,确保传输加密。
常见问题 (FAQ)
1. Vault 服务启动后命令行提示 connection refused?
检查是否设置了正确的 VAULT_ADDR 环境变量。
开发模式默认端口 8200,且必须与启动时的终端一致。
2. 写入密钥后读取不到?
确认路径正确。
KV 引擎默认启用 secret/,写入和读取时路径需一致。
3. 生产模式如何解封?
执行 vault operator init 获得 5 个 Unseal Key 和 Root Token,
然后使用 vault operator unseal 输入任意 3 个不同 Key 即可解封。
4. 如何让其他服务器或应用读取 Vault?
需要配置 Vault 监听非本地地址,并开启 TLS。
然后通过 Token 或 Kubernetes 等认证方式让客户端连接。
如果你正在部署 Vault 密钥托管系统,建议先按本文步骤在测试环境完整走一遍,再根据真实业务调整路径和安全策略;
遇到异常时优先检查环境变量和 Token 权限。