Sealed Secrets API 接口详解与技术实践
2025-07-07 01:43:01作者:裘旻烁
项目概述
Sealed Secrets 是一个 Kubernetes 控制器,它提供了一种安全的方式来管理 Kubernetes 集群中的敏感信息。其核心思想是通过"单向"加密机制,允许任何人创建加密的 Secret(称为 SealedSecret),但只有目标集群中运行的控制器能够解密,恢复出原始的 Secret 对象。
API 架构与版本
Sealed Secrets 控制器提供了 RESTful API 接口,基于 OpenAPI 3.0.3 规范构建。当前文档描述的 API 版本为 0.17.3,基础路径为 /v1
。
核心 API 端点解析
1. 获取公钥证书
端点: GET /cert.pem
功能: 获取用于签署 Sealed Secrets 的公钥证书
响应格式: PEM 格式的证书文件
状态码:
- 200: 成功获取证书
- 500: 服务器内部错误
技术要点:
- 该证书用于客户端加密 Secret 数据
- 证书采用 x509 标准格式
- 每个集群的证书是唯一的,确保加密数据只能被目标集群解密
2. 验证 Sealed Secrets 对象
端点: POST /verify
功能: 验证 Sealed Secrets 对象的有效性
请求体: SealedSecret 对象(JSON 格式)
状态码:
- 200: 验证通过
- 400: 请求格式错误
- 409: 验证冲突(如命名空间不匹配等)
- 500: 服务器内部错误
技术实践建议:
- 在 CI/CD 流程中集成此验证步骤
- 验证内容包括但不限于:API 版本兼容性、命名空间有效性、加密数据格式等
3. 重新加密 Sealed Secrets 对象
端点: POST /rotate
功能: 对 Sealed Secrets 对象进行重新加密
请求体: SealedSecret 对象(JSON 格式)
响应: 重新加密后的 SealedSecret 对象(JSON 格式)
状态码:
- 200: 重新加密成功
- 400: 请求格式错误
- 409: 加密冲突
- 500: 服务器内部错误
使用场景:
- 密钥轮换后更新现有的 SealedSecret
- 迁移到新集群时重新加密数据
- 加密策略变更后的批量更新
数据结构详解
SealedSecret 对象结构
apiVersion: bitnami.com/v1alpha1 # API 版本
kind: SealedSecret # 资源类型
metadata: # 元数据
name: string # 资源名称
namespace: string # 命名空间
creationTimestamp: string # 创建时间戳
spec: # 规格定义
encryptedData: object # 加密数据
template: # 模板定义
metadata: object # 模板元数据
data: string # 模板数据
关键字段说明
-
encryptedData:
- 类型: 键值对对象
- 内容: 实际加密后的敏感数据
- 加密方式: 使用控制器的公钥进行非对称加密
-
template:
- 用于定义解密后生成的 Secret 的元数据和结构
metadata
可以覆盖 SealedSecret 的元数据data
字段定义了 Secret 的基本结构
安全最佳实践
-
密钥管理:
- 定期轮换控制器密钥
- 备份私钥以确保灾难恢复能力
- 限制对
/cert.pem
端点的访问
-
访问控制:
- 使用 Kubernetes RBAC 限制对控制器的访问
- 在网络层面限制 API 端点的访问范围
-
审计与监控:
- 记录所有 API 调用
- 监控异常的验证或重新加密请求
开发集成指南
客户端实现要点
-
加密流程:
- 获取目标集群的公钥证书
- 使用证书加密敏感数据
- 构建 SealedSecret 对象
- 可选步骤:通过
/verify
端点验证对象有效性
-
错误处理:
- 处理证书获取失败情况
- 优雅处理加密/解密错误
- 实现重试逻辑应对临时性故障
-
性能考虑:
- 缓存公钥证书减少网络请求
- 批量处理多个 Secret 的加密/解密
- 异步处理长时间运行的操作
常见问题解决方案
-
证书过期:
- 通过控制器日志确认证书状态
- 触发密钥轮换流程
- 更新所有依赖的 SealedSecret
-
验证失败:
- 检查 API 版本兼容性
- 确认命名空间策略
- 验证加密数据的完整性
-
性能瓶颈:
- 监控 API 响应时间
- 考虑水平扩展控制器实例
- 优化客户端请求频率
通过深入理解 Sealed Secrets 的 API 设计和实现原理,开发者可以更安全、高效地在 Kubernetes 环境中管理敏感信息,同时构建可靠的自动化流程。