Puedes verificar las certificaciones de procedencia de compilación de SLSA (niveles de la cadena de suministro para artefactos de software) para tus imágenes de SO personalizadas y garantizar la integridad de la cadena de suministro de software.
Cuando configuras tu canalización de Image Builder para que genere resultados en Artifact Registry y habilitas las opciones de verificación, Cloud Build genera automáticamente una certificación criptográfica que describe el código fuente, las configuraciones, los parámetros de ejecución y la imagen base exactos de la canalización que se usaron durante la compilación. La verificación de esta procedencia de compilación confirma que las canalizaciones de confianza compilaron tus imágenes de forma segura sin manipulación no autorizada.
Antes de comenzar
- Completa los pasos de configuración del entorno en Prepara el entorno.
-
Si aún no lo hiciste, configura la autenticación.
La autenticación verifica tu identidad para acceder a los Google Cloud servicios y las APIs. Para ejecutar
código o muestras desde un entorno de desarrollo local, puedes autenticarte en
Compute Engine seleccionando una de las siguientes opciones:
Selecciona la pestaña según cómo planeas usar las muestras en esta página:
Console
Cuando usas la Google Cloud consola de para acceder a los Google Cloud servicios y las APIs de, no necesitas configurar la autenticación.
gcloud
-
Instala la Google Cloud CLI. Después de la instalación, inicializa Google Cloud CLI con el siguiente comando:
gcloud initSi usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.
-
- Configura una región y una zona predeterminadas.
REST
Para usar las muestras de la API de REST incluidas en esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la gcloud CLI.
Instala la Google Cloud CLI.
Si usas un proveedor de identidad (IdP) externo, primero debes acceder a gcloud CLI con tu identidad federada.
Para obtener más información, consulta Autentícate para usar REST en la Google Cloud documentación de autenticación de.
Roles obligatorios
Para obtener los permisos que necesitas para ver y verificar las certificaciones de procedencia de compilación, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
- Lector de Artifact Registry (
roles/artifactregistry.reader) - Visualizador de Cloud Build (
roles/cloudbuild.builds.viewer)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Configura la generación de procedencia
Para generar la procedencia de la compilación, asegúrate de configurar los bloques substitutions,
options, results y artifacts en tu
cloudbuild.yaml
archivo, como se muestra en el siguiente fragmento:
substitutions:
# 1. Specify your output path and target Artifact Registry resource URI
_IMAGE_OUTPUT_PATH: 'image-builder/binaryOut'
_ARTIFACT_REGISTRY_RESOURCE_URI: 'projects/PROJECT_ID/locations/REGION/repositories/REPOSITORY_NAME/packages/PACKAGE_NAME/versions/v${BUILD_ID}'
steps:
# 2. Configure step results and base image attestations
- name: 'REGION-docker.pkg.dev/image-builder-official/release/builder:stable'
script: |
#!/usr/bin/env bash
/build
id: 'imagebuilder-customize'
results:
- name: image_builder_telemetry_metrics
- name: base_image
attestationType: "https://cloudbuild.googleapis.com/attestations/build_content_restrictions"
attestationContent: base_image
options:
# 3. Enable Cloud Logging and cryptographic provenance generation
logging: CLOUD_LOGGING_ONLY
requestedVerifyOption: VERIFIED
artifacts:
# 4. Upload generic image artifacts and provenance to Artifact Registry
generic_artifacts:
- folder: '${_IMAGE_OUTPUT_PATH}'
registry_path: '${_ARTIFACT_REGISTRY_RESOURCE_URI}'
Verifica los datos de procedencia
Puedes ver y verificar los datos de procedencia de compilación y los artefactos de ejecución con la Google Cloud consola o Google Cloud CLI:
Consola de (Cloud Build)
Para ver la procedencia de la compilación y los artefactos de salida a través del historial de compilaciones de Cloud Build, haz lo siguiente:
En la Google Cloud consola, ve a la página de Cloud Build.
Haz clic en Historial y selecciona el ID de compilación para la ejecución de tu canalización de imágenes. En la página de detalles de la compilación, se muestran los registros de los tres pasos del proceso (
imagebuilder-customize,imagebuilder-validateyimagebuilder-publish).Haz clic en la pestaña Artefactos de compilación para ver la imagen de SO exacta que se creó durante la ejecución.
Haz clic en la pestaña Adjuntos para ver los archivos de certificación de procedencia de SLSA firmados y los archivos de resultados. El archivo de resultados registra la imagen base de origen que se usó durante la ejecución.
Consola de (Artifact Registry)
Para ver la procedencia de la compilación directamente en Artifact Registry, haz lo siguiente:
En la Google Cloud consola de, ve a la página de Artifact Registry.
En la lista de repositorios, haz clic en el nombre de tu repositorio genérico.
En la lista de paquetes, haz clic en el nombre del paquete de la imagen de SO.
En la lista del historial de versiones, haz clic en el ID de versión (
v${BUILD_ID}) para la ejecución de tu canalización.Haz clic en la pestaña Adjuntos para ver los archivos de certificación de procedencia de SLSA firmados y los archivos de resultados para esa versión de la imagen. El archivo de resultados registra la imagen de origen base que se usó durante la ejecución.
gcloud
Artifact Registry almacena registros de procedencia como archivos adjuntos junto con los archivos tar genéricos de la imagen.
Debido a que la certificación tiene el formato de un sobre de firma simple (DSSE), la carga útil de la declaración de procedencia real dentro del JSON está codificada en base64. Para leer los detalles, sigue estos pasos con la gcloud CLI y la utilidad jq:
Ejecuta el
gcloud artifacts versions listcomando para enumerar las versiones de tu paquete y ubicar la versión específica del ID de compilación que deseas verificar:gcloud artifacts versions list \ --package=PACKAGE_NAME \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_IDReemplaza lo siguiente:
PACKAGE_NAME: Es el nombre del paquete en tu repositorio de Artifact Registry, por ejemplo,my-custom-image.REPOSITORY_NAME: Es el nombre de tu repositorio genérico de Artifact Registry, por ejemplo,custom-os-images.REPOSITORY_LOCATION: Es la región de tu repositorio, por ejemplo,us-central1.PROJECT_ID: Es el ID del proyecto.
Ejecuta el comando
gcloud artifacts attachments listpara consultar los metadatos de los adjuntos que coinciden con la versión del paquete de destino:gcloud artifacts attachments list \ --target=projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/packages/PACKAGE_NAME/versions/vBUILD_ID \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_IDReemplaza
BUILD_IDpor el identificador de versión que se muestra en el paso 1, por ejemplo,12345.En el resultado del comando, ubica la entrada del adjunto cuyo campo
namecontienebuild-result(contype: application/vnd.in-toto+json) y copia la ruta de acceso que aparece enfiles:, por ejemplo:projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/files/sha256:SHA256_HASHEjecuta el comando
gcloud artifacts files downloadpara descargar la carga útil de los metadatos JSON adjuntos de tu repositorio: ejecutando elgcloud artifacts files download ATTACHMENT_FILE_ID \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_ID \ --destination=./provenance.jsonReemplaza
ATTACHMENT_FILE_IDpor la ruta de acceso del adjuntofiles:que recuperaste en el paso anterior.Ejecuta el siguiente comando para aislar, decodificar en base64 y dar formato al contenido de la carga útil de JSON:
cat ./provenance.json | jq -r '.payload' | base64 --decode | jq
El resultado contiene parámetros de formato SLSA estándar que destacan el activador de compilación, los detalles del repositorio de recetas, las imágenes de contenedor usadas, los hashes de compilación y los atributos de la imagen base.