# 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](/build/metadata/attestations/) 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`](/build/exporters/oci-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)](/reference/cli/docker/buildx/build/#secret) 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.

```yaml
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.

```yaml
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 }}
```

