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 avecload: true
, aucune attestation n'est ajoutée à l'image. Ces formats de sortie ne supportent pas les attestations.
WarningSi 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 }}