Skip to main content

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

使用可重用工作流和项目证明生成软件可以简化供应链安全性,并帮助实现 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