4. 签名链路架构总览:从代码提交到制品仓库的完整签名链路

制品签名链路是 IDP(Internal Developer Platform)中保障软件供应链安全的核心基础设施。本章从端到端视角,完整呈现一次代码提交如何触发签名操作,并最终在制品仓库中生成可验证的签名制品。理解各组件交互关系,是后续设计自动化测试用例的基础。

4.1 链路全景与核心阶段

完整签名链路可划分为四个阶段:触发与构建 → 签名凭证获取 → 签名执行 → 验证与存储。每个阶段涉及不同的系统组件和协议交互。

阶段 核心组件 关键动作 产出物
触发与构建 Git 仓库、CI/CD 引擎 代码提交触发流水线,编译构建生成制品 二进制/容器镜像/包文件
签名凭证获取 密钥管理服务(KMS)、短期凭证代理 流水线向 KMS 请求签名密钥,获取临时令牌 短期签名密钥 /
签名执行 签名代理(Signing Agent)、制品 对制品摘要进行签名,生成签名文件 .sig / .asc / 签名元数据
验证与存储 制品仓库、验证网关 验证签名有效性,将签名与制品关联存储 签名验证记录、可验证制品
关键设计原则:签名私钥永不离开 KMS 硬件安全边界。CI/CD 流水线仅获取短期签名授权,实际签名操作由签名代理在隔离环境中完成。

4.2 组件交互关系与数据流

下图展示了从代码提交到制品入库的完整交互序列,包含 7 个核心节点和 6 条主要数据流。

IDP 制品签名链路架构总览 IDP 制品签名链路架构总览 Git 仓库 CI/CD 引擎 构建产物 KMS 签名代理 验证网关 制品仓库 ① push / PR ② 编译构建 ③ 请求签名授权 ④ 短期签名密钥 ⑤ 制品摘要 ⑥ 签名 + 公钥 ⑦ 验证通过,存储 图例说明 实线:同步数据流 虚线:异步请求/响应 数字序号:执行顺序
测试关注点:链路中第③步(请求签名授权)和第⑤步(制品摘要传递)是自动化测试的高风险区域。建议针对 KMS 超时、签名代理不可用、摘要哈希算法不匹配等场景设计故障注入用例。

4.3 各组件职责与接口契约

下表详细列出每个组件的核心职责、对外接口协议以及自动化测试需要覆盖的关键属性。

组件 职责 接口协议 测试覆盖要点
Git 仓库 存储源码、触发 CI/CD 流水线 Git over HTTPS/SSH, Webhook Webhook 触发延迟、分支过滤规则
CI/CD 引擎 编排构建流程、调用签名步骤 REST API, gRPC 流水线超时重试、签名步骤跳过策略
KMS 管理签名密钥、签发短期授权 PKCS#11, KMIP, AWS KMS API 密钥轮换、授权过期、并发限流
签名代理 接收制品摘要、执行签名操作 gRPC / HTTP + TUF 摘要完整性校验、签名算法兼容性
验证网关 验证签名、检查证书链 Cosign / Notation CLI, OCI 证书吊销、时间戳验证、策略引擎
制品仓库 存储制品及签名元数据 OCI Distribution, S3 API 签名与制品关联性、元数据持久化

4.4 签名链路中的安全边界

签名链路的安全性依赖于明确的信任边界划分。以下列出三个关键安全边界及其在自动化测试中的验证方法。

  • 边界一:CI/CD 与 KMS 之间 — CI/CD 引擎不能直接访问签名私钥,只能通过短期授权令牌间接调用签名服务。测试需验证令牌有效期、权限范围、以及令牌泄露后的撤销机制。
  • 边界二:签名代理与制品之间 — 签名代理只接收制品的哈希摘要,不接触原始制品内容。测试需验证摘要计算过程是否被篡改,以及摘要与制品的绑定关系。
  • 边界三:验证网关与制品仓库之间 — 验证网关在存储前必须完成签名验证,拒绝未签名或签名无效的制品。测试需构造无效签名、过期证书、篡改元数据等场景。
常见陷阱:在自动化测试中,容易忽略 KMS 授权令牌的时钟偏差问题。如果 CI/CD 节点与 KMS 之间存在时间不同步,可能导致令牌被提前判定为过期或无效。建议在测试环境中引入 NTP 模拟和时钟偏移注入。

4.5 链路时序与异步交互

签名链路并非完全同步。以下时序图展示关键异步交互点,这些点也是自动化测试中需要特别关注的并发与超时场景。

签名链路时序与异步交互 签名链路时序与异步交互 CI/CD KMS 签名代理 验证网关 请求签名授权 返回短期令牌 发送制品摘要 + 令牌 异步签名计算 返回签名结果 提交制品 + 签名 + 公钥 验证通过,存储确认 异步签名计算阶段(黄色区域)是自动化测试中需要模拟超时和中断的关键窗口

4.6 自动化测试的链路覆盖策略

基于上述架构分析,自动化测试应从以下三个维度覆盖完整签名链路:

  1. 正向链路验证:从代码提交到制品入库,验证每一步签名元数据正确生成、存储、可追溯。使用已知摘要的测试制品,断言签名结果与预期一致。
  2. 异常链路注入:模拟 KMS 不可用、签名代理超时、验证网关证书过期、制品仓库写入失败等故障。验证流水线是否优雅降级或正确报错。
  3. 安全边界穿透测试:尝试绕过签名代理直接向验证网关提交未签名制品、使用过期令牌调用签名服务、篡改制品摘要后重新签名。验证安全边界是否被突破。
推荐实践:在 CI/CD 流水线中嵌入签名链路健康检查步骤,每次构建前先执行一次轻量级签名探针(ping KMS + 签名代理 + 验证网关),提前发现基础设施故障,避免构建失败后才发现链路问题。