Cosign GitHub Action:如何为 DevOps 自动化软件供应链安全

⭐ 194

`sigstore/cosign-installer` 是一款专为自动化安装和配置 Sigstore 项目签名工具 Cosign 而设计的 GitHub Action。其核心功能是将来源与完整性的加密证明直接嵌入到托管于 GitHub 的持续集成与交付(CI/CD)流水线中。开发者只需在工作流 YAML 文件中引用此 Action,它便会自动获取正确的 Cosign 二进制文件、设置必要的环境变量,并为后续的签名或验证命令准备好系统环境。

这种自动化解决了现代 DevOps 中的一个显著痛点:采用必要安全实践时所面临的阻力。在无数流水线中手动管理 Cosign 版本、依赖项和密钥材料,不仅繁琐且容易出错。cosign-installer 通过将这一过程抽象为一个简单的、可复用的工作流步骤,消除了这种摩擦。它确保了跨所有构建环境的一致且可验证的工具设置,这是实现端到端供应链安全的基础。

该 Action 的采用标志着开发范式的转变,安全从一项独立的事后检查,转变为内嵌于开发工作流本身的固有属性。通过降低采用门槛,它使更多团队——从初创公司到大型企业——能够实践‘签名即代码’,为每个构建产物创建防篡改的审计线索。这直接响应了日益增长的监管要求和行业倡议,如 SLSA(供应链级别软件制品)框架和 OpenSSF 的号召,即通过自动化‘将安全左移’。

技术深度解析

`cosign-installer` Action 在 GitHub Actions 运行器环境与 Cosign CLI 之间充当中间件层。其架构刻意保持极简,专注于单一职责:可靠地提供工具。当工作流作业执行一个使用 `uses: sigstore/cosign-installer@v3` 的步骤时,GitHub Actions 运行时会从仓库中获取该 Action 的代码。其核心逻辑用 JavaScript/TypeScript 编写,并打包为 Docker 容器或 Node.js 应用程序,执行几个关键操作。

首先,它解析请求的 Cosign 版本。用户可以固定特定版本(例如 `v2.2.0`)或使用像 `latest` 这样的浮动标签。该 Action 会查询 Cosign 的 GitHub Releases 页面或已知的稳定端点,以下载适用于运行器操作系统(Linux、macOS、Windows)和架构的相应二进制文件。随后,它通常会使用随版本发布的校验和来验证下载二进制文件的完整性。最后,它将 Cosign 二进制文件放置到运行器 `PATH` 内的一个目录中,并可能导出环境变量(例如 `COSIGN_EXPERIMENTAL=1` 以启用无密钥签名功能)。整个过程会被 GitHub Actions 缓存,以提高后续工作流的执行速度。

真正的技术威力在后续的工作流步骤中得以释放,开发者此时可以调用现已可用的 `cosign` 命令。对于无密钥签名——这是推荐且最具创新性的模式——该 Action 并不处理密钥管理。相反,当调用 `cosign sign` 时,Cosign 二进制文件会与 Sigstore 公共基础设施交互:Fulcio 用于证书颁发,Rekor 用于透明日志记录,OIDC 提供商(如 GitHub Actions 自身)用于身份认证。cosign-installer 的工作仅仅是确保这个复杂的工具链存在并准备就绪。

一个关键的技术细节在于它对 `COSIGN_EXPERIMENTAL` 环境的处理。无密钥签名虽然现已稳定且被广泛使用,但最初是隐藏在此标志之后的。安装程序可以设置此标志,为开发者铺平道路。此外,对于使用传统基于密钥方法的团队,安装程序有助于设置,但将安全密钥管理(针对私钥)的工作卸载给了 GitHub Secrets 或 HashiCorp Vault 等外部系统,这些密钥是单独注入到环境中的。

| Action 步骤 | 主要功能 | 关键技术交互 |
|---|---|---|
| 版本解析 | 确定获取哪个 Cosign 二进制文件。 | 查询 GitHub API 获取发布信息;支持语义化版本范围。 |
| 二进制文件下载与验证 | 获取并验证 Cosign CLI。 | 从 GitHub Releases 下载;验证 SHA256 校验和。 |
| 路径配置 | 使 `cosign` 命令可用。 | 将二进制文件解压到 `/usr/local/bin` 或添加到运行器 `PATH`。 |
| 环境设置 | 为 Sigstore 流程准备变量。 | 根据需要设置 `COSIGN_EXPERIMENTAL`、`COSIGN_KEY` 等。 |

核心洞见: cosign-installer 的设计是专注实用性的典范。它以高可靠性执行一组狭窄的系统管理任务,而这正是启用后续复杂、加密安全的工作流的关键所在。其价值与其操作足迹成反比。

