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:
- Generación de atestaciones de artefactos. Consulta Uso de atestaciones de artefactos para establecer la procedencia de las compilaciones.
- Escritura y uso de flujos de trabajo reutilizables. Consulta Reutilización de flujos de trabajo.
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, consulta 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 más información, consulta 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.
permissions: attestations: write contents: read id-token: write
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ónattest-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:
gh attestation verify -o ORGANIZATION_NAME --signer-repo REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME PATH/TO/YOUR/BUILD/ARTIFACT-BINARY
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:
gh attestation verify -o ORGANIZATION_NAME --signer-workflow REUSABLE_ORGANIZATION_NAME/REUSABLE_REPOSITORY_NAME/.github/workflows/reusable.yml PATH/TO/YOUR/BUILD/ARTIFACT-BINARY
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.