2. 签名链路基础架构:签名密钥管理、签名服务组件、签名链路拓扑设计
制品签名链路是平台工程中保障软件供应链完整性的核心防线。本章从密钥管理、服务组件与拓扑设计三个维度,构建可落地、可审计的签名基础设施。
2.1 签名密钥管理
密钥是签名链路的信任锚点。在 IDP 场景下,密钥管理需覆盖全生命周期:生成、存储、轮换、吊销与审计。
| 管理阶段 | 关键操作 | 推荐实践 |
|---|---|---|
| 密钥生成 | 使用硬件安全模块(HSM)或云 KMS 生成非对称密钥对 | 优先使用 ECDSA P-384 或 Ed25519 算法;私钥永不离开 HSM 边界 |
| 密钥存储 | 私钥加密存储于 KMS/HSM,公钥发布至透明日志 | 禁止私钥落盘到构建节点或 CI 工作目录;使用引用标识(Key ID)代替密钥材料 |
| 密钥轮换 | 按策略自动生成新密钥对,旧密钥保留验证能力 | 轮换周期建议 90 天;保留至少两个有效版本以支持渐进迁移 |
| 密钥吊销 | 将吊销证书(CRL)或 OCSP 响应同步至验证端点 | 吊销后立即失效签名操作,但已签制品仍可验证旧签名 |
| 审计日志 | 记录所有密钥操作:签名、解密、轮换、吊销 | 日志不可篡改,保留至少 1 年;对接 SIEM 系统 |
密钥引用模式: 在流水线配置中只传递 Key ID 或 KMS 资源名称(ARN),不传递密钥材料。签名服务通过 Key ID 向 KMS 发起签名请求,私钥始终在 HSM 边界内运算。
2.2 签名服务组件
签名服务是制品签名链路的执行中枢,由以下核心组件构成:
- 签名请求网关: 接收来自 CI/CD 流水线的签名请求,进行身份认证与请求校验。支持 gRPC 与 REST 双协议。
- 策略引擎: 验证请求是否满足签名策略(如制品类型、分支来源、审批状态)。策略以 Rego 或 OPA 规则定义。
- 密钥路由层: 根据 Key ID 将签名请求转发至对应的 KMS/HSM 后端,支持多密钥池负载均衡。
- 签名执行器: 调用 KMS 签名接口,对制品摘要(Digest)进行非对称签名,返回签名值。
- 签名存储与分发: 将签名结果写入制品元数据存储(如 OCI Repository 的 annotations),同时推送至签名透明日志。
组件间通信安全: 所有内部 RPC 调用必须使用 mTLS 双向认证;签名请求与响应均携带请求 ID 用于链路追踪。
2.3 签名链路拓扑设计
签名链路拓扑定义了制品从构建完成到签名生效的完整数据流路径。以下为推荐的参考拓扑:
2.4 拓扑设计关键原则
- 最小权限: 签名服务仅持有对 KMS 的
Sign权限,不持有Decrypt或Export权限。 - 异步解耦: 签名请求与制品上传可并行执行,签名结果通过回调或事件驱动写入制品元数据。
- 透明日志: 每次签名操作均记录至不可篡改的透明日志(如 Rekor),支持后续验证与审计。
- 故障隔离: 签名服务与 CI/CD 流水线独立部署,签名服务故障不影响构建流程(可降级为不签名但记录告警)。
常见设计误区: 将私钥直接挂载到构建容器中、使用对称密钥签名、签名服务与 CI 系统共享同一网络命名空间。这些做法会显著扩大攻击面,应严格避免。
2.5 签名链路数据流时序
以下时序描述了制品从构建完成到签名生效的完整数据流:
- CI 流水线完成制品构建,计算制品摘要(SHA-256)。
- CI 向签名请求网关发送签名请求,携带制品摘要、Key ID、制品类型与流水线上下文。
- 网关校验请求身份(mTLS + JWT),转发至策略引擎。
- 策略引擎评估签名策略:若通过,将请求路由至密钥路由层。
- 密钥路由层根据 Key ID 选择对应 KMS 后端,发起签名调用。
- KMS 使用私钥对摘要进行签名,返回签名值(Base64 编码)。
- 签名值经密钥路由层返回至签名存储组件。
- 签名存储组件将签名值写入制品仓库的元数据(如 OCI Annotations),同时推送至透明日志。
- CI 流水线轮询或通过回调获知签名完成,标记制品为“已签名”状态。
性能指标参考: 在典型 IDP 场景下,单次签名请求端到端延迟应控制在 200ms 以内(含网络开销);签名服务应支持至少 500 TPS 的并发签名请求。