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 生命周期包含以下六个阶段:
- 创建(Create):生成或注册新的 Secret,例如生成随机密码、签发证书、创建。
- 存储(Store):将 Secret 安全地存放在专用存储系统中,如 HashiCorp Vault、AWS Secrets Manager、Kubernetes Secrets(需加密)、云平台KMS。
- 分发(Distribute):通过安全通道将 Secret 注入到目标应用或服务中,例如通过 Sidecar 代理、环境变量注入、临时挂载卷。
- 使用(Use):应用程序在运行时读取并使用 Secret 进行身份认证或加密操作。
- 轮换(Rotate):在 Secret 过期、泄露或达到合规周期时,生成新版本并替换旧版本,同时确保旧 Secret 在宽限期内仍可被接受。
- 撤销(Revoke):在确认泄露或服务下线后,立即吊销 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,以及轮换操作是否按时执行。
2.5 安全最佳实践:Secrets的黄金法则
⚠️ 禁止: 切勿将 Secrets 硬编码在代码仓库、配置文件、Dockerfile 或 CI/CD 日志中。这是云原生安全中最常见且最严重的安全事故来源。
以下是 Secrets 管理的五项黄金法则:
- 静态加密:所有 Secrets 在存储时必须加密(AES-256 或更高),无论存储在哪个后端。
- 传输加密:Secrets 在分发和传输过程中必须使用 TLS 1.2+ 加密通道。
- 最小权限:每个服务只应访问其运行所必需的 Secrets,遵循最小权限原则。
- 自动轮换:所有静态 Secrets(密码、、证书)必须设置自动轮换策略,避免人工遗忘。
- 全面审计:记录每一次 Secrets 的创建、读取、轮换和撤销操作,并定期审查审计日志。