Sigstore 核心组件:Fulcio、Rekor、Cosign 架构解析

Sigstore 并非单一工具,而是一套由三个核心组件构成的开放签名基础设施。理解 Fulcio(证书颁发机构)、Rekor(透明日志)和 Cosign(签名工具)的协作关系,是掌握镜像供应链冷启动削峰的前提。本章从架构视角拆解每个组件的职责、交互流程与性能关键点。

组件职责总览

组件 角色 核心产出 冷启动影响
Fulcio 证书颁发机构(CA) 短期 X.509 签名证书 OIDC 令牌交换 + 证书签发延迟
Rekor 透明日志(Transparency Log) 签名元数据的 Merkle Tree 证明 日志追加与一致性验证 I/O 开销
Cosign 签名/验证客户端 容器镜像签名 + 策略校验 签名生成与验证阶段的网络往返

Fulcio:短期证书的即时签发架构

Fulcio 的核心设计是消除长期密钥管理。它通过 OIDC(OpenID Connect)协议与身份提供商(如 GitHub、Google、Microsoft)集成,为开发者签发有效期极短(通常 10 分钟)的 X.509 证书。

架构要点: Fulcio 不存储私钥,仅维护 CA 根证书。每次签名请求都触发一次 OIDC 令牌交换,Fulcio 验证令牌后即时签发证书。这种无状态设计降低了密钥泄露风险,但将冷启动延迟转移到了 OIDC 提供商的响应速度上。
Fulcio 证书签发流程 开发者 Cosign CLI OIDC 提供商 GitHub / Google Fulcio CA 短期证书签发 ① 请求 OIDC 令牌 ② 返回身份令牌 ③ 提交令牌 + 公钥 ④ 返回短期 X.509 证书 性能关键点 • 步骤①-②:OIDC 提供商响应时间(通常 200-800ms) • 步骤③-④:Fulcio 证书签发(通常 <50ms) • 证书有效期短(10min),减少吊销检查开销

Rekor:不可篡改的签名审计日志

Rekor 是一个基于 Merkle Tree 的透明日志系统,所有签名元数据(包括证书、签名值、镜像摘要)都会被追加到日志中。Rekor 不存储镜像本身,只存储签名证明,确保任何签名行为都可被公开审计。

冷启动削峰视角: Rekor 的日志追加操作是 I/O 密集型任务。在镜像大规模发布场景下,Rekor 实例的写入吞吐量可能成为瓶颈。建议使用高性能存储(如 NVMe SSD)并启用批量写入模式。

Cosign:签名与验证的客户端引擎

Cosign 是 Sigstore 的 CLI 工具,负责执行实际的签名生成和验证操作。它协调 Fulcio 和 Rekor 的调用,并将签名结果附加到容器镜像的 OCI 制品中。

操作 Cosign 命令 涉及组件 性能敏感点
签名 cosign sign Fulcio + Rekor OIDC 令牌获取 + 证书签发 + 日志追加
验证 cosign verify Rekor + 公钥/证书 日志一致性验证 + 证书链校验
附加签名 cosign attach 镜像仓库 OCI 制品上传延迟
策略校验 cosign verify-attestation Rekor + 策略引擎 断言解析 + 策略匹配

三组件协作流程

一次完整的 Sigstore 签名操作遵循以下步骤,理解这个流程有助于定位冷启动阶段的性能瓶颈。

  1. 身份认证: Cosign 通过 OIDC 协议向身份提供商请求令牌,开发者无需管理长期密钥。
  2. 证书签发: Cosign 将 OIDC 令牌和生成的公钥发送给 Fulcio,Fulcio 验证后返回短期 X.509 证书。
  3. 签名生成: Cosign 使用证书中的私钥对镜像摘要进行签名,生成签名载荷。
  4. 日志记录: Cosign 将签名载荷、证书和镜像摘要提交给 Rekor,Rekor 追加到 Merkle Tree 并返回日志索引。
  5. 制品附加: Cosign 将签名和日志证明作为 OCI 制品附加到镜像仓库中。
Sigstore 三组件协作流程 Cosign 签名客户端 OIDC 提供商 身份认证 Fulcio 证书颁发 Rekor 透明日志 镜像仓库 OCI 制品存储 ① 请求证书 ② 记录签名 ③ 附加签名 ④ 验证身份 ⑤ 获取令牌 冷启动削峰关注点 • 步骤①-⑤ 涉及 3 次网络往返,总延迟约 500ms-2s • 步骤②(Rekor 日志追加)是 I/O 瓶颈,建议预分配连接池

性能调优关键指标

组件 关键指标 冷启动阈值 优化方向
Fulcio 证书签发延迟 > 200ms OIDC 令牌缓存、CA 预生成证书池
Rekor 日志追加延迟 > 500ms 批量写入、异步日志提交、SSD 存储
Cosign 签名生成延迟 > 1s 连接复用、并行签名、跳过 Rekor(keyless 模式)
整体 端到端签名延迟 > 3s 预热连接、预加载 OIDC 令牌、本地签名缓存
注意: 在冷启动场景下,Rekor 的首次日志追加可能因 Merkle Tree 初始化而额外增加 1-2 秒延迟。建议在生产环境中保持 Rekor 实例的常驻连接池,避免每次签名都重建 gRPC 连接。