Sigstore 核心组件:Fulcio、Rekor、Cosign 的架构与职责
Sigstore 并非单一工具,而是一套由三个核心组件构成的开放签名基础设施。理解 Fulcio、Rekor 和 Cosign 各自的职责与协作方式,是掌握镜像签名验证流程的关键。这三个组件分别承担了证书颁发、透明日志记录和签名操作的角色,共同实现了无需管理私钥的软件供应链安全。
组件职责总览
| 组件 | 全称 | 核心职责 | 关键输出 |
|---|---|---|---|
| Fulcio | 证书颁发机构 | 基于 OIDC 身份签发短期证书 | X.509 签名证书(有效期通常为 10 分钟) |
| Rekor | 透明日志 | 不可篡改地记录签名元数据 | 日志条目索引、签名时间戳(Signed Entry Timestamp) |
| Cosign | 签名与验证工具 | 执行签名、验证、存储操作 | 镜像签名、验证结果、策略断言 |
Fulcio:基于 OIDC 的证书颁发机构
Fulcio 是 Sigstore 的证书颁发机构(CA),它解决了传统 PKI 中私钥管理的痛点。开发者无需生成和保管长期私钥,而是通过 OIDC(OpenID Connect)身份提供商(如 GitHub、Google、Microsoft)进行身份认证,Fulcio 据此签发短期有效的 X.509 证书。
- 身份绑定:Fulcio 验证 OIDC 中的身份信息(如邮箱、用户名),并将其嵌入证书的 Subject Alternative Name(SAN)字段。
- 短期证书:默认证书有效期仅为 10 分钟,极大降低了私钥泄露的风险窗口。
- 无状态设计:Fulcio 不存储证书状态,依赖 Rekor 日志提供证书存在的公开证明。
架构要点:Fulcio 的证书签发流程完全在线,每次签名操作都会触发一次 OIDC 认证和证书签发。这意味着在冷启动场景下,Fulcio 的可用性和响应延迟直接影响签名流程的启动时间。
Rekor:不可篡改的透明日志
Rekor 是 Sigstore 的透明日志系统,它充当了签名事件的公开账本。每次签名操作产生的元数据(包括证书、签名、镜像摘要等)都会被提交到 Rekor 日志中,形成一条可审计、可验证的记录。
- 日志结构:基于 Merkle Tree 实现,支持高效的一致性证明和包含性证明。
- 签名时间戳(SET):Rekor 为每个日志条目签发 Signed Entry Timestamp,证明该条目在特定时间点已被记录。
- 公开可查:任何人都可以查询 Rekor 日志,验证某个签名是否在特定时间存在。
冷启动关联:在镜像签名验证的冷启动阶段,验证方需要查询 Rekor 日志来获取签名元数据。Rekor 的查询延迟和日志同步状态,是影响验证冷启动性能的关键因素之一。
Cosign:签名与验证的操作枢纽
Cosign 是 Sigstore 的命令行工具和库,它封装了与 Fulcio、Rekor 的交互逻辑,为开发者提供了简洁的签名、验证和存储接口。Cosign 是整个 Sigstore 生态中用户直接接触的组件。
- 签名操作:自动触发 OIDC 认证、向 Fulcio 请求证书、对镜像进行签名、将签名元数据提交到 Rekor。
- 验证操作:从镜像仓库获取签名、查询 Rekor 日志验证签名时间戳、验证证书链。
- 密钥管理:支持密钥对模式(传统方式)和密钥less 模式(通过 Fulcio 签发短期证书)。
- 策略引擎:支持基于 CUE 或 Rego 的验证策略,实现细粒度的准入控制。
三组件协作流程
下图展示了 Sigstore 三个核心组件在镜像签名与验证过程中的协作关系:
组件职责对比
下表从多个维度对比三个核心组件的职责差异,帮助理解它们在签名生命周期中的角色定位:
| 对比维度 | Fulcio | Rekor | Cosign |
|---|---|---|---|
| 生命周期 | 签名前(证书签发) | 签名后(日志记录) | 签名中(操作执行) |
| 状态管理 | 无状态 | 有状态(Merkle Tree) | 无状态(工具层) |
| 安全假设 | 信任 OIDC Provider | 信任日志的不可篡改性 | 信任本地操作环境 |
| 冷启动影响 | 证书签发延迟 | 日志查询延迟 | 工具初始化延迟 |
| 扩展性 | 水平扩展(无状态) | 分片扩展(日志分片) | 客户端扩展(CLI/SDK) |
冷启动视角下的组件依赖
在镜像安全冷启动削峰场景中,三个组件的依赖关系直接影响启动延迟:
- 签名冷启动:Cosign 启动后,首先需要与 Fulcio 通信完成 OIDC 认证和证书签发,然后才能执行签名操作。Fulcio 的响应延迟是签名冷启动的主要瓶颈。
- 验证冷启动:验证方需要从镜像仓库获取签名,然后查询 Rekor 日志验证签名时间戳。Rekor 的查询延迟和日志同步状态是验证冷启动的关键因素。
- 缓存策略:在削峰设计中,可以考虑缓存 Fulcio 签发的短期证书(在有效期内复用)和 Rekor 的查询结果,以减少重复的网络开销。
注意:Fulcio 签发的证书有效期极短(10 分钟),缓存策略需要精确控制过期时间。Rekor 日志的查询结果(SET)可以缓存更长时间,因为日志条目一旦写入就不可更改。
组件部署模式
Sigstore 支持多种部署模式,以适应不同的安全需求和网络环境:
- 公共实例:由 Sigstore 社区维护的公共 Fulcio 和 Rekor 实例,适合开源项目和快速原型开发。
- 私有部署:企业可以在内部部署私有 Fulcio 和 Rekor 实例,实现完全的控制权和数据隔离。
- 离线模式:在无法访问公共实例的环境中,可以使用 Cosign 的密钥对模式,绕过 Fulcio 和 Rekor 的依赖。