3. 制品签名链路概述:从代码提交到制品部署的完整签名链、签名密钥生命周期

制品签名链路是保障软件供应链安全的核心防线。从开发者提交代码到最终制品部署至生产环境,每一个环节的签名与验证行为构成了不可篡改的信任链。本章将拆解完整签名链路,并深入分析签名密钥从生成到销毁的全生命周期管理。

3.1 完整签名链路:从代码提交到制品部署

现代云原生交付流水线中,签名行为发生在多个阶段。每个阶段使用不同的密钥对,形成层级化的信任模型。下表展示了典型签名链路的五个关键节点:

阶段 签名对象 签名工具/标准 验证方 信任锚点
1. 代码提交 Git commit / tag GPG / SSH 签名 代码仓库(GitHub/GitLab) 开发者公钥(User Key)
2. 构建产物 容器镜像 / JAR / 二进制 Cosign / Notary / Sigstore 制品仓库(Harbor/ECR) 构建平台密钥(Platform Key)
3. SBOM 附加 SPDX / CycloneDX 清单 in-toto attestation 策略引擎(OPA/Kyverno) CI/CD 管道密钥(Pipeline Key)
4. 环境准入 部署清单 / Helm Chart Helm Provenance / KMS 签名 Kubernetes Admission Controller 环境根密钥(Env Root Key)
5. 运行时验证 容器运行时策略 Sigstore Policy Controller Kubernetes 节点 / 策略代理 集群信任包(Trust Bundle)
关键洞察: 多租户场景下,每个租户的签名链路必须独立隔离。租户 A 的构建平台密钥不能用于验证租户 B 的制品,否则将导致跨租户信任污染。

3.2 签名链路流程图

下图展示了从代码提交到制品部署的完整签名与验证流程,包含五个阶段的签名动作和对应的验证网关:

制品签名链路流程图 制品签名链路:从代码提交到部署验证 ① 代码提交 GPG 签名 Commit ② 构建产物 Cosign 签名镜像 ③ SBOM 附加 in-toto 证明 ④ 环境准入 KMS 签名 Chart ⑤ 运行时验证 Policy Controller 验证网关(Admission Controller) • 每个阶段签名后,下游阶段必须验证上游签名的有效性 • 验证失败 → 阻断部署;验证通过 → 传递信任链 信任锚点(Trust Anchor) • 根密钥(Root Key)→ 中间密钥(Intermediate Key)→ 签名密钥(Signing Key)

3.3 签名密钥生命周期

签名密钥的生命周期管理直接决定签名链的安全性。一个完整的密钥生命周期包含以下六个阶段:

  1. 密钥生成(Key Generation):在安全环境中使用硬件安全模块(HSM)或云 KMS 生成非对称密钥对。私钥永不离开 KMS 边界。
  2. 密钥分发(Key Distribution):公钥通过 PKI 体系或 Sigstore 的透明日志(Rekor)发布;私钥仅授权给签名服务。
  3. 密钥使用(Key Usage):签名服务使用私钥对制品进行签名;验证方使用公钥进行验证。
  4. 密钥轮换(Key Rotation):定期(如每 90 天)或事件驱动(如泄露)生成新密钥对,旧密钥进入退役期。
  5. 密钥撤销(Key Revocation):通过 CRL 或 OCSP 将泄露或过期的密钥标记为不可信。
  6. 密钥销毁(Key Destruction):确认所有依赖该密钥的签名均已过期或重新签名后,安全销毁私钥。
多租户隔离风险: 密钥生命周期管理在多租户场景下极易出现权限越界。例如,租户 A 的密钥轮换操作如果由共享的 CI/CD 管道执行,可能误将租户 B 的密钥也一并轮换,导致租户 B 的制品验证失败。必须确保每个租户的密钥生命周期操作仅作用于该租户的命名空间。

3.4 密钥生命周期状态机

下图展示了签名密钥在不同生命周期阶段之间的状态转换关系,以及触发转换的事件:

签名密钥生命周期状态机 签名密钥生命周期状态机 生成 活跃 退役 撤销 销毁 首次使用 轮换/到期 泄露/违规 发现后补撤销 确认无依赖 强制销毁 生命周期策略建议 • 活跃期:默认 90 天,到期自动触发轮换 • 退役期:保留 30 天用于验证历史制品,之后自动进入销毁队列

3.5 多租户隔离下的密钥管理挑战

在多租户环境中,签名密钥的生命周期管理面临以下核心挑战:

  • 密钥隔离性:每个租户必须拥有独立的密钥层级,包括根密钥、中间密钥和签名密钥。共享密钥将导致租户 A 可以伪造租户 B 的制品签名。
  • 轮换权限控制:密钥轮换操作必须限定在租户的命名空间内。使用 Kubernetes RBAC 或 IAM 策略确保租户管理员只能轮换本租户的密钥。
  • 撤销传播延迟:当租户的密钥被撤销时,所有依赖该密钥的验证点必须及时更新信任包。延迟可能导致已撤销的密钥仍被用于验证新制品。
  • 审计与合规:每个密钥生命周期事件(生成、轮换、撤销、销毁)必须记录到不可篡改的审计日志中,并关联到具体的租户和操作者。
最佳实践: 使用 Sigstore 的 Keyless 模式(基于 OIDC 身份)可以简化密钥生命周期管理。每个构建任务使用临时密钥对,签名后立即丢弃私钥,公钥通过 Fulcio CA 和 Rekor 透明日志进行验证。这种方式天然支持多租户隔离,因为身份绑定在 OIDC 的租户字段上。

3.6 签名链路权限变更风险评估

在 SOPS 策略评审中,需要重点关注以下与签名链路相关的权限变更风险:

风险场景 影响范围 风险等级 缓解措施
CI/CD 管道密钥泄露 所有使用该管道构建的租户制品 严重 立即撤销密钥,重新签名所有受影响制品
密钥轮换未通知下游验证方 新制品验证失败,部署阻塞 高 建立密钥轮换通知机制,提前更新信任包
跨租户密钥误用 租户隔离被突破 严重 实施密钥命名空间隔离,审计所有签名操作
退役密钥未及时销毁 历史签名可被伪造 中 设置密钥退役 TTL,到期自动销毁
验证方信任包过期 合法制品被误拦截 高 自动化信任包更新,监控过期时间