Compartir comentarios
Las respuestas se generan en base a la documentación.

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=max se añaden automáticamente a la imagen.
  • Si el repositorio de GitHub es privado, las atestaciones de procedencia con mode=min se añaden automáticamente a la imagen.
  • Si utilizas el exportador docker o estás cargando los resultados de la compilación en el runner con load: true, no se añadirán atestaciones a la imagen. Estos formatos de salida no admiten atestaciones.
Warning

Si utilizas docker/build-push-action para 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 }}