3. Sigstore 工作流:密钥生成、签名、验证、审计全链路解析

Sigstore 的核心价值在于将软件供应链的签名与验证从“高门槛、弱审计”转变为“零密钥管理、全链路可审计”。本章深入拆解 Sigstore 工作流的四个关键阶段:密钥生成、签名、验证与审计,并揭示每个阶段在云原生冷启动场景下的资源消耗特征。

3.1 全链路工作流总览

Sigstore 工作流以 Fulcio(证书颁发机构)、Rekor(透明日志)和 Cosign(客户端工具)三大组件为核心,形成一条从身份绑定到永久审计的闭环链路。

Sigstore 全链路工作流:密钥生成 → 签名 → 验证 → 审计 阶段 1:密钥生成 OIDC 身份令牌 → 临时密钥对 阶段 2:签名 Cosign 签名 → 生成签名 + 证书 阶段 3:验证 证书链验证 + Rekor 查询 阶段 4:审计 透明日志 不可篡改 核心组件交互 • Fulcio(CA):基于 OIDC 身份签发短期 X.509 证书,绑定用户身份与公钥 • Rekor(透明日志):存储签名元数据,提供不可篡改的审计线索 • Cosign(客户端):执行签名与验证操作,与 OCI 仓库深度集成 冷启动削峰关键路径 1. OIDC 令牌获取(网络延迟 + 身份提供商限流) 2. Fulcio 证书签发(CA 侧并发处理能力) 3. Rekor 日志写入(透明日志吞吐瓶颈) 4. 验证时 Rekor 查询(日志检索延迟)

3.2 密钥生成:临时密钥与 OIDC 身份绑定

Sigstore 采用临时密钥对模型,摒弃传统长期密钥管理。每次签名操作都会生成新的密钥对,私钥仅存于内存,签名完成后立即销毁。

3.2.1 密钥生成流程

  1. OIDC 身份获取:开发者/CI 系统向身份提供商(GitHub、Google、Microsoft 等)请求身份令牌。
  2. 临时密钥对生成:Cosign 在本地生成 ECDSA P-256 密钥对(私钥 + 公钥)。
  3. 证书签名请求(CSR):Cosign 将公钥与 OIDC 令牌封装为 CSR,发送至 Fulcio。
  4. Fulcio 签发证书:Fulcio 验证 OIDC 令牌有效性,签发短期 X.509 证书(有效期通常为 10 分钟)。
  5. 私钥销毁:签名完成后,私钥从内存中安全清除。

冷启动削峰要点:OIDC 令牌获取是典型的网络 I/O 密集型操作。在大量 Pod 同时启动的场景下,身份提供商可能触发限流。建议在集群级别实现 OIDC 令牌缓存,或使用预取机制减少并发请求。

3.3 签名:Cosign 签名与证书嵌入

Cosign 将生成的证书与签名一并存储在 OCI 仓库中,形成“签名 + 证书”的捆绑结构,使验证方无需额外获取公钥。

3.3.1 签名命令与资源消耗

# 标准签名命令
cosign sign --key azurekms://myvault/mykey <image>

# 使用密钥less 模式(推荐)
cosign sign <image>
签名模式 密钥管理 冷启动延迟 网络请求数 适用场景
密钥less(OIDC + Fulcio) 零密钥管理 中(2-5 次网络交互) 3(OIDC + Fulcio + Rekor) CI/CD、临时环境
本地密钥 需管理私钥 低(1 次网络交互) 1(仅 Rekor) 离线签名、合规要求
KMS 密钥 云厂商托管 高(KMS API 延迟) 2(KMS + Rekor) 企业级密钥管控

3.4 验证:证书链验证与 Rekor 查询

验证阶段是冷启动场景下资源消耗最集中的环节。验证方需要完成证书链信任验证、签名有效性校验以及 Rekor 日志查询。

