云与基础设施安全
密钥管理
约 3 分钟阅读
最后更新: 2026-01-18
什么是密钥管理
密钥管理 (Secret Management) 是安全地存储、分发和轮换密码、API 密钥、数据库连接字符串、TLS 证书私钥和加密密钥等敏感信息的机制。
密钥泄露直接导致严重的安全事件。提交到 GitHub 公开仓库的 AWS 访问密钥会在几分钟内被机器人检测到,被用于加密货币挖矿等恶意活动。密钥管理是防止此类事件的安全基础要素。
密钥管理工具与选型标准
密钥管理应使用专用工具和服务。环境变量和源代码中的硬编码由于泄露风险高且无法审计,应予以避免。
- HashiCorp Vault:开源密钥管理工具。支持动态密钥(一次性凭证)生成、细粒度访问策略和多种认证后端。适用于多云和混合环境
- AWS Secrets Manager:与 AWS 深度集成的托管服务。支持 RDS、Redshift 和 DocumentDB 凭证的自动轮换。可与 Lambda 集成实现自定义轮换逻辑
- Azure Key Vault:统一管理密钥、加密密钥和证书。与 Azure AD 集成进行访问控制。支持 HSM 支持的密钥存储
- SOPS (Secrets OPerationS):加密密钥文件并在 Git 中管理。支持 AWS KMS、GCP KMS 和 Azure Key Vault 作为加密后端。适用于不需要专用密钥管理服务的小型团队和项目
密钥生命周期管理
密钥不是"设置后就不管了",需要管理其整个生命周期。
- 生成:生成具有足够熵的随机值。不使用人为创建的密码或可猜测的模式
- 分发:向应用程序传递密钥时,使用环境变量注入、文件挂载或从密钥管理服务通过 API 获取。绝不将密钥包含在容器镜像或部署制品中
- 轮换:定期轮换密钥以最小化泄露时的影响窗口。自动化轮换并设计应用程序能够在不停机的情况下处理凭证变更(例如,过渡期间支持双凭证)
- 撤销:检测到泄露或人员变动时立即撤销密钥。撤销必须能在几分钟内执行,因此需要预先建立流程并实现自动化
- 审计:记录所有密钥访问,定期审查谁在何时访问了什么。检测异常访问模式(来自异常时间或 IP 地址的访问)并触发告警
密钥泄露的检测与响应
早期检测密钥泄露并最小化损害的机制同样重要。
- Git 密钥扫描:使用 git-secrets、truffleHog 或 GitHub Secret Scanning 等工具在提交前或推送时检测密钥混入。集成到 pre-commit 钩子中最为有效
- 运行时监控:监控使用泄露凭证的异常 API 调用模式。AWS CloudTrail 和 GuardDuty 可以检测与访问密钥相关的可疑活动
- 事件响应手册:预先定义密钥泄露的响应流程。基本流程为:立即撤销泄露的密钥 → 影响评估 → 受影响系统的凭证轮换 → 根因分析和防止复发
常见误解
- 将密钥存储在环境变量中是安全的
- 环境变量可能通过 /proc 文件系统、崩溃转储和日志输出泄露。虽然环境变量可以作为从密钥管理服务获取值的临时传递机制,但不适合作为永久存储位置。
- 加密密钥后提交到仓库就没问题
- 加密密钥的管理成为新的挑战,如果密钥泄露,所有密钥都可以被解密。此外,密钥会持续存在于 Git 历史中,密钥轮换时需要处理过去的提交。应使用专用的密钥管理服务。
分享