关键参与者与案例研究

cosign-installer 存在于一个由开源基金会和商业实体共同主导的战略生态系统中。主要参与者是 Sigstore,这是一个最初由来自 Google、Red Hat 和普渡大学的工程师创立的项目,现已成为 开源安全基金会(OpenSSF) 的一部分。Sigstore 提供了底层协议和公共基础设施。Chainguard 是一家由 Dan Lorenc 和 Kim Lewandowski 等 Sigstore 联合创始人创立的公司,已成为领先的商业运营者。Chainguard 提供企业级发行版、支持以及像 `chainctl` 这样的附加工具,同时积极为开源核心做出贡献。其商业模式依赖于让 Sigstore 的采用变得如此简单,以至于大型企业需要他们提供的服务等级协议保证和高级功能。

Cosign 本身在制品签名领域有几个直接竞争对手。Notary v2 是云原生计算基金会(CNCF)的一个项目,旨在提供标准化的签名协议,常与 Cosign 相提并论。Docker Content Trust 使用更新框架(TUF),并已集成到 Docker Engine 中多年,但由于密钥管理的复杂性,采用速度较慢。整个行业格局正在向 Sigstore 的无密钥模式倾斜。

| 解决方案 | 项目/支持者 | 主要模式 | 关键差异化优势 | CI/CD 集成便利性 |
|---|---|---|---|---|
| Cosign (通过 cosign-installer) | Sigstore / OpenSSF (Chainguard) | 无密钥 (OIDC) 与基于密钥 | 深度 GitHub Actions 集成,SBOM 签名,Rekor 透明日志。 | 极佳 (原生 Action) |
| Notary v2 | CNCF | 基于证书(可能支持无密钥) | 旨在成为跨容器注册中心的标准化协议。 | 良好(通过独立工具) |
| Docker Content Trust | Docker (Mirantis) | 基于密钥 (TUF) | 直接集成到 Docker CLI 和守护进程中。 | 中等(需要 Docker 环境) |

案例研究:大规模采用

一个突出的案例是 谷歌云平台(GCP)。谷歌是 Sigstore 的创始成员,并已在其内部构建系统和面向客户的服务(如 Google Kubernetes Engine 和 Artifact Registry)中广泛采用 Cosign。他们利用 cosign-installer 来自动化其开源项目 CI 流水线中的签名步骤,确保所有公开发布的二进制文件和容器镜像都经过签名并记录到 Rekor。这为 GCP 客户建立了强大的信任链。

另一个案例是 金融科技公司,它们受严格合规要求约束。通过将 cosign-installer 集成到其 GitHub Actions 流水线中,这些公司能够自动为每个生产部署构件生成符合审计要求的签名证明。这简化了向监管机构证明软件完整性和来源的过程,将安全合规从手动检查转变为自动化策略执行。

未来展望与挑战

随着软件供应链攻击的激增,像 cosign-installer 这样的自动化工具正从‘锦上添花’变为‘必不可少’。其未来发展方向可能包括:
1. 更智能的版本管理:支持自动安全更新和漏洞扫描已安装的 Cosign 二进制文件本身。
2. 多环境扩展:优化以在自托管运行器、其他 CI/CD 平台(如 GitLab CI、Jenkins)以及本地开发环境中同样流畅地工作。
3. 策略即代码集成:与 Open Policy Agent(OPA)或 Sigstore 自己的策略控制器更深度集成,实现基于签名的自动化部署门控。

主要挑战在于生态系统的碎片化和教育。虽然 cosign-installer 简化了技术设置,但团队仍需理解 Sigstore 模型(如无密钥签名、透明日志)的概念,并将其有效地整合到更广泛的安全与合规框架中。此外,确保 Rekor 日志的长期可验证性和抗审查性,是整个生态系统持续面临的课题。

总之,cosign-installer GitHub Action 是一个强大的赋能器,它通过将加密强制的安全实践无缝编织进开发者熟悉的工作流,显著降低了软件供应链安全的实施门槛。它代表了向‘安全内建’和‘自动化保障’开发文化的关键转变。

常见问题

GitHub 热点“How Cosign GitHub Action is Automating Software Supply Chain Security for DevOps”主要讲了什么?

The sigstore/cosign-installer is a specialized GitHub Action designed to automate the installation and configuration of Cosign, the signature tool from the Sigstore project. Its co…

这个 GitHub 项目在“cosign github action vs manual installation performance”上为什么会引发关注?

The cosign-installer Action operates as a middleware layer between the GitHub Actions runner environment and the Cosign CLI. Its architecture is deliberately minimalistic, focusing on a single responsibility: reliable pr…

从“how to verify cosign signatures in kubernetes after using cosign-installer”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 194,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。