implementing-secrets-management-with-vaultlisted
Install: claude install-skill killvxk/cybersecurity-skills-zh
# 使用 Vault 实施密钥管理
## 适用场景
- 应用程序将数据库密码、API 密钥或证书存储在环境变量或配置文件中时
- 从静态长期凭据迁移到动态短期密钥时
- Kubernetes 工作负载需要安全访问数据库凭据或云提供商 API 时
- 合规要求强制进行集中凭据管理并具备审计日志时
- CI/CD 流水线中包含代表供应链风险(Supply Chain Attack)的硬编码密钥时
**不适用于**:纯 AWS 环境(AWS Secrets Manager 已足够且无多云需求)、应用层加密逻辑(尽管 Vault Transit 可辅助实现),或身份联合(Identity Federation)场景(参见 managing-cloud-identity-with-okta)。
## 前置条件
- 以高可用(HA)模式部署的 HashiCorp Vault 服务器(Consul 或 Raft 存储后端)
- 用于 Vault 监听端点的 TLS 证书
- Vault Enterprise 许可证(用于命名空间、Sentinel 策略和复制,可选)
- ���集成 Vault Agent Injector 或 CSI 提供程序的 Kubernetes 集群(用于工作负载集成)
## 工作流程
### 步骤 1:以高可用模式部署 Vault
使用集成存储(Raft)部署 Vault,无需外部依赖即可实现 HA。配置 TLS、审计日志以及基于云 KMS 的自动解封(Auto-Unseal)。
```hcl
# vault-config.hcl
storage "raft" {
path = "/opt/vault/data"
node_id = "vault-node-1"
retry_join {
leader_api_addr = "https://vault-node-2.internal:8200"
}
retry_join {
leader_api_addr = "https://vault-node-3.internal:8200"
}
}
listener "tcp" {
address = "0.0.0.0:8200"
tls_cert_file = "/opt/vault/tls/vault.crt"
tls_key_file = "/opt/vault/tls/vault.key"
}
seal "awskms" {
region = "us-east-1"
kms_key_id = "alias/vault-unseal-key"
}
api_addr = "https://vault-node-1.internal:8200"
cluster_addr = "https://vault-node-1.internal:8201"
telemetry {
prometheus_retention_time = "30s"
disable_hostname = true
}
```
```bash
# 初始化 Vault
vault operator init -key-shares=5 -key-threshold=3
# 启用审计日志
vault audit enable file file_path=/var/log/vault/audit.log
# 启用 syslo