2、Secrets管理基础:什么是Secrets、常见Secrets类型、Secrets生命周期
在云原生与GitOps架构中,Secrets(机密)是任何需要被保护以防止未授权访问的敏感数据载体。Secrets一旦泄露,可能导致数据泄露、服务被接管甚至整个基础设施沦陷。理解Secrets的本质、类型与生命周期,是设计安全轮换策略的前提。
2.1 什么是Secrets
Secrets是用于身份验证、加密或授权操作的敏感信息片段。在Kubernetes与Argo CD环境中,Secrets通常以Secret资源对象的形式存在,但也可以由外部密钥管理服务(KMS)动态提供。Secrets的核心特征包括:
- 机密性:仅允许授权实体(服务、用户、Pod)读取。
- 完整性:在传输和存储过程中未被篡改。
- 时效性:具有有效期限,过期后应自动失效。
- 可审计性:所有访问和变更操作应被记录。
2.2 常见Secrets类型
根据用途与敏感程度,Secrets可分为以下三大类。下表对比了各类Secrets的典型特征与轮换关注点:
| Secrets类型 | 典型示例 | 敏感等级 | 轮换频率建议 | 泄露影响 |
|---|---|---|---|---|
| /令牌 | GitHub 、AWS Access Key、JWT | 高 | 每30-90天或事件驱动 | 外部服务被未授权调用 |
| 数据库密码 | MySQL密码、PostgreSQL密码、Redis密码 | 极高 | 每90天或合规要求 | 数据泄露、数据篡改 |
| TLS证书/私钥 | Ingress证书、mTLS客户端证书、CA私钥 | 极高 | 证书到期前30天或按CA策略 | 中间人攻击、通信被解密 |
2.2.1 与令牌
用于服务间或用户与API之间的身份验证。在Argo CD项目级架构中,常见的包括:Git仓库的部署密钥、外部Secret Store的访问令牌、以及CI/CD系统的Webhook Secret。这类Secrets通常具有较短的轮换窗口,且轮换时需要确保新旧密钥在过渡期内同时有效。
2.2.2 数据库密码
数据库密码是应用层访问持久化存储的核心凭证。在微服务架构中,每个服务可能拥有独立的数据库用户和密码。轮换数据库密码时,必须协调应用重启或连接池刷新,避免服务中断。建议使用动态密码生成机制(如Vault的动态Secret),实现每次连接使用临时密码。
2.2.3 TLS证书与私钥
TLS证书用于加密通信链路(HTTPS、gRPC、mTLS)。在Kubernetes集群中,Ingress Controller、Service Mesh(如Istio)以及Pod间的mTLS通信都依赖证书。证书轮换通常由证书到期事件触发,且需要保证新旧证书在轮换期间均被信任。私钥的存储必须使用文件系统权限或KMS加密。
SealedSecret或ExternalSecret资源来管理证书私钥,确保Git仓库中仅存储加密后的密文。
2.3 Secrets生命周期
Secrets从创建到销毁经历完整的生命周期。理解每个阶段的风险与控制点,是设计轮换策略的基础。下图展示了Secrets生命周期的四个核心阶段:
2.3.1 创建阶段
Secrets的创建应遵循最小权限原则。在Argo CD项目级架构中,Secrets可以通过以下方式创建:
- 手动生成:使用
openssl rand或pwgen生成强密码。 - 自动化生成:通过Operator(如Vault Operator)动态生成临时Secret。
- 加密导入:使用
kubeseal将明文Secret加密为SealedSecret,再提交到Git仓库。
2.3.2 分发阶段
Secrets从存储位置传递到目标工作负载的过程称为分发。在Kubernetes中,分发方式包括:
- 环境变量注入:通过
envFrom或valueFrom引用Secret。 - Volume挂载:将Secret作为文件挂载到Pod文件系统。
- Sidecar注入:通过Secret Store CSI Driver或Vault Agent Sidecar动态获取Secret。
ExternalSecret或SealedSecret资源定义,由Argo CD同步到目标集群。避免在Application manifest中直接引用明文Secret。
2.3.3 使用与监控阶段
Secrets在运行时被应用消费。此阶段的关键活动包括:
- 访问审计:记录谁在何时访问了哪个Secret。
- 有效期检查:监控证书到期时间、密码年龄。
- 异常检测:识别非预期的Secret访问模式(如批量读取)。
2.3.4 轮换与销毁阶段
轮换是Secrets生命周期的核心操作,也是本课程的重点。轮换策略包括:
- 定时轮换:基于日历周期(如每90天)强制更新。
- 事件驱动轮换:在泄露、人员离职、服务迁移时立即轮换。
- 销毁:轮换后,旧Secret应被彻底删除或标记为失效,并撤销所有关联授权。
下表总结了生命周期各阶段的安全控制措施:
| 生命周期阶段 | 安全控制措施 | Argo CD项目级实践 |
|---|---|---|
| 创建 | 使用强随机数、加密存储、访问控制 | 使用SealedSecret加密后提交Git |
| 分发 | 传输加密、最小权限RBAC、网络隔离 | 通过ExternalSecret从Vault拉取 |
| 使用与监控 | 审计日志、有效期告警、异常检测 | 集成Prometheus监控证书过期 |
| 轮换与销毁 | 自动轮换、旧版本撤销、清理缓存 | 使用Reloader触发Pod滚动更新 |
Project级别的RBAC限制不同团队只能访问本项目的Secrets,避免跨项目泄露。