References: HashiCorp Vault documentation, AWS Secrets Manager documentation, 12-Factor App, NIST secret management guidelines, External Secrets Operator documentation.
Applicable scenarios
- Application secret management (database passwords / API Keys / Tokens)
- Configuration center design (multi-environment configuration distribution)
- Secret rotation strategies
- Secrets injection in CI/CD
- Kubernetes Secrets management
- Certificate lifecycle management
- Compliance auditing (who accessed what and when)
Core principles
1. 零硬编码
代码中不出现任何密钥
.env 文件不入 Git
配置与代码分离
2. 最小权限
每个服务只能访问自己的 secrets
按环境隔离
短期凭证优于长期凭证
3. 加密存储
静态加密(at rest)
传输加密(in transit)
密钥加密密钥(KEK)分离
4. 自动轮换
定期轮换(90 天内)
轮换不中断服务
旧密钥有过渡期
5. 审计追踪
所有访问有日志
异常访问告警
定期审计权限
6. 12-Factor 配置
环境变量注入
不同环境不同值
应用不关心来源
7. 灾备可恢复
secrets 有备份
恢复流程已演练
不依赖单点
Workflow
1. 密钥分类
- 基础设施密钥(云 API Key / SSH Key)
- 应用密钥(DB 密码 / JWT Secret / API Token)
- 证书(TLS / mTLS / 签名证书)
- 加密密钥(AES / RSA)
2. 选择存储方案
- HashiCorp Vault(自建 / 多云)
- AWS Secrets Manager(AWS 原生)
- GCP Secret Manager(GCP 原生)
- Azure Key Vault(Azure 原生)
- K8s External Secrets Operator(K8s 集成)
3. 设计访问策略
- 按服务 / 环境划分路径
- RBAC / Policy 定义
- 短期 Token(Vault lease)
4. 注入方式
- 环境变量(12-Factor)
- 文件挂载(K8s Volume)
- SDK 直接读取(Vault Agent)
- Init Container 预加载
5. 轮换策略
- 自动轮换(Secrets Manager rotation)
- 双密钥过渡(新旧并存)
- 应用热加载(不重启)
6. CI/CD 集成
- GitHub Secrets / GitLab CI Variables
- Vault 动态凭证(CI 专用短期 Token)
- OIDC 联合认证(无长期密钥)
7. 监控与审计
- 访问日志
- 异常检测(非工作时间 / 异常 IP)
- 过期告警
- 定期权限审计
Solution comparison
| Solution | Applicable scenarios | Advantages | Disadvantages |
|---|---|---|---|
| Vault | Multi-cloud / self-hosted | Full-featured, dynamic credentials | Complex operations |
| AWS Secrets Manager | AWS native | Automatic rotation, managed | Locked into AWS |
| K8s Secrets | Inside K8s | Native integration | By default base64, not encrypted |
| External Secrets | K8s + external source | Sync external to K8s | Additional components |
| SOPS | Git encryption | Version-control friendly | Manual management |
| dotenv | Local development | Simple | Not suitable for production |
Configuration hierarchy
优先级(高 → 低):
1. 环境变量(运行时注入)
2. 密钥管理服务(Vault / Secrets Manager)
3. ConfigMap / 配置文件
4. 应用默认值
规则:
- 密钥 → 必须从密钥管理服务获取
- 环境差异配置 → 环境变量 / ConfigMap
- 通用配置 → 应用默认值
- 本地开发 → .env(.gitignore)
Quality self-check
□ 代码中无硬编码密钥(grep -r "password\|secret\|api_key")
□ .env / .env.* 在 .gitignore 中
□ 生产密钥存储在密钥管理服务中
□ 每个服务独立的访问策略
□ 密钥有轮换计划(<= 90 天)
□ 轮换不中断服务(双密钥过渡)
□ CI/CD 使用短期凭证(OIDC / 动态 Token)
□ 访问日志已启用
□ 过期 / 即将过期密钥有告警
□ K8s Secrets 启用 encryption at rest
□ 灾备恢复流程已文档化
□ 新员工 / 离职有密钥权限变更流程
□ 定期审计(季度)
Common pitfalls
- Hardcoded secrets——leaked into Git history, cannot be thoroughly removed
- .env committed to Git——visible to everyone
- Treating K8s Secret as secure——by default it is only base64 encoding
- No rotation——remains valid long-term after leakage
- Shared secrets——multiple services use the same one, cannot be traced
- CI uses long-lived Tokens——large blast radius if leaked
- No auditing——do not know who accessed what
- Rotation interrupts service——no dual-key transition period
- No secret backup——if Vault goes down, everything is unavailable
- Environment variable log leakage——error logs print env
- No environment separation——dev secrets can access prod
- No revocation on departure——former employees still have access
Supporting templates
templates/secrets-checklist.md— secret management checklist and rotation plan template
Collaboration with other skills
上游:
infrastructure-as-code → Vault / KMS 基础设施
ci-cd-pipeline → CI secrets 需求
下游:
containerization → 运行时 secrets 注入
kubernetes-orchestration → K8s Secrets / External Secrets
networking-gateway → SSL 证书管理
monitoring-alerting → 密钥过期告警