Skip to main content

使用项目证明和可重用工作流来实现 SLSA v1 生成级别 3

使用可重用工作流和项目证明生成软件可以简化供应链安全性,并帮助实现 SLSA v1.0 生成级别 3。

简介

项目证明是为自己构建的软件创建不可伪造的来源和完整性保证的极佳方式。

但请记住,项目证明本身提供了链接,例如生成项目所用的生成说明,这符合 SLSA v1.0 生成级别 2 的要求。 为确保稳妥的风险决策,必须打开这些链接并评估相关生成说明。

可以通过要求使用经过审查的已知生成说明来生成软件,从而进一步完善风险决策。 要执行此操作,最好是让生成工作在组织中许多存储库共享的可重用工作流中进行。 可重用工作流可以在生成过程和调用方工作流之间提供隔离,以满足 SLSA v1.0 生成级别 3 的要求。

在开始学习本指南之前,你应该熟悉以下内容:

步骤 1:配置生成

首先,我们需要使用项目证明和可重用工作流进行生成。

使用可重用工作流进行生成

如果尚未使用可重用工作流来生成软件,则需要执行生成步骤并将其移动到可重用工作流中。 有关如何编写和调用可重用工作流的详细信息,请参阅“重新使用工作流”。

使用项目证明进行生成

用于生成软件的可重用工作流还必须生成项目证明来证明生成来源。 有关详细信息,请参阅“使用项目证明确立生成的来源”。

使用可重用工作流生成项目证明时,调用方工作流和可重用工作流都需要具有以下权限。

YAML
permissions:
  attestations: write
  contents: read
  id-token: write

如果要生成容器映像,则还需要包含 packages: write 权限。

步骤 2:验证使用可重用工作流生成的项目证明

要验证使用生成结果生成的项目证明,可以从 GitHub CLI 使用 gh attestation verify

gh attestation verify 命令需要结合使用 --owner--repo 标志。 这些标志有两个作用。

  • 它们会告诉 gh attestation verify 从何处提取证明。 这始终是调用方的工作流。
  • 它们会告诉 gh attestation verify 进行签名的工作流来自何处。 这始终是使用 attest-build-provenance 操作的工作流,并且可能是可重用的工作流。

可以将选项标志与 gh attestation verify 命令一起使用。

  • 如果可重用工作流与调用方工作流不在同一存储库中,请使用 --signer-repo 标志指定包含可重用工作流的存储库。
  • 如果要强制要求使用特定工作流对项目证明进行签名,请使用 --signer-workflow 标志来指示应当使用的工作流文件。

例如,假设调用方工作流是 ORGANIZATION_NAME/REPOSITORY_NAME/.github/workflows/calling.yml 并且它使用 REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml ,则可以执行以下操作:

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

如果要指定确切的工作流,则应执行以下操作:

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-workflow REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

结束语

现在,你将在可重用工作流中生成项目并进行签名,该工作流可以提供 SLSA v1.0 生成级别 3 要求的隔离。 可以通过要求使用特定工作流生成项目(可重用或不可重用)来验证项目是使用经过审查的已知生成说明生成的。