O linked artifacts page inclui registros de armazenamento e registros de implantação para artefatos que você cria em sua organização. Os metadados para cada artefato são fornecidos pela sua organização usando um dos seguintes métodos:
- Um fluxo de trabalho que contém uma das ações da GitHub para atestações de artefato
- Uma integração com o JFrog Artifactory ou o Microsoft Defender para Nuvem
- Um script personalizado usando a API REST de metadados do artefato
Os métodos disponíveis dependem se você está carregando um registro de armazenamento ou um registro de implantação. Para obter mais informações sobre tipos de registro, consulte Sobre artefatos vinculados.
Carregando um registro de armazenamento
Você pode carregar um registro de armazenamento criando um atestado de artefato ou habilitando uma integração com JFrog Artifactory. Se você não quiser usar essas opções, deverá configurar uma integração personalizada com a API REST.
Comprovação com GitHub Actions
Você pode enviar um registro de armazenamento de um artefato usando as ações de primeira classe do GitHub para atestados de artefato. Você pode fazer isso no mesmo fluxo de trabalho usado para criar o artefato. Essas ações criam garantias de integridade e procedência assinadas para o software que você cria, além de carregar automaticamente um registro de armazenamento no linked artifacts page.
As ações de atestar e atestar a procedência da compilação criarão automaticamente registros de armazenamento no linked artifacts page se ambas as condições forem atendidas:
- A
push-to-registryopção está definida comotrue - O fluxo de trabalho que inclui a ação tem a
artifact-metadata: writepermissão
Para obter mais informações sobre como usar essas ações, consulte Usar atestados de artefatos para estabelecer a procedência de builds.
Se o artefato não exigir atestado ou se você quiser carregar registros de implantação ou metadados de armazenamento adicionais, consulte as seções a seguir.
Usando a integração JFrog
Essa integração bidirecional mantém seus dados de armazenamento em GitHub automaticamente atualizados com o artefato no JFrog. Por exemplo, as atestações que você cria em GitHub são carregadas automaticamente no JFrog e promover um artefato para produção no JFrog adiciona automaticamente o contexto de produção ao registro em GitHub.
Para obter instruções de instalação, consulte Introdução ao JFrog Artifactory e à Integração do GitHub na documentação do JFrog.
Usando a API REST
Para artefatos que não precisam ser atestados e não são armazenados no JFrog, você pode criar uma integração personalizada usando o endpoint da API Create artifact metadata storage record. Você deve configurar seu sistema para acionar o endpoint sempre que um artefato for publicado no seu repositório de pacotes escolhido.
Observação
Se o artefato não estiver associado a um atestado de procedência em GitHub, o github_repository parâmetro será obrigatório.
Carregando um registro de implantação
Se você armazenar artefatos no Microsoft Defender for Cloud (MDC), poderá usar uma integração para sincronizar dados automaticamente com o linked artifacts page. Caso contrário, você deve configurar uma integração personalizada com a API REST.
Usando a integração do Microsoft Defender para Nuvem
Você pode conectar sua instância MDC à sua organização GitHub . MDC enviará automaticamente dados de implantação e tempo de execução para GitHub.
Para obter instruções de instalação, consulte Guia de Início Rápido: Conecte seu Ambiente do GitHub ao Microsoft Defender for Cloud na documentação de MDC.
Observação
A integração com Microsoft Defender for Cloud está em versão prévia pública e está sujeita a alterações.
Usando a API REST
O endpoint da API Create an artifact deployment record permite que os sistemas enviem dados de implantação para um artefato específico para GitHub, como seu nome, digest, ambientes, cluster e implantação. Você deve chamar esse endpoint sempre que um artefato for implantado em um novo ambiente de homologação ou produção.
Observação
Se o artefato não estiver associado a um atestado de procedência em GitHub, o github_repository parâmetro será obrigatório.
Verificando um upload
Para verificar se um registro foi carregado com êxito, você pode exibir o artefato atualizado nas configurações da sua organização. Confira Auditando os builds da sua organização no linked artifacts page.
Removendo registros indesejados
Não é possível excluir um artefato do linked artifacts page. No entanto, você pode atualizar um registro de armazenamento ou registro de implantação para refletir o status de um artefato. Confira Removendo artefatos do linked artifacts page.
Exemplos de GitHub Actions
Você pode fazer upload de dados para o linked artifacts page no mesmo fluxo de trabalho usado para criar e publicar um artefato.
Gerando um atestado
No exemplo a seguir, compilamos e publicamos uma imagem do Docker e, em seguida, usamos a ${{ steps.push.outputs.digest }} saída na próxima etapa para gerar um atestado de procedência.
A ação attest-build-provenance carrega automaticamente um registro de armazenamento no linked artifacts page quando push-to-registry: true está configurado e o fluxo de trabalho inclui a permissão artifact-metadata: write.
env:
IMAGE_NAME: my-container-image
ACR_ENDPOINT: my-registry.azurecr.io
jobs:
generate-build:
name: Build and publish Docker image
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
attestations: write
packages: write
artifact-metadata: write
steps:
- name: Build and push Docker image
id: push
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
with:
context: .
push: true
tags: |
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:latest
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v3
with:
subject-name: ${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true
Usando a API REST
Como alternativa, se você não estiver gerando um atestado, poderá chamar diretamente a API de metadados do artefato.
env:
IMAGE_NAME: my-container-image
IMAGE_VERSION: 1.1.2
ACR_ENDPOINT: my-registry.azurecr.io
jobs:
generate-build:
name: Build and publish Docker image
runs-on: ubuntu-latest
permissions:
id-token: write
contents: read
packages: write
artifact-metadata: write
steps:
- name: Build and push Docker image
id: push
uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83
with:
context: .
push: true
tags: |
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:latest
${{ env.ACR_ENDPOINT }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
- name: Create artifact metadata storage record
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
jq -n --arg artifactName "${{ env.IMAGE_NAME }}" --arg artifactVersion "${{ env.IMAGE_VERSION }}" --arg artifactDigest "${{ steps.push.outputs.digest }}" '{"name": $artifactName, "digest": $artifactDigest, "version": $artifactVersion, "registry_url": "https://azurecr.io", "repository": "my-repository"}' > create-record.json
gh api -X POST orgs/${{ github.repository_owner }}/artifacts/metadata/storage-record --input create-record.json
shell: bash
Próximas etapas
Depois de carregar dados, as equipes em sua organização podem usar o contexto dos dados de armazenamento e implantação para priorizar alertas de segurança. Confira Priorizando alertas do Dependabot e de verificação de código no contexto de produção.