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 签名链路拓扑设计

签名链路拓扑定义了制品从构建完成到签名生效的完整数据流路径。以下为推荐的参考拓扑:

签名链路拓扑设计(参考架构) CI/CD 流水线 Jenkins / GitLab CI / Tekton 签名请求网关 gRPC / REST 端点 策略引擎 OPA / Rego 规则 密钥路由层 Key ID → KMS 后端 KMS / HSM 集群 AWS KMS / Azure Key Vault 签名存储与分发 OCI Annotations / 透明日志 制品仓库 Harbor / ECR / Docker Registry 说明:实线为签名请求路径,虚线为签名值返回路径;所有跨节点通信均使用 mTLS 加密

2.4 拓扑设计关键原则

  • 最小权限: 签名服务仅持有对 KMS 的 Sign 权限,不持有 Decrypt 或 Export 权限。
  • 异步解耦: 签名请求与制品上传可并行执行,签名结果通过回调或事件驱动写入制品元数据。
  • 透明日志: 每次签名操作均记录至不可篡改的透明日志(如 Rekor),支持后续验证与审计。
  • 故障隔离: 签名服务与 CI/CD 流水线独立部署,签名服务故障不影响构建流程(可降级为不签名但记录告警)。
常见设计误区: 将私钥直接挂载到构建容器中、使用对称密钥签名、签名服务与 CI 系统共享同一网络命名空间。这些做法会显著扩大攻击面,应严格避免。

2.5 签名链路数据流时序

以下时序描述了制品从构建完成到签名生效的完整数据流:

  1. CI 流水线完成制品构建,计算制品摘要(SHA-256)。
  2. CI 向签名请求网关发送签名请求,携带制品摘要、Key ID、制品类型与流水线上下文。
  3. 网关校验请求身份(mTLS + JWT),转发至策略引擎。
  4. 策略引擎评估签名策略:若通过,将请求路由至密钥路由层。
  5. 密钥路由层根据 Key ID 选择对应 KMS 后端,发起签名调用。
  6. KMS 使用私钥对摘要进行签名,返回签名值(Base64 编码)。
  7. 签名值经密钥路由层返回至签名存储组件。
  8. 签名存储组件将签名值写入制品仓库的元数据(如 OCI Annotations),同时推送至透明日志。
  9. CI 流水线轮询或通过回调获知签名完成,标记制品为“已签名”状态。
性能指标参考: 在典型 IDP 场景下,单次签名请求端到端延迟应控制在 200ms 以内(含网络开销);签名服务应支持至少 500 TPS 的并发签名请求。