Skip to main content

Uso de atestaciones de artefactos y flujos de trabajo reutilizables para lograr el nivel de compilación 3 de SLSA v1

La creación de software con flujos de trabajo reutilizables y atestaciones de artefactos puede simplificar la seguridad de la cadena de suministro y ayudarle a lograr el nivel de compilación 3 de SLSA v1.0.

Introducción

Las atestaciones de artefactos son una buena manera de crear garantías de integridad y procedencia no verificables para el software que compile.

Pero recuerde que por sí mismas, las atestaciones de artefacto proporcionan vínculos, como las instrucciones de compilación con las que se creó un artefacto, que cumple el nivel de compilación 2 de SLSA v1.0. Para tomar una decisión de riesgo informada, es su responsabilidad seguir esos vínculos y evaluar esas instrucciones de compilación.

Puede seguir este paso más al requerir que las compilaciones usen instrucciones de compilación conocidas y examinadas. Una excelente manera de hacerlo es hacer que la compilación tenga lugar en un flujo de trabajo reutilizable que muchos repositorios de toda la organización comparten. Los flujos de trabajo reutilizables pueden proporcionar aislamiento entre el proceso de compilación y el flujo de trabajo de llamada para satisfacer el nivel de compilación 3 de SLSA v1.0.

Antes de iniciar esta guía, debe conocer lo siguiente:

Paso 1: Configuración de las compilaciones

En primer lugar, es necesario compilar con atestaciones de artefactos y un flujo de trabajo reutilizable.

Compilación con un flujo de trabajo reutilizable

Si aún no usa flujos de trabajo reutilizables para compilar el software, deberá realizar los pasos de compilación y moverlos a un flujo de trabajo reutilizable. Para obtener más información sobre cómo escribir y llamar a un flujo de trabajo reutilizable, consulte “Reutilización de flujos de trabajo”.

Compilación con atestaciones de artefactos.

El flujo de trabajo reutilizable que se usa para compilar el software también debe generar atestaciones de artefactos para establecer la procedencia de la compilación. Para obtener más información, vea “Uso de atestaciones de artefactos para establecer la procedencia de las compilaciones”.

Cuando se usa un flujo de trabajo reutilizable para generar atestaciones de artefactos, tanto el flujo de trabajo que realiza la llamada como el flujo de trabajo reutilizable deben tener los permisos siguientes.

YAML
permissions:
  attestations: write
  contents: read
  id-token: write

Si va a compilar imágenes de contenedor, también deberá incluir el permiso packages: write.

Paso 2: Comprobación de las atestaciones de artefacto creadas con un flujo de trabajo reutilizable

Para comprobar las atestaciones de artefacto generadas con las compilaciones, puede usar gh attestation verify desde la CLI de GitHub.

El comando gh attestation verify requiere que se usen marcas --owner o --repo con él. Estas marcas hacen dos cosas.

  • Indican a gh attestation verify dónde capturar la atestación. Siempre será el flujo de trabajo del autor de llamada.
  • Indican a gh attestation verify de dónde procede el flujo de trabajo que realizó la firma. Este será siempre el flujo de trabajo que usa la acción attest-build-provenance, que puede ser un flujo de trabajo reutilizable.

Puede usar marcas opcionales con el comando gh attestation verify.

  • Si el flujo de trabajo reutilizable no está en el mismo repositorio que el flujo de trabajo del autor de llamada, use la marca --signer-repo para especificar el repositorio que contiene el flujo de trabajo reutilizable.
  • Si desea requerir que se firme una atestación de artefacto con un flujo de trabajo específico, use la marca --signer-workflow para indicar el archivo de flujo de trabajo que se debe usar.

Por ejemplo, si el flujo de trabajo de llamada es ORGANIZATION_NAME/REPOSITORY_NAME/.github/workflows/calling.yml y usa REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml, puede hacer lo siguiente:

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

O bien, si desea especificar el flujo de trabajo exacto:

Bash
gh attestation verify -o ORGANIZATION_NAME --signer-workflow REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml PATH/TO/YOUR/BUILD/ARTIFACT-BINARY

Conclusión

Ahora está compilando y firmando los artefactos en un flujo de trabajo reutilizable, lo que puede proporcionar el aislamiento requerido por la compilación de nivel 3 de SLSA v1.0. Puede comprobar que los artefactos se compilan con instrucciones de compilación conocidas y examinadas al requerir que el artefacto se haya compilado con un flujo de trabajo específico, reutilizable o no.