Vérifier la provenance d'une image

Vous pouvez valider les attestations de provenance du build SLSA (Supply-chain Levels for Software Artifacts) pour vos images d'OS personnalisées afin d'assurer l'intégrité de la chaîne d'approvisionnement logicielle.

Lorsque vous configurez votre pipeline Image Builder pour qu'il génère des données 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 du pipeline utilisés lors de la compilation. La validation de cette provenance du build confirme que des pipelines fiables ont compilé vos images de manière sécurisée, sans falsification non autorisée.

Avant de commencer

  • Suivez les étapes de configuration de l'environnement 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 services et aux API Cloud de Confiance by S3NS . 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 console Cloud de Confiance pour accéder aux services Cloud de Confiance by S3NS et aux API, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    1. Installez la Google Cloud CLI, puis connectez-vous à la gcloud CLI avec votre identité fédérée. Après vous être connecté, initialisez la Google Cloud CLI en exécutant la commande suivante :

      gcloud init
  • 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, puis connectez-vous à 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'authentification Cloud de Confiance .

Rôles requis

Pour obtenir les autorisations nécessaires pour afficher et valider les attestations de provenance du build, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

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 la provenance

Pour générer la provenance du build, assurez-vous de configurer les blocs substitutions, options, results et artifacts dans votre fichier cloudbuild.yaml, comme indiqué 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 valider les données de provenance du build et les artefacts d'exécution à l'aide de la console Cloud de Confiance ou de Google Cloud CLI :

Console (Cloud Build)

Pour afficher la provenance du build et les artefacts de sortie dans l'historique des builds Cloud Build :

  1. Dans la console Cloud de Confiance , accédez à la page Cloud Build.

    Accéder à Cloud Build

  2. Cliquez sur Historique, puis sélectionnez l'ID de compilation de l'exécution de votre pipeline d'images. La page d'informations de la compilation affiche les journaux des trois étapes du processus (imagebuilder-customize, imagebuilder-validate et imagebuilder-publish).

  3. Cliquez sur l'onglet Artefacts de compilation pour afficher l'image d'OS exacte créée lors de l'exécution.

  4. 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 :

  1. Dans la console Cloud de Confiance , accédez à la page Artifact Registry.

    Accéder à Artifact Registry

  2. Dans la liste des dépôts, cliquez sur le nom de votre dépôt générique.

  3. Dans la liste des packages, cliquez sur le nom du package d'image de votre OS.

  4. Dans la liste de l'historique des versions, cliquez sur l'ID de version (v${BUILD_ID}) de votre exécution de pipeline.

  5. 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 aux fichiers tar génériques des images.

Étant donné que l'attestation est mise en forme en tant qu'enveloppe de signature DSSE (Dead Simple Signing Envelope), la charge utile de l'instruction de provenance réelle à l'intérieur du fichier JSON est encodée en base64. Pour lire les détails, procédez comme suit à l'aide de gcloud CLI et de l'utilitaire jq :

  1. Répertoriez les versions de votre package pour localiser la version spécifique de l'ID de compilation que vous souhaitez vérifier en exécutant la commande gcloud artifacts versions list :

    gcloud artifacts versions list \
        --package=PACKAGE_NAME \
        --repository=REPOSITORY_NAME \
        --location=REPOSITORY_LOCATION \
        --project=PROJECT_ID
    

    Remplacez les éléments suivants :

    • PACKAGE_NAME : nom du package dans votre dépôt Artifact Registry, par exemple my-custom-image.
    • REPOSITORY_NAME : nom de votre dépôt Artifact Registry générique (par exemple, custom-os-images).
    • REPOSITORY_LOCATION : région de votre dépôt, par exemple us-central1.
    • PROJECT_ID : ID de votre projet.
  2. Interrogez les métadonnées des pièces jointes correspondant à la version du package cible en exécutant la commande gcloud artifacts attachments list :

    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_ID
    

    Remplacez BUILD_ID par l'identifiant de version renvoyé à l'étape 1, par exemple 12345.

    Dans le résultat de la commande, recherchez l'entrée de pièce jointe dont le champ name contient build-result (avec type: application/vnd.in-toto+json), puis copiez le chemin d'accès indiqué sous files:, par exemple :

    projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/files/sha256:SHA256_HASH

  3. Téléchargez la charge utile de la pièce jointe des métadonnées JSON depuis votre dépôt en exécutant la commande gcloud artifacts files download :

    gcloud artifacts files download ATTACHMENT_FILE_ID \
        --repository=REPOSITORY_NAME \
        --location=REPOSITORY_LOCATION \
        --project=PROJECT_ID \
        --destination=./provenance.json
    

    Remplacez ATTACHMENT_FILE_ID par le chemin d'accès à la pièce jointe files: récupéré à l'étape précédente.

  4. 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 au format SLSA standard qui mettent en évidence le déclencheur de compilation, les détails du dépôt de recettes, les images de conteneurs utilisées, les hachages de compilation et les attributs de l'image de base.