Añadir atestaciones de SBOM y procedencia con GitHub Actions
La lista de materiales de software (Software Bill of Materials o SBOM) y las atestaciones de procedencia añaden metadatos sobre el contenido de tu imagen y cómo se compiló.
Las atestaciones son compatibles con la versión 4 y posteriores de docker/build-push-action.
Procedencia predeterminada
La GitHub Action docker/build-push-action añade automáticamente atestaciones de procedencia a tu imagen, bajo las siguientes condiciones:
- Si el repositorio de GitHub es público, las atestaciones de procedencia con
mode=maxse añaden automáticamente a la imagen. - Si el repositorio de GitHub es privado, las atestaciones de procedencia con
mode=minse añaden automáticamente a la imagen. - Si utilizas el exportador
dockero estás cargando los resultados de la compilación en el runner conload: true, no se añadirán atestaciones a la imagen. Estos formatos de salida no admiten atestaciones.
WarningSi utilizas
docker/build-push-actionpara compilar imágenes para código en un repositorio público de GitHub, las atestaciones de procedencia adjuntas a tu imagen por defecto contienen los valores de los argumentos de compilación (build arguments). Si estás utilizando incorrectamente los argumentos de compilación para pasar secretos a tu compilación, como credenciales de usuario o tokens de autenticación, esos secretos quedarán expuestos en la atestación de procedencia. Refactoriza tu compilación para pasar esos secretos utilizando montajes de secretos (secret mounts) en su lugar. Recuerda también rotar cualquier secreto que puedas haber expuesto.
Procedencia de nivel máximo (max-level)
Se recomienda compilar tus imágenes con atestaciones de procedencia de nivel máximo (max-level). Los repositorios privados solo añaden procedencia de nivel mínimo de forma predeterminada, pero puedes sobrescribir manualmente el nivel de procedencia estableciendo la entrada provenance en la GitHub Action docker/build-push-action a mode=max.
Ten en cuenta que añadir atestaciones a una imagen significa que debes enviar (push) la imagen directamente a un registro, en lugar de cargar la imagen en el almacenamiento local de imágenes del runner. Esto se debe a que el almacenamiento de imágenes local no admite la carga de imágenes con atestaciones.
name: ci
on:
push:
env:
IMAGE_NAME: user/app
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Iniciar sesión en Docker Hub
uses: docker/login-action@v4
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Extraer metadatos
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.IMAGE_NAME }}
- name: Compilar y enviar imagen
uses: docker/build-push-action@v7
with:
push: true
provenance: mode=max
tags: ${{ steps.meta.outputs.tags }}SBOM
Las atestaciones de SBOM no se añaden automáticamente a la imagen. Para añadir atestaciones de SBOM, establece la entrada sbom de docker/build-push-action en true.
Ten en cuenta que añadir atestaciones a una imagen significa que debes enviar (push) la imagen directamente a un registro, en lugar de cargar la imagen en el almacenamiento local de imágenes del runner. Esto se debe a que el almacenamiento de imágenes local no admite la carga de imágenes con atestaciones.
name: ci
on:
push:
env:
IMAGE_NAME: user/app
jobs:
docker:
runs-on: ubuntu-latest
steps:
- name: Iniciar sesión en Docker Hub
uses: docker/login-action@v4
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Configurar Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Extraer metadatos
id: meta
uses: docker/metadata-action@v6
with:
images: ${{ env.IMAGE_NAME }}
- name: Compilar y enviar imagen
uses: docker/build-push-action@v7
with:
sbom: true
push: true
tags: ${{ steps.meta.outputs.tags }}