软件供应链安全与制品信任工具
一次构建任务显示绿色,镜像也带着熟悉的版本 Tag,但生产集群拉到的内容未必还是评审时那一份。Tag 可以移动,流水线账号可能被盗用,构建器可能偷偷访问未记录的网络依赖,签名也可能来自一个没有生产授权的身份。只问“有没有扫描、有没有签名”,会把最关键的主体身份、生产者身份和消费策略一起漏掉。
可靠的制品信任从不可变摘要开始:谁以什么源码和材料,在怎样隔离的构建器里生成了这个摘要;哪些 Provenance、SBOM、VEX 和测试声明与它绑定;签名者和签发者是否符合环境策略;证据怎样随 Registry 复制、保留和恢复;身份撤销或信任根轮换后,旧制品为什么不能继续进入生产。这条链路必须能正向放行,也必须能稳定拒绝错误摘要、错误构建器、错误身份、过期声明和缺失证据。
先建立共同的证据坐标
进入具体工具前,先用供应链证据模型与工具选型区分 subject、predicate、producer、verifier、trust root 与 policy。它们不是同一个“安全报告”的不同字段,而是由不同主体生产、在不同时间验证、承担不同责任的运行对象。主体必须固定到 digest,证据必须声明自己的类型,验证器必须知道预期身份和信任根,策略结果还要绑定版本、环境与例外期限。
SLSA Provenance 与构建等级把构建控制转成可核对属性;in-toto Statement、Attestation 与 Layout继续解释声明、签名封装、步骤材料、产物连续性和阈值授权。若构建过程本身仍能从公网临时取包、共享跨租户缓存或受本地时钟影响,则要回到Hermetic 与 Reproducible Builder,用断网构建和独立双构建证明输入边界。
签名系统不是一条命令
Sigstore Cosign 签名与验证从 OCI 与 blob 的摘要签名开始,逐步接入 keyless、KMS、bundle、身份约束和声明验证。Fulcio、Rekor 与 Sigstore 信任服务展开 OIDC 身份、短期证书、透明日志、checkpoint、TUF 信任根和私有部署之间的依赖。公有服务减少自建成本,也会把身份和制品元数据放进长期透明证据;私有部署减少外部披露,却把 CA、日志、时间戳、根分发、备份和轮换责任交还团队。
Notation 与 Notary Project提供另一条 OCI 签名和插件扩展路径,重点是 trust store、trust policy、签名身份和插件权限。TUF 更新框架与仓库信任则处理更新仓库的版本、新鲜度、角色阈值与委派问题。二者都使用“信任”这个词,却不能把 Notation 的签名验证、TUF 的角色阈值和 TLS 传输保护混成一层。
让组件与漏洞结论可以被机器消费
SPDX 与 CycloneDX SBOM说明组件身份、关系、许可、命名空间和制品摘要怎样组合成可交换清单。SBOM 可以支撑依赖检索、许可治理和事件影响分析,但不能自动证明组件无漏洞、构建来源可信或许可义务已经履行。
VEX、OpenVEX 与 CSAF把“这个漏洞是否影响这份制品”变成带产品身份、状态、理由、缓解措施和有效期的声明。not_affected 不是永久豁免;产品匹配、声明发布者、证据理由和复审期限任何一项失真,都会把真实漏洞从门禁中错误抹去。
证据必须随制品一起活下去
GUAC 与 Grafeas 供应链证据图谱负责摄取、规范化和查询跨工具证据。图谱能回答某个构建器、组件或漏洞影响哪些制品,却不自动替代每类证据的验签和授权判断;冲突声明也必须保留来源,不能压成一个失去上下文的布尔值。
OCI Referrers 与 Registry 证据保留把关注点落回存储:subject、artifact manifest 和 Referrers API 怎样发现关联证据,旧 Registry 如何回退,复制和 GC 为什么可能只保留镜像而丢掉签名、SBOM 与 Attestation。备份成功的判断应是“完整证据闭包可恢复并复验”,不是“Tag 数量相同”。
把平台能力接进真实流水线
GitHub Artifact Attestations展示托管工作流如何利用 OIDC 和平台身份签出 Provenance,并由消费者按摘要、仓库、owner、工作流和 predicate 约束验证。Tekton Chains将同一思路带到 Kubernetes 原生流水线,通过 TaskRun、PipelineRun、结果、签名器和存储后端生成证据。平台代为签出声明,不代表任意 Workflow 或 Task 自动成为可信构建器,授权边界仍要由团队明确。
Ratify 制品验证框架负责发现证据、选择验证器并汇总策略结果。它不是 Kubernetes 准入控制器;真正阻断还依赖 Gatekeeper 等上层执行点。验证服务不可用时选择 fail-open 还是 fail-closed,会直接决定供应链故障是变成安全旁路,还是变成集群控制面不可用,必须带着 break-glass 和补验账本一起设计。
从门禁走向长期治理
供应链验证策略与环境晋级把摘要、构建身份、Provenance、SBOM/VEX、阈值与例外组成环境门禁。开发、预发和生产可以使用不同严格度,但晋级必须消费同一摘要;若每个环境重新构建,就需要证明产物等价,而不能沿用前一环境的验证结论。
供应链可观测与事件响应把构建、签名、透明日志、Registry、验证和部署事件关联起来。发生密钥泄露、构建器污染或恶意依赖事件时,先固定摘要和身份,再通过证据图计算爆炸半径、撤销策略、隔离消费者并用干净构建器重建,避免直接删 Tag 破坏调查证据。
信任根轮换、离线恢复与安全退出收束整个生命周期。在线验证服务可以快速刷新根与撤销状态,隔离网络中的验证者只能依赖预取的 bundle、checkpoint 和可信根;轮换必须安排旧新根共存、历史证据验证、离线刷新、回滚演练和旧服务核销。平台退出的完成标志不是服务停机,而是旧签发路径、旧凭证、旧策略、残留数据和持续费用都能被证明已经失效。
