Skip to main content

Usando atestados de artefatos e fluxos de trabalho reutilizáveis para alcançar o SLSA v1 Build Level 3

A criação de software com fluxos de trabalho reutilizáveis e atestados de artefatos pode simplificar a segurança da sua cadeia de fornecedores e ajudar você a alcançar o SLSA v1.0 Build Level 3.

Pré-requisitos

Antes de começar este guia, você deve ter familiaridade com:

Etapa 1: Configurar seus builds

Primeiro, precisamos compilar com atestados de artefatos e um fluxo de trabalho reutilizável.

Compilar com um fluxo de trabalho reutilizável

Se você ainda não estiver usando fluxos de trabalho reutilizáveis para compilar seu software, precisará executar suas etapas de build e movê-las para um fluxo de trabalho reutilizável.

Compilar com atestados de artefatos.

O fluxo de trabalho reutilizável que você usa para criar seu software também deve gerar atestados de artefato para estabelecer a procedência do build.

Quando você usa um fluxo de trabalho reutilizável para gerar atestados de artefatos, o fluxo de trabalho de chamada e o fluxo de trabalho reutilizável precisam ter as permissões a seguir.

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

Se você estiver compilando imagens de contêiner, também precisará incluir a permissão packages: write.

Etapa 2: Verificar atestados de artefato compilados com um fluxo de trabalho reutilizável

Para verificar os atestados de artefato gerados com seus builds, você pode usar gh attestation verify da CLI do GitHub.

O comando gh attestation verify exige o uso de um sinalizador --owner ou --repo. Esses sinalizadores fazem duas coisas.

  • Eles informam a gh attestation verify o local em que o atestado deve ser buscado. Isso será sempre o seu fluxo de trabalho de chamador.
  • Eles informam a gh attestation verify o local de origem do fluxo de trabalho que fez a assinatura. Esse sempre será o fluxo de trabalho que usa a ação attest-build-provenance, que pode ser um fluxo de trabalho reutilizável.

Você não pode usar sinalizadores opcionais com o comando gh attestation verify.

  • Se o fluxo de trabalho reutilizável não estiver no mesmo repositório que o fluxo de trabalho do chamador, use o sinalizador --signer-repo para especificar o repositório que contém o fluxo de trabalho reutilizável.
  • Se você quiser exigir que um fluxo de trabalho específico assine um atestado de artefato, use o sinalizador --signer-workflow para indicar o arquivo de fluxo de trabalho que deve ser usado.

Por exemplo, se o fluxo de trabalho de chamada for ORGANIZATION_NAME/REPOSITORY_NAME/.github/workflows/calling.yml e usar REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml , você poderá fazer:

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

Se você quiser especificar o fluxo de trabalho exato:

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