2. Secrets基础概念:什么是Secrets及其生命周期

2.1 Secrets的定义与核心类型

在云原生环境中,Secrets 是指任何需要被严格保护、仅限授权实体访问的敏感凭证数据。它们通常是应用程序、服务或基础设施组件之间进行身份认证、数据加密或通信授权的关键材料。一旦泄露,攻击者即可利用这些凭证冒充合法身份、窃取数据或横向移动。

常见的 Secrets 类型包括以下四种核心类别:

类型 典型示例 主要用途 泄露风险等级
密码 数据库密码、应用管理员密码 用户/服务身份验证 高
AWS Access Key、GitHub Personal 程序化调用云服务/API 高
证书 TLS/SSL证书、mTLS客户端证书 传输加密、双向身份认证 极高
令牌 JWT、OAuth 2.0 Access 、Kubernetes ServiceAccount 临时授权、会话管理 中-高(取决于有效期)
关键认知: 密码和通常是静态的,泄露后除非手动轮换,否则长期有效;而令牌(尤其是JWT)通常具有时效性,过期后自动失效。证书则介于两者之间,有明确的有效期但通常较长(数月到数年)。

2.2 Secrets的完整生命周期

理解 Secrets 的生命周期是实施有效轮换策略和合规审计的基础。一个完整的 Secrets 生命周期包含以下六个阶段:

  1. 创建(Create):生成或注册新的 Secret,例如生成随机密码、签发证书、创建。
  2. 存储(Store):将 Secret 安全地存放在专用存储系统中,如 HashiCorp Vault、AWS Secrets Manager、Kubernetes Secrets(需加密)、云平台KMS。
  3. 分发(Distribute):通过安全通道将 Secret 注入到目标应用或服务中,例如通过 Sidecar 代理、环境变量注入、临时挂载卷。
  4. 使用(Use):应用程序在运行时读取并使用 Secret 进行身份认证或加密操作。
  5. 轮换(Rotate):在 Secret 过期、泄露或达到合规周期时,生成新版本并替换旧版本,同时确保旧 Secret 在宽限期内仍可被接受。
  6. 撤销(Revoke):在确认泄露或服务下线后,立即吊销 Secret 的权限,使其彻底失效。
Secrets生命周期六阶段流程图 Secrets 完整生命周期六阶段 创建 存储 分发 使用 轮换 撤销 轮换触发新版本创建(循环) 💡 生命周期关键点: • 轮换是唯一可能形成循环的阶段,每次轮换本质上是“创建”新版本并废弃旧版本。 • 撤销是终态,一旦执行,该 Secret 版本即永久失效,不可逆转。

2.3 各类型Secrets的生命周期差异

不同类型的 Secrets 在生命周期各阶段的表现存在显著差异,直接影响轮换策略的设计:

生命周期阶段 密码 证书 令牌(JWT)
创建方式 随机生成或用户设定 云平台/服务生成 CA签发或自签名 授权服务器签发
存储要求 必须加密存储 必须加密存储 私钥加密,公钥可公开 需验证签名,可缓存公钥
轮换触发条件 定期(如90天)或泄露 定期或权限变更 到期前自动续签 短有效期自动过期
撤销方式 修改密码 删除/禁用密钥 吊销列表(CRL) 黑名单或短TTL
典型有效期 无固定(直到轮换) 无固定(直到轮换) 1-3年 分钟到小时级
合规视角: 在PCI DSS、SOC 2、ISO 27001等合规框架中,密码和通常要求至少每90天轮换一次,而证书则要求在到期前30天完成续签。令牌由于有效期短,通常被视为“自动轮换”,但需要确保签发流程的安全。

2.4 云原生环境中的Secrets管理挑战

相比传统数据中心,云原生环境(Kubernetes、微服务、Serverless)给 Secrets 管理带来了新的挑战:

  • 数量爆炸:每个微服务可能需要多个 Secrets(数据库密码、消息队列密钥、外部),总量可达数千甚至数万个。
  • 动态调度:Pod 频繁创建和销毁,Secrets 需要随服务实例动态注入,不能硬编码在镜像中。
  • 多集群/多云:Secrets 需要在多个 Kubernetes 集群或云区域之间同步,增加了分发和轮换的复杂度。
  • 审计合规:需要记录谁在何时访问了哪个 Secret,以及轮换操作是否按时执行。
云原生Secrets管理挑战架构图 云原生 Secrets 管理四大挑战 Secrets 管理 核心控制平面 数量爆炸 数千个微服务×N个Secret 动态调度 Pod频繁创建/销毁 多集群/多云 跨环境同步复杂 审计合规 访问记录与轮换证明 🔑 核心思路:通过集中式 Secrets 管理平台(如 Vault、AWS Secrets Manager)统一应对上述挑战。

2.5 安全最佳实践:Secrets的黄金法则

⚠️ 禁止: 切勿将 Secrets 硬编码在代码仓库、配置文件、Dockerfile 或 CI/CD 日志中。这是云原生安全中最常见且最严重的安全事故来源。

以下是 Secrets 管理的五项黄金法则:

  1. 静态加密:所有 Secrets 在存储时必须加密(AES-256 或更高),无论存储在哪个后端。
  2. 传输加密:Secrets 在分发和传输过程中必须使用 TLS 1.2+ 加密通道。
  3. 最小权限:每个服务只应访问其运行所必需的 Secrets,遵循最小权限原则。
  4. 自动轮换:所有静态 Secrets(密码、、证书)必须设置自动轮换策略,避免人工遗忘。
  5. 全面审计:记录每一次 Secrets 的创建、读取、轮换和撤销操作,并定期审查审计日志。