Secure your Secrets in DevOps with Hashicorp Vault
字数 1363 2025-08-18 11:37:23
HashiCorp Vault 在 DevOps 中的秘密管理指南
1. 什么是 HashiCorp Vault
HashiCorp Vault 是一款用于管理秘密(secrets)的工具,主要功能包括:
- 加密、存储和访问控制
- 管理各种形式的敏感信息:令牌、密码、证书、API密钥等
- 提供密钥租用管理、密钥失效、滚动租期和审计功能
- 通过统一接口访问加密的 Key/Value 存储
- 提供加解密服务
- 生成 AWS 平台、SQL/NoSQL 数据库的秘密信息
- 签发 X.509 证书
2. Vault 的核心功能
2.1 解决 DevOps 中的常见安全问题
- 避免将敏感信息(如数据库连接信息)直接存储在代码或配置文件中
- 提供集中化的秘密管理,替代本地存储
- 实现秘密的统一查看、管控和更新
2.2 加密存储机制
- Vault 的后端存储只保存加密后的数据
- 不存储解密所需的密钥
- 即使存储被攻击者获取也无法解密
3. Vault 的基本使用流程
3.1 安装与初始化
- 下载并安装 Vault
- 创建本地 Vault server 实例
- 初始化 Vault server:
vault init- 默认生成 5 个开启密钥(unseal key)
- 任意 3 个组合可用于开启 Vault server
- 可配置密钥数量和开启阈值
- 初始化过程中还会生成 Initial Root Token(初始根令牌)
3.2 登录与访问
- 使用 Root Token 登录:
vault login [root_token] - Root 用户拥有最高权限,可创建新用户令牌
3.3 秘密引擎(Secrets Engine)
- 查看可用引擎:
vault list - KV(Key/Value)引擎:
- 位于
secret/路径下 - 用于存储 Key/Value 对
- 位于
3.4 读写操作
-
创建路径并写入数据:
vault kv put secret/properties usr=username pswd="password"put命令会覆盖原有内容- 使用
patch命令可添加新内容而不覆盖
-
读取数据:
vault kv get secret/properties
3.5 HTTP API 接口
- 提供 HTTP 接口实现所有操作
- 官方支持 Go、Ruby 开发库
- 第三方库支持 Java(vault-java-driver)等多种语言
- 开发库参考:https://www.vaultproject.io/api/libraries.html
3.6 关闭与封锁
-
封锁(seal)Vault server:
vault seal- 不需要管理员权限
- 封锁后需重新开启才能使用
-
开启(unseal)Vault server:
vault unseal [key]- 根据初始化配置,可能需要多个密钥
4. 高级功能
-
多用户访问控制:
- 可细分到路径级别的权限控制
- 通过令牌管理用户访问
-
密钥管理:
- 密钥的发放和回收
- 租期管理
-
多种秘密格式支持:
- 不仅限于 Key/Value
- 支持证书、动态秘密等
5. 最佳实践建议
- 根据团队规模和安全需求合理设置密钥数量和开启阈值
- Root Token 应妥善保管,避免日常使用
- 为不同应用和服务创建专用路径和访问权限
- 定期轮换密钥和令牌
- 启用审计日志记录所有操作
6. 适用场景
- 代码库中的敏感信息管理
- 多环境配置管理(开发/测试/生产)
- 微服务架构中的秘密分发
- 自动化流程中的凭证管理
- 合规性要求高的数据存储
通过 HashiCorp Vault,DevOps 工程师可以实现集中化、安全的秘密管理,解决敏感信息分散存储带来的安全风险和管理难题。