Secret 管理
Secret 包括密码、Token、私钥、证书和数据库连接凭据。目标不仅是“不提交到 Git”,还包括限制读取、缩短有效期、避免泄漏并能够轮换。
生命周期
- 由受控系统生成或导入,记录用途和所有者。
- 按环境和工作负载隔离,只授权需要的主体读取。
- 在运行时通过文件、Secret Provider 或受控环境变量注入。
- 定期轮换,并支持应用在不中断服务的情况下更新。
- 过期、离职或泄漏时立即吊销,保留审计记录。
各阶段做法
- 本地开发:提交
.env.example,真实值放在被忽略文件或本地 Secret 工具中。 - CI/CD:使用环境级受保护变量,禁止向 Fork PR 暴露生产 Secret;优先用 OIDC 换取短期凭据。
- 镜像构建:使用 BuildKit secret mount 等临时注入方式,不能写入
ARG、ENV或镜像层。 - Kubernetes:Secret 的 Base64 不是加密;启用静态加密、最小 RBAC,并评估 Vault、云 Secret Manager 或 External Secrets。
- 前端:发送给浏览器的任何值都不再是 Secret。公开 API Key 必须通过来源限制、配额和后端授权降低风险。
泄漏响应
立即吊销或轮换凭据,再检查使用日志、影响范围和持久化位置。仅从 Git 历史删除字符串不能让已经暴露的凭据重新安全。
检查清单
- 是否有明确所有者、用途、环境和过期时间?
- 日志、错误、构建产物和遥测是否完成脱敏?
- 应用能否同时接受新旧凭据以完成无中断轮换?
- 是否监控异常读取、认证失败和即将到期的证书?