Vous pouvez vérifier les attestations de provenance du build SLSA (Supply-chain Levels for Software Artifacts) pour vos images d'OS personnalisées afin de garantir l'intégrité de la chaîne d'approvisionnement logicielle.
Lorsque vous configurez votre pipeline Image Builder pour qu'il génère une sortie dans Artifact Registry et que vous activez les options de validation, Cloud Build génère automatiquement une attestation cryptographique décrivant le code source, les configurations, les paramètres d'exécution et l'image de base exacts utilisés lors de la compilation. La validation de cette provenance du build confirme que des pipelines de confiance ont créé vos images de manière sécurisée, sans manipulation non autorisée.
Avant de commencer
- Suivez les étapes de configuration de l'environnement décrites dans Préparer votre environnement.
-
Si ce n'est pas déjà fait, configurez l'authentification.
L'authentification permet de valider votre identité pour accéder aux Google Cloud services et aux API. Pour exécuter
du code ou des exemples depuis un environnement de développement local, vous pouvez vous authentifier auprès de
Compute Engine en sélectionnant l'une des options suivantes :
Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :
Console
Lorsque vous utilisez la Google Cloud console pour accéder aux Google Cloud services et aux API, vous n'avez pas besoin de configurer l'authentification.
gcloud
-
Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisezla en exécutant la commande suivante :
gcloud initSi vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
-
- Définissez une région et une zone par défaut.
REST
Pour utiliser les exemples API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à la gcloud CLI.
Installez la Google Cloud CLI.
Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.
Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l' Google Cloud authentification.
Rôles requis
Pour obtenir les autorisations nécessaires pour afficher et vérifier les attestations de provenance du build, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :
- Lecteur Artifact Registry (
roles/artifactregistry.reader) - Lecteur Cloud Build (
roles/cloudbuild.builds.viewer)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Configurer la génération de provenance
Pour générer la provenance du build, assurez-vous de configurer les blocs substitutions,
options, results et artifacts dans votre
cloudbuild.yaml
fichier, comme illustré dans l'extrait suivant :
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}'
Vérifier les données de provenance
Vous pouvez afficher et vérifier les données de provenance de build et les artefacts d'exécution à l'aide de la Google Cloud console ou de la Google Cloud CLI :
Console (Cloud Build)
Pour afficher la provenance de build et les artefacts de sortie via l'historique de build Cloud Build :
Dans la Google Cloud console, accédez à la page Cloud Build.
Cliquez sur Historique , puis sélectionnez l'ID de build pour l'exécution de votre pipeline d'images. La page d'informations sur le build affiche les journaux des trois étapes du processus (
imagebuilder-customize,imagebuilder-validateetimagebuilder-publish).Cliquez sur l'onglet Artefacts de build pour afficher l'image d'OS exacte créée lors de l'exécution.
Cliquez sur l'onglet Pièces jointes pour afficher les fichiers d'attestation de provenance SLSA signés et les fichiers de résultats. Le fichier de résultats enregistre l'image de base source utilisée lors de l'exécution.
Console (Artifact Registry)
Pour afficher la provenance du build directement dans Artifact Registry :
Dans la Google Cloud console, accédez à la page Artifact Registry.
Dans la liste des dépôts, cliquez sur le nom de votre dépôt générique.
Dans la liste des packages, cliquez sur le nom du package de votre image d'OS.
Dans la liste de l'historique des versions, cliquez sur l'ID de version (
v${BUILD_ID}) pour l'exécution de votre pipeline.Cliquez sur l'onglet Pièces jointes pour afficher les fichiers d'attestation de provenance SLSA signés et les fichiers de résultats pour cette version de l'image. Le fichier de résultats enregistre l'image source de base utilisée lors de l'exécution.
gcloud
Artifact Registry stocke les enregistrements de provenance sous forme de fichiers joints, à côté des archives tar génériques.
Étant donné que l'attestation est mise en forme en tant qu'enveloppe de signature Dead Simple (DSSE), la charge utile de l'instruction de provenance réelle à l'intérieur du JSON est encodée en base64. Pour lire les détails, procédez comme suit à l'aide de la gcloud CLI et de l'utilitaire jq :
Répertoriez les versions de votre package pour localiser la version d'ID de build spécifique que vous souhaitez vérifier en exécutant la
gcloud artifacts versions listcommande :gcloud artifacts versions list \ --package=PACKAGE_NAME \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_IDRemplacez les éléments suivants :
PACKAGE_NAME: nom du package dans votre dépôt Artifact Registry, par exemplemy-custom-image.REPOSITORY_NAME: nom de votre dépôt Artifact Registry générique, par exemplecustom-os-images.REPOSITORY_LOCATION: région de votre dépôt, par exempleus-central1.PROJECT_ID: ID du projet.
Interrogez les métadonnées des pièces jointes correspondant à la version du package cible en exécutant la
gcloud artifacts attachments listcommande :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_IDRemplacez
BUILD_IDpar l'identifiant de version renvoyé à l'étape 1, par exemple12345.Dans le résultat de la commande, recherchez l'entrée de pièce jointe dont le champ
namecontientbuild-result(avectype: application/vnd.in-toto+json), puis copiez le chemin d'accès indiqué sousfiles:, par exemple :projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/files/sha256:SHA256_HASHTéléchargez la charge utile de la pièce jointe des métadonnées JSON à partir de votre dépôt en exécutant la
gcloud artifacts files downloadcommande :gcloud artifacts files download ATTACHMENT_FILE_ID \ --repository=REPOSITORY_NAME \ --location=REPOSITORY_LOCATION \ --project=PROJECT_ID \ --destination=./provenance.jsonRemplacez
ATTACHMENT_FILE_IDpar le chemin d'accès de la pièce jointefiles:récupéré à l'étape précédente.Exécutez la commande suivante pour isoler, décoder en base64 et mettre en forme le contenu de la charge utile JSON :
cat ./provenance.json | jq -r '.payload' | base64 --decode | jq
La sortie contient des paramètres de format SLSA standards mettant en évidence le déclencheur de compilation, les détails du dépôt de la recette, les images de conteneurs utilisées, les hachages de build et les attributs de l'image de base.