Vérifier la provenance d'une image

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

    1. Installez la Google Cloud CLI. Une fois que la Google Cloud CLI est installée, initialisezla en exécutant la commande suivante :

      gcloud init

      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.

  • 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 :

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 :

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

    Accéder à Cloud Build

  2. 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-validate et imagebuilder-publish).

  3. Cliquez sur l'onglet Artefacts de build 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 Google Cloud console, 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 de votre image d'OS.

  4. Dans la liste de l'historique des versions, cliquez sur l'ID de version (v${BUILD_ID}) pour l'exécution de votre 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, à 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 :

  1. 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 list commande :

    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 du projet.
  2. Interrogez les métadonnées des pièces jointes correspondant à la version du package cible en exécutant la gcloud artifacts attachments list commande :

    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 à partir de votre dépôt en exécutant la gcloud artifacts files download commande :

    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 de 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 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.