3.4.1 验证流程分解

  1. 提取签名与证书:从 OCI 仓库的镜像标签或附件中获取 .sig 和 .cert 文件。
  2. 证书链验证:验证证书是否由 Fulcio 根 CA 签发,检查证书有效期与 OIDC 身份声明。
  3. 签名验证:使用证书中的公钥验证镜像摘要的签名。
  4. Rekor 查询:查询透明日志,确认签名条目已被记录且未被篡改。
  5. 策略评估:根据组织策略(如身份白名单、证书颁发者)决定是否放行。

冷启动削峰警告:Rekor 查询是验证阶段的主要瓶颈。默认情况下,每次验证都需要查询 Rekor 公共实例,网络延迟可达 200-500ms。在集群冷启动时,数千个 Pod 同时验证将导致 Rekor 实例过载。建议部署本地 Rekor 镜像或使用缓存层。

3.5 审计:透明日志与不可篡改证据

Rekor 透明日志是 Sigstore 审计能力的基石。每次签名操作都会生成一个 Merkle 树叶子节点,包含签名元数据、证书指纹和时间戳。

3.5.1 审计数据结构

{
  "apiVersion": "0.0.1",
  "spec": {
    "signature": {
      "content": "MEUCIQ...",
      "publicKey": {
        "content": "LS0t...",
        "hash": {
          "algorithm": "sha256",
          "value": "a1b2c3..."
        }
      }
    },
    "signedEntryTimestamp": "2024-01-15T10:30:00Z",
    "integratedTime": 1705312200,
    "logIndex": 12345678
  }
}

3.5.2 审计查询方式

查询方式 命令/工具 延迟特征 冷启动影响
Rekor 公共 API rekor-cli get --log-index 高(200-500ms) 严重(公共实例限流)
Rekor 本地镜像 自建 Rekor 实例 低(10-30ms) 可控(集群内网络)
Merkle 树验证 cosign verify 内置 中(50-100ms) 中等(计算密集型)

3.6 全链路资源消耗对比

下表总结了 Sigstore 工作流各阶段在冷启动场景下的资源消耗特征,帮助 SRE 团队定位削峰优化点。

阶段 CPU 消耗 内存消耗 网络 I/O 延迟敏感度 削峰策略
密钥生成 低(ECDSA 生成) 低(~1MB) 高(OIDC + Fulcio) 高 OIDC 令牌缓存、Fulcio 连接池
签名 中(哈希计算) 低(~2MB) 中(Rekor 写入) 中 异步签名、批量提交
验证 中(证书解析 + 签名验证) 中(~5MB) 高(Rekor 查询) 极高 本地 Rekor 镜像、验证缓存
审计 低(日志查询) 低(~1MB) 中(Rekor API) 低 离线审计、日志归档
冷启动场景:Sigstore 验证阶段延迟分解(单次验证) 证书链验证 120ms 签名验证 80ms Rekor 查询(公共实例) 300ms 策略评估 100ms 总延迟:~600ms(其中 Rekor 查询占 50%) 证书链验证 120ms 签名验证 80ms 缓存命中 60ms 策略评估 100ms 优化后总延迟:~360ms(降低 40%,通过本地 Rekor 缓存实现) 削峰优化建议 • 部署本地 Rekor 镜像,将查询延迟从 300ms 降至 10-30ms • 实现验证结果缓存(TTL 根据策略调整),避免重复查询

3.7 全链路审计最佳实践

SRE 冷启动检查清单:

  • 在集群内部署 Rekor 只读镜像,减少对外部公共实例的依赖。
  • 为 Fulcio 和 Rekor 配置连接池,避免冷启动时大量 TCP 连接建立。
  • 使用 cosign verify 的 --certificate-identity 和 --certificate-oidc-issuer 参数缩小验证范围,减少策略评估开销。
  • 定期审计 Rekor 日志,验证签名条目的一致性与完整性。

理解 Sigstore 工作流的全链路资源消耗模式,是实施冷启动削峰的前提。下一阶段将深入探讨如何通过资源配额调优,在保证安全性的同时最大化集群启动效率。