Skip to main content

Usar atestados de artefatos para estabelecer a procedência de compilações

Os atestados de artefatos permitem que você aumente a segurança da cadeia de fornecedores de suas compilações, estabelecendo publicamente onde e como seu software foi criado e associando-o a uma SBOM (compilação de materiais de software assinada).

Note

Os atestados de artefato estão em versão beta pública e sujeitos a alterações.

Sobre atestados de artefatos

Os atestados de artefatos permitem que você crie garantias de procedência e integridade infalsificáveis para o software que você cria. Por sua vez, as pessoas que consomem seu software podem verificar onde e como seu software foi criado.

Ao gerar atestados de artefato com seu software, você cria declarações assinadas criptograficamente que estabelecem a procedência do build e incluem as seguintes informações:

  • Um link para o fluxo de trabalho associado ao artefato.
  • O repositório, organização, ambiente, SHA de commit e evento de gatilho do artefato.
  • Outras informações do token OIDC usado para estabelecer a procedência. Para obter mais informações, confira "Sobre o enrijecimento de segurança com o OpenID Connect".

Você também pode gerar atestados de artefato que incluam uma SBOM (lista de materiais de software) associada. Associar suas compilações a uma lista de dependências de código aberto usadas nelas fornece transparência e permite que os consumidores cumpram os padrões de proteção de dados.

Sobre os níveis de SLSA para atestados de artefatos

A estrutura SLSA é um padrão do setor usado para avaliar a segurança da cadeia de fornecedores. Está organizada em níveis. Cada nível representa um grau crescente de segurança e confiabilidade para uma cadeia de fornecedores de software. Os atestados de artefato fornecem SLSA v1.0 de Compilação de Nível 2.

Você pode usar atestados de artefato para obter SLSA v1.0 de Compilação de Nível 3; porém, recomendamos enfaticamente concentrar-se primeiro na ampla adoção de Compilação de Nível 2 em toda a sua organização. É muito melhor alcançar consistentemente o Nível 2 em suas compilações do que ter uma pequena porção de compilações que atingem o Nível 3. Para alcançar o Nível de Compilação 3, recomendamos padronizar seu processo de compilação com fluxos de trabalho reutilizáveis, auditar os fluxos de trabalho reutilizáveis para garantir que atendam aos requisitos do Nível 3 e atualizar sua política de verificação para exigir esses fluxos de trabalho reutilizáveis auditados.

Para obter mais informações, consulte a seção Proveniência da documentação do SLSA.

Sobre o uso de Sigstore para atestados de artefatos

Para gerar atestados de artefatos, o GitHub usa o Sigstore, um projeto de código aberto que oferece uma solução abrangente para assinar e verificar artefatos de software por meio de atestados.

Repositórios públicos que geram atestados de artefatos usam a instância válida pública do Sigstore. Uma cópia do pacote Sigstore gerado é armazenada no GitHub e também gravada em um log de transparência imutável que pode ser lido publicamente na Internet.

Repositórios privados que geram atestados de artefatos usam a instância do Sigstore do GitHub. A instância do Sigstore do GitHub usa a mesma base de código que a instância válida pública do Sigstore, mas não tem um log de transparência e federa apenas com o GitHub Actions.

Sobre a verificação de atestados de artefatos

Se você consome software que publica atestados de artefatos, pode usar o GitHub CLI para verificar esses atestados. Como os atestados fornecem informações sobre onde e como o software foi desenvolvido, você pode usar essas informações para criar e aplicar políticas de segurança que elevem a segurança de sua cadeia de fornecedores. Para obter mais informações, consulte "Verificar atestados de artefatos com o GitHub CLI".

Warning

É importante lembrar que os atestados de artefatos não são uma garantia de que um artefato seja seguro. Em vez disso, os atestados de artefato vinculam você ao código-fonte e às instruções de criação que os produziram. Cabe a você definir os critérios de sua política, avaliá-la avaliando o conteúdo e tomar uma decisão embasada sobre riscos ao consumir software.

Gerar atestados de artefatos para suas compilações

Você pode usar GitHub Actions para gerar atestados de artefato que estabeleçam a origem da compilação para artefatos como binários e imagens de contêiner.

Para gerar um atestado de artefato, você deve fazer o seguinte:

  • Verificar se as permissões apropriadas estão configuradas em seu fluxo de trabalho.
  • Incluir uma etapa em seu fluxo de trabalho que use a ação attest-build-provenance.

Quando você executar seus fluxos de trabalho atualizados, eles criarão seus artefatos e gerarão um atestado de artefato que estabelece a origem da compilação. Você pode exibir os atestados na guia Ações do repositório. Para obter mais informações, consulte o repositório attest-build-provenance.

