⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

Add SBOM and provenance attestations with GitHub Actions

Le Software Bill of Material (SBOM) et les attestations de provenance ajoutent des métadonnées sur le contenu de votre image, et sur la façon dont elle a été construite.

Les attestations sont supportées avec la version 4 et ultérieure de docker/build-push-action.

Provenance par défaut

L'Action GitHub docker/build-push-action ajoute automatiquement des attestations de provenance à votre image, avec les conditions suivantes :

  • Si le dépôt GitHub est public, les attestations de provenance avec mode=max sont automatiquement ajoutées à l'image.
  • Si le dépôt GitHub est privé, les attestations de provenance avec mode=min sont automatiquement ajoutées à l'image.
  • Si vous utilisez l'exportateur docker, ou si vous chargez les résultats de construction dans le runner avec load: true, aucune attestation n'est ajoutée à l'image. Ces formats de sortie ne supportent pas les attestations.
Warning

Si vous utilisez docker/build-push-action pour construire des images pour du code dans un dépôt GitHub public, les attestations de provenance attachées à votre image par défaut contiennent les valeurs des arguments de construction. Si vous utilisez mal les arguments de construction pour passer des secrets à votre construction, comme des identifiants utilisateur ou des jetons d'authentification, ces secrets sont exposés dans l'attestation de provenance. Refactorisez votre construction pour passer ces secrets en utilisant des montages secrets à la place. N'oubliez pas aussi de faire tourner tous les secrets que vous pourriez avoir exposés.

Provenance de niveau max

Il est recommandé de construire vos images avec des attestations de provenance de niveau max. Les dépôts privés n'ajoutent que la provenance de niveau min par défaut, mais vous pouvez manuellement remplacer le niveau de provenance en définissant l'entrée provenance sur l'Action GitHub docker/build-push-action à mode=max.

Notez qu'ajouter des attestations à une image signifie que vous devez pousser l'image vers un registre directement, par opposition au chargement de l'image dans le magasin d'images local du runner. C'est parce que le magasin d'images local ne supporte pas le chargement d'images avec des attestations.

name: ci

on:
  push:

env:
  IMAGE_NAME: user/app

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ vars.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Extract metadata
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ${{ env.IMAGE_NAME }}

      - name: Build and push image
        uses: docker/build-push-action@v6
        with:
          push: true
          provenance: mode=max
          tags: ${{ steps.meta.outputs.tags }}

SBOM

Les attestations SBOM ne sont pas automatiquement ajoutées à l'image. Pour ajouter des attestations SBOM, définissez l'entrée sbom de docker/build-push-action à true.

Notez qu'ajouter des attestations à une image signifie que vous devez pousser l'image vers un registre directement, par opposition au chargement de l'image dans le magasin d'images local du runner. C'est parce que le magasin d'images local ne supporte pas le chargement d'images avec des attestations.

name: ci

on:
  push:

env:
  IMAGE_NAME: user/app

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ vars.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Extract metadata
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ${{ env.IMAGE_NAME }}

      - name: Build and push image
        uses: docker/build-push-action@v6
        with:
          sbom: true
          push: true
          tags: ${{ steps.meta.outputs.tags }}