2、Secrets管理基础:什么是Secrets、常见Secrets类型、Secrets生命周期

在云原生与GitOps架构中,Secrets(机密)是任何需要被保护以防止未授权访问的敏感数据载体。Secrets一旦泄露,可能导致数据泄露、服务被接管甚至整个基础设施沦陷。理解Secrets的本质、类型与生命周期,是设计安全轮换策略的前提。

2.1 什么是Secrets

Secrets是用于身份验证、加密或授权操作的敏感信息片段。在Kubernetes与Argo CD环境中,Secrets通常以Secret资源对象的形式存在,但也可以由外部密钥管理服务(KMS)动态提供。Secrets的核心特征包括:

  • 机密性:仅允许授权实体(服务、用户、Pod)读取。
  • 完整性:在传输和存储过程中未被篡改。
  • 时效性:具有有效期限,过期后应自动失效。
  • 可审计性:所有访问和变更操作应被记录。
关键原则:Secrets不应硬编码在代码、配置文件或镜像中。在GitOps工作流中,Secrets应通过加密存储(如Sealed Secrets、SOPS)或外部KMS注入,而非明文提交到Git仓库。

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加密。

常见误区:不要将TLS私钥与证书存储在同一个未加密的ConfigMap中。在Argo CD中,应使用SealedSecret或ExternalSecret资源来管理证书私钥,确保Git仓库中仅存储加密后的密文。

2.3 Secrets生命周期

Secrets从创建到销毁经历完整的生命周期。理解每个阶段的风险与控制点,是设计轮换策略的基础。下图展示了Secrets生命周期的四个核心阶段:

Secrets生命周期核心阶段 1. 创建 生成/导入/加密 2. 分发 注入/同步/挂载 3. 使用与监控 运行时访问/审计 4. 轮换与销毁 更新/撤销/删除 事件驱动轮换 生命周期关键控制点: • 创建时:使用强随机数生成器,避免可预测值 • 销毁时:确保所有副本已清除,且撤销所有授权

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。
Argo CD集成要点:在GitOps工作流中,Secrets的分发应通过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滚动更新
最佳实践:在Argo CD项目级架构中,建议为每个微服务项目创建独立的命名空间和Secret存储策略。使用Project级别的RBAC限制不同团队只能访问本项目的Secrets,避免跨项目泄露。