Gerar origem de compilação para binários

  1. No fluxo de trabalho que cria o binário que você deseja atestar, adicione as permissões a seguir.

    permissions:
      id-token: write
      contents: read
      attestations: write
    
  2. Após a etapa em que o binário foi criado, adicione a etapa a seguir.

    - name: Generate artifact attestation
      uses: actions/attest-build-provenance@v1
      with:
        subject-path: 'PATH/TO/ARTIFACT'
    

    O valor do parâmetro subject-path deve ser definido como o caminho do binário que você deseja atestar.

Gerar origem de compilação para imagens de contêiner

  1. No fluxo de trabalho que cria a imagem do contêiner que você deseja atestar, adicione as permissões a seguir.

    permissions:
      id-token: write
      contents: read
      attestations: write
      packages: write
    
  2. Após a etapa em que a imagem foi criada, adicione a etapa a seguir.

    - name: Generate artifact attestation
      uses: actions/attest-build-provenance@v1
      with:
        subject-name: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
        subject-digest: 'sha256:fedcba0...'
        push-to-registry: true
    

    O valor do parâmetro subject-name deve especificar o nome completo da imagem. Por exemplo, ghcr.io/user/app ou acme.azurecr.io/user/app. Não inclua uma marca como parte do nome da imagem.

    O valor do parâmetro subject-digest deve ser definido como o resumo SHA256 do assunto para o atestado, no formato sha256:HEX_DIGEST. Se seu fluxo de trabalho usar docker/build-push-action, você poderá usar a saída digest dessa etapa para fornecer o valor. Para obter mais informações sobre como usar saídas, consulte "Sintaxe de fluxo de trabalho para o GitHub Actions".

Gerar um atestado para uma SBOM (lista de materiais de software)

É possível gerar atestados de SBOM assinados para artefatos de fluxo de trabalho.

Para gerar um atestado para uma SBOM, você deve:

  • Verificar se as permissões apropriadas estão configuradas em seu fluxo de trabalho.
  • Criar uma SBOM para seu artefato. Para obter mais informações, consulte anchore-sbom-action no GitHub Marketplace.
  • Incluir uma etapa em seu fluxo de trabalho que use a ação attest-sbom.

Quando você executar seus fluxos de trabalho atualizados, eles criarão seus artefatos e gerarão um atestado de SBOM. Você pode exibir os atestados na guia Ações do repositório. Para obter mais informações, consulte o repositório da ação attest-sbom.

Gerar um atestado de SBOM para binários

  1. No fluxo de trabalho que cria o binário que você deseja atestar, adicione as permissões a seguir.

    permissions:
      id-token: write
      contents: read
      attestations: write
    
  2. Após a etapa em que o binário foi criado, adicione a etapa a seguir.

    - name: Generate SBOM attestation
      uses: actions/attest-sbom@v1
      with:
        subject-path: 'PATH/TO/ARTIFACT'
        sbom-path: 'PATH/TO/SBOM'
    

    O valor do parâmetro subject-path deve ser definido como o caminho do binário descrito pela SBOM. O valor do parâmetro sbom-path deve ser definido como o caminho do arquivo de SBOM que você gerou.

Gerar um atestado de SBOM para imagens de contêiner

  1. No fluxo de trabalho que cria a imagem do contêiner que você deseja atestar, adicione as permissões a seguir.

    permissions:
      id-token: write
      contents: read
      attestations: write
      packages: write
    
  2. Após a etapa em que a imagem foi criada, adicione a etapa a seguir.

    - name: Generate SBOM attestation
      uses: actions/attest-sbom@v1
      with:
        subject-name: ${{ env.REGISTRY }}/PATH/TO/IMAGE
        subject-digest: 'sha256:fedcba0...'
        sbom-path: 'sbom.json'
        push-to-registry: true
    

    O valor do parâmetro subject-name deve especificar o nome completo da imagem. Por exemplo, ghcr.io/user/app ou acme.azurecr.io/user/app. Não inclua uma marca como parte do nome da imagem.

    O valor do parâmetro subject-digest deve ser definido como o resumo SHA256 do assunto para o atestado, no formato sha256:HEX_DIGEST. Se seu fluxo de trabalho usar docker/build-push-action, você poderá usar a saída digest dessa etapa para fornecer o valor. Para obter mais informações sobre como usar saídas, consulte "Sintaxe de fluxo de trabalho para o GitHub Actions".

    O valor do parâmetro sbom-path deve ser definido como o caminho para o arquivo de SBOM formatado em JSON que você deseja atestar.

Verificar atestados de artefatos com o GitHub CLI

Para verificar atestados de artefatos para binários, use o comando do GitHub CLI a seguir.

Bash
gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME

Para verificar atestados de artefatos para imagens de contêiner, você deve fornecer o FQDN da imagem prefixado com oci:// em vez do caminho para um binário. Você pode usar o comando do GitHub CLI a seguir.

Bash
docker login ghcr.io

gh attestation verify oci://ghcr.io/ORGANIZATION_NAME/IMAGE_NAME:test -R ORGANIZATION_NAME/REPOSITORY_NAME

Para obter mais informações, consulte a seção attestation do manual do GitHub CLI.