铜墙铁壁 - 密钥管理的最佳实践

铜墙铁壁 - 密钥管理的最佳实践


第一部分:回顾 Kubernetes Secret 的局限性

我们在之前的系列中已经接触过 K8s Secret 对象。它提供了一种将敏感数据与 Pod 定义分离的基础机制。但对于追求极致安全的生产环境,它存在几个显著的局限性:

  1. 默认仅编码非加密: etcd 中存储的 Secret 数据默认只经过了 Base64 编码,这是一种可逆的编码方式,并非加密。任何人只要能访问到 etcd 的数据,就能轻易解码获取明文。除非你为 etcd 显式配置了静态加密,否则数据是“裸奔”的。
  2. 静态密钥 (Static Secrets): 存储在 Secret 中的值通常是静态的、长期有效的。一旦泄露,其有效期可能很长,直到被手动轮换。
  3. 轮换困难 (Rotation is Hard): 手动轮换一个被数十个应用使用的数据库密码,是一个充满风险和辛劳的过程,很容易出错或遗漏。
  4. 审计能力有限: 我们只能审计谁在 API 层面读取了 Secret 对象,但很难追踪一个密钥在被注入到 Pod 后,具体被哪个进程、在何时使用了。
  5. 权限“爆炸半径”较大: 通常,一个 ServiceAccount 被授予了读取某个命名空间下所有 Secret 的权限,这增加了不必要的风险。

第二部分:现代密钥管理的核心原则

为了克服这些局限性,现代的密钥管理系统遵循以下几个核心原则:

  • 集中化 (Centralization): 将所有密钥都存储在一个统一的、高可用的、安全的“保险库”中进行管理。
  • 强身份认证 (Strong Authentication): 对密钥的访问必须基于强认证的身份(无论是人类用户还是机器/应用),而不是依赖于共享的、长期有效的静态令牌。
  • 动态密钥 (Dynamic Secrets): 这是最具革命性的思想。密钥应该被按需、动态地生成,并且拥有一个极短的生命周期 (TTL)。例如,应用需要连接数据库时,它不是去获取一个永久密码,而是向密钥管理器申请一个只在接下来 5 分钟内有效的临时用户名和密码。即使这个临时凭证泄露了,它很快也会失效。
  • 全面审计 (Comprehensive Auditing): 对密钥管理器的每一次操作(认证、策略修改、密钥读取等)都必须有详细的、不可篡改的审计日志。
  • 无处不加密 (Encryption Everywhere): 数据在传输中 (in-transit) 和静态存储时 (at-rest) 都必须被加密。

第三部分:HashiCorp Vault - 密钥管理的事实标准

HashiCorp Vault 是目前业界最流行、功能最强大的开源密钥管理工具,它完美地实现了上述所有原则。

Vault 的核心概念:

  • 存储后端 (Storage Ba

你可能感兴趣的:(云原生安全,密钥,安全)