2. Sigstore 核心组件解析:Cosign、Fulcio、Rekor 及其协同机制

Sigstore 并非单一工具,而是一套由三个核心组件构成的开放签名基础设施。在 API 延迟诊断场景中,理解这三个组件的职责与协作关系,是构建可观测标签体系与策略即代码(Policy-as-Code)断言的前提。本节将逐一解析 Cosign、Fulcio 和 Rekor,并通过架构图与表格阐明其协同工作流。

2.1 组件总览与职责对比

组件 全称 / 类型 核心职责 在延迟诊断场景中的角色
Cosign 签名 & 验证客户端 对容器镜像、Blob、文档等工件进行签名与验证;支持密钥对、密钥管理服务(KMS)及硬件安全模块(HSM) 为延迟诊断的 API 契约(如 OpenAPI 规范、延迟 SLO 定义文件)生成签名,并附加可观测标签
Fulcio 证书颁发机构(CA) 基于 OIDC(OpenID Connect)身份签发短期 X.509 证书,将用户/工作负载身份绑定到公钥 为诊断流水线中的服务身份(如 Kubernetes ServiceAccount、GitHub Actions Workflow)签发临时证书,确保证明链可审计
Rekor 透明日志(Transparency Log) 不可篡改的签名事件账本,记录所有签名元数据与证书信息,支持后续审计与验证 存储延迟诊断策略的签名记录,提供全局可观测的签名时间戳与证书指纹,用于事后取证与合规报告
关键概念: Sigstore 的“无密钥”签名模式并非真的没有密钥,而是通过 Fulcio 签发的短期证书替代传统长期密钥管理,降低密钥泄露风险。在延迟诊断场景中,这意味着每次策略签名都可以绑定到具体的 CI/CD 执行上下文。

2.2 Cosign:签名与验证的执行者

Cosign 是 Sigstore 生态中最贴近用户的前端工具。它支持对多种工件类型进行签名,并将签名结果以 OCI(Open Container Initiative)制品的形式存储在容器镜像仓库中,或作为独立附件存储。

2.2.1 核心操作流程

  1. 签名(Sign): 用户指定目标工件(如 my-api-spec.yaml),Cosign 调用 Fulcio 获取短期证书,使用私钥对工件摘要进行签名,并将签名与证书一并上传至 Rekor。
  2. 验证(Verify): 验证方从 Rekor 获取签名记录,使用 Fulcio 证书链验证签名有效性,同时检查证书是否在有效期内且未被吊销。
  3. 附加标签(Attach): Cosign 支持通过 --attachment-tag-prefix 参数为签名附加自定义标签,这些标签可直接映射为可观测性指标中的维度。
延迟诊断场景示例:
# 对延迟 SLO 策略文件进行签名,并附加环境与版本标签
cosign sign --attachment-tag-prefix "diagnosis-latency-slo" \
  --oidc-issuer "https://.actions.githubusercontent.com" \
  my-registry/latency-policies:v1.2.3

# 验证签名并提取标签
cosign verify --attachment-tag-prefix "diagnosis-latency-slo" \
  my-registry/latency-policies:v1.2.3

2.3 Fulcio:基于 OIDC 的身份证书颁发

Fulcio 消除了传统 PKI(公钥基础设施)中繁琐的证书申请与续期流程。它通过 OIDC 协议信任来自 GitHub、GitLab、Google、Microsoft 等身份提供者的 ID ,并据此签发符合 X.509 v3 标准的短期证书(通常有效期为 10 分钟)。

  • 证书内容: 证书中包含用户的 OIDC 身份信息(如 email、sub)、公钥、以及 Fulcio 的根 CA 签名。
  • 安全边界: 短期证书过期后即使私钥泄露,攻击者也无法伪造历史签名。这符合延迟诊断场景中“最小权限”与“临时凭证”的安全原则。
  • 审计字段: 证书的 Subject Alternative Name(SAN)字段可直接作为可观测标签中的 identity 维度,用于追踪哪个服务或流水线发起了策略签名。

2.4 Rekor:不可篡改的签名账本

Rekor 透明日志是 Sigstore 信任链的基石。所有签名事件(包括签名哈希、证书、签名时间戳)都会被追加到 Merkle 树结构中,任何人都可以查询和验证日志的完整性。

Rekor 条目字段 说明 可观测标签映射
Body 签名事件的原始内容(Base64 编码),包含工件哈希与签名值 signature_hash
IntegratedTime 条目被写入日志的 Unix 时间戳 signing_timestamp
LogIndex 条目在 Merkle 树中的唯一索引 rekor_log_index
Attestation 可选的附加声明(如 DSSE 信封),用于携带策略元数据 policy_attestation
注意: Rekor 是公开可查询的(默认使用公共实例 rekor.sigstore.dev)。对于敏感的内部延迟诊断策略,建议部署私有 Rekor 实例或使用 --no-rekor 标志(但会降低审计能力)。

2.5 协同工作流:从签名到验证的完整链路

下图展示了 Cosign、Fulcio 和 Rekor 在 API 延迟诊断策略签名场景中的完整交互流程。

Sigstore 核心组件协同工作流 - 延迟诊断策略签名 Sigstore 核心组件协同工作流(延迟诊断策略签名) 用户 / CI 流水线 (GitHub Actions / GitLab CI) Cosign 签名 & 验证客户端 Fulcio OIDC 证书颁发机构 Rekor 透明日志 OCI 镜像仓库 存储签名 & 策略 1. 发起签名请求 2. 请求 OIDC 证书 3. 返回短期证书 4. 上传签名记录 5. 存储签名 + 标签 验证时查询 说明:虚线箭头表示验证阶段的查询路径;实线箭头表示签名阶段的请求路径。所有交互均通过 HTTPS 进行。

2.6 协同工作的关键时序与数据流

上述架构图展示了五个核心步骤,下面以表格形式细化每一步的数据流与安全属性:

步骤 发起方 接收方 传输数据 安全属性
1. 发起签名请求 用户/CI Cosign 工件路径、OIDC ID 、签名参数 mTLS(若启用)
2. 请求 OIDC 证书 Cosign Fulcio ID 、公钥、挑战值 OIDC 令牌验证、短期凭证
3. 返回短期证书 Fulcio Cosign X.509 证书(含 SAN、有效期、Fulcio 签名) 证书链验证、10 分钟有效期
4. 上传签名记录 Cosign Rekor 工件哈希、签名值、证书、可选声明 Merkle 树追加、不可篡改
5. 存储签名 + 标签 Cosign OCI 仓库 签名附件、可观测标签(如 env=prod) 仓库访问控制、标签不可变性

2.7 在延迟诊断场景中的协同价值

将 Sigstore 三组件应用于 API 延迟诊断,可以实现以下可观测性增强:

  • 不可抵赖的签名时间戳: Rekor 的 IntegratedTime 字段可作为延迟 SLO 策略生效时间的权威证据,避免“策略何时部署”的争议。
  • 身份与策略绑定: Fulcio 证书中的 OIDC 身份信息可直接映射为 Prometheus 标签(如 signed_by="team-alpha"),用于按团队聚合延迟违规事件。
  • 自动化策略验证: 在 CI/CD 流水线中集成 Cosign verify 步骤,确保只有经过签名的延迟策略文件才能被加载到诊断引擎中,防止配置篡改。
  • 审计与合规: Rekor 的透明日志为安全团队提供全局可查询的签名事件视图,满足 SOC2、PCI-DSS 等合规要求中的“变更审计”控制点。
实践建议: 在部署 Sigstore 时,建议将 Cosign 的 --attachment-tag-prefix 与 Rekor 的 --rekor-url 参数通过环境变量注入,以便在可观测性平台中统一采集 sigstore_* 指标。例如:
export COSIGN_ATTACHMENT_TAG_PREFIX="diagnosis-latency-slo"
export REKOR_URL="https://rekor.internal.example.com"