Sigstore镜像签名API集成与信任验证 - 第1节

1.1 Sigstore 项目背景与供应链安全现状

软件供应链攻击在过去三年内增长了超过 600%,攻击者不再直接攻击生产环境,而是将恶意代码注入到上游依赖、构建流水线或镜像仓库中。2021 年的 SolarWinds 事件与 Codecov 事件表明:传统基于“信任网络”的边界模型在分布式、多参与方的现代交付链中已完全失效。

Sigstore 项目由 Google、Red Hat、Purdue 大学等联合发起,于 2021 年 3 月进入 CNCF Sandbox,2023 年晋升为 CNCF Graduated 项目。其核心目标是为软件供应链提供一套 免费、开放、透明 的签名与验证基础设施,消除传统 PKI 中密钥管理的复杂性。

关键数据: 截至 2024 年底,Sigstore 已累计处理超过 1000 万次签名,被 Kubernetes、npm、PyPI、Maven 等主流生态集成。

1.1.1 供应链安全现状对比

维度 传统模式 Sigstore 模式
密钥管理 自建 CA、HSM、密钥轮换复杂 无密钥(Keyless)或临时密钥
身份绑定 基于 X.509 证书,依赖信任锚 基于 OIDC 身份(GitHub/GitLab/Email)
透明度 无公开审计日志 Rekor 透明日志,全局可审计
验证成本 高(证书链、CRL、OCSP) 低(单条 CLI 命令或 API 调用)
镜像签名 Docker Content Trust(DCT) Cosign + OCI 制品签名

1.2 信任边界概念

在云原生镜像供应链中,信任边界 是指从一个可信实体(如开发者、构建系统、镜像仓库)到另一个实体之间,数据与元数据在传递过程中不被篡改、身份不被冒用的安全分界。传统信任边界依赖“网络边界”(VPN、防火墙),而现代信任边界必须建立在 密码学可验证 的基础上。

1.2.1 镜像供应链中的信任边界模型

下图展示了从代码提交到生产部署的完整信任边界链,以及 Sigstore 在每个边界点提供的保护机制:

镜像供应链信任边界与 Sigstore 保护点 开发者 OIDC 身份 代码仓库 GitHub/GitLab CI/CD 流水线 GitHub Actions 镜像仓库 Docker Hub / GCR Sigstore 保护层:Cosign 签名 + Rekor 透明日志 + Fulcio 证书 每个边界点都通过 OIDC 身份绑定与密码学签名建立可验证信任 信任边界 1:代码→仓库 信任边界 2:仓库→CI 信任边界 3:CI→镜像 信任边界 4:镜像→部署 每个信任边界都对应一个 Sigstore 接口调用: cosign sign → rekor upload → cosign verify → policy-controller 准入控制

1.3 课程目标与学习路径

1.3.1 课程目标

完成本课程后,你将能够:

  • 理解 Sigstore 三大组件(Cosign、Fulcio、Rekor)的工作原理与交互流程
  • 掌握 使用 Cosign 对 OCI 镜像进行 Keyless 签名与验证的完整命令与 API 调用
  • 实现 在 GitHub Actions 中集成 Sigstore 签名流水线,自动生成并验证签名
  • 构建 基于 Policy Controller 的镜像准入控制策略,在 Kubernetes 集群中强制验证信任边界
  • 调试 常见的签名失败、证书过期、透明日志查询等生产问题

1.3.2 学习路径与章节结构

阶段 章节范围 核心产出
基础篇 第 1-4 章 理解 Sigstore 架构,完成本地 Keyless 签名与验证
接口实战篇 第 5-12 章 掌握 Cosign CLI、Rekor API、Fulcio 证书请求的完整调用
流水线集成篇 第 13-20 章 在 GitHub Actions、GitLab CI、Jenkins 中集成签名流水线
策略与治理篇 第 21-26 章 部署 Policy Controller,编写 CUE/Rego 策略,实现集群级准入控制
进阶与排错篇 第 27-30 章 多仓库签名策略、离线验证、透明日志审计、常见故障排查

1.3.3 推荐学习方式

学习建议: 每章都包含一个可运行的实战案例。建议在本地或临时云环境中准备一个 Kubernetes 集群(minikube 或 kind 均可),并安装 Cosign CLI(v2.0+)和 OCI 兼容的镜像仓库(如 Docker Hub 或 GitHub Container Registry)。跟随每章的代码块逐行执行,效果最佳。

1.4 Sigstore 核心组件架构

Sigstore 由三个核心服务组成,它们共同构成了一个 无密钥签名基础设施:

  • Cosign:签名与验证客户端,支持容器镜像、Blob、SBOM、Attestation 等多种制品类型
  • Fulcio:基于 OIDC 的短期证书颁发机构,为每个签名请求签发 X.509 证书
  • Rekor:不可变透明日志,记录所有签名元数据,提供全局可审计性

下图展示了这三个组件在一次典型 Keyless 签名流程中的交互关系:

Sigstore Keyless 签名组件交互架构 用户 / CI 流水线 cosign sign Cosign 签名 / 验证客户端 Fulcio 证书颁发机构 Rekor 透明日志 OIDC Provider GitHub / Google 1. 签名请求 2. 请求证书 3. OIDC 令牌 4. 返回证书 5. 上传签名 完整流程:用户触发签名 → Cosign 通过 OIDC 获取身份令牌 → Fulcio 签发短期证书 → Cosign 对镜像签名并将签名记录上传至 Rekor → 验证方通过 Rekor 查询签名

1.5 课程前置准备

在开始后续章节的实战之前,请确保你的环境满足以下最低要求:

工具/组件 最低版本 验证命令
Cosign CLI v2.2.0+ cosign version
Docker / Podman Docker 24+ / Podman 4+ docker --version
Kubernetes 集群 v1.28+ kubectl version --short
OpenSSL v3.0+ openssl version
GitHub 账号 (用于 OIDC 认证) —
注意: 如果你使用 Windows 环境,建议通过 WSL2 或 Docker Desktop 的 Linux 容器模式运行所有命令。Cosign 在原生 Windows 下的 OIDC 重定向流程可能存在兼容性问题。