Bildherkunft prüfen

Sie können SLSA-Atteste (Supply-chain Levels for Software Artifacts) für die Build-Herkunft Ihrer benutzerdefinierten Betriebssystem-Images überprüfen, um die Integrität der Softwarelieferkette zu gewährleisten.

Wenn Sie Ihre Image Builder-Pipeline so konfigurieren, dass die Ausgabe in Artifact Registry erfolgt, und Überprüfungsoptionen aktivieren, generiert Cloud Build automatisch eine kryptografische Attestierung, in der der genaue Pipeline-Quellcode, die Konfigurationen, die Ausführungsparameter und das während der Kompilierung verwendete Basis-Image beschrieben werden. Durch die Überprüfung der Build-Herkunft wird bestätigt, dass Ihre Images von vertrauenswürdigen Pipelines sicher und ohne unbefugte Manipulationen erstellt wurden.

Hinweis

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, damit Sie die nötigen Berechtigungen zum Aufrufen und Überprüfen von Herkunftsnachweisen für Builds haben:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Generierung der Herkunft konfigurieren

Damit die Build-Herkunft generiert wird, müssen Sie die Blöcke substitutions, options, results und artifacts in Ihrer Datei cloudbuild.yaml wie im folgenden Snippet konfigurieren:

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}'

Herkunftsdaten überprüfen

Sie können die Daten zur Build-Herkunft und die Ausführungsartefakte entweder mit der Cloud de Confiance -Konsole oder mit der Google Cloud CLI ansehen und überprüfen:

Konsole (Cloud Build)

So rufen Sie die Build-Herkunft und Ausgabeartefakte über den Cloud Build-Build-Verlauf auf:

  1. Rufen Sie in der Cloud de Confiance Console die Seite Cloud Build auf.

    Zu Cloud Build

  2. Klicken Sie auf Verlauf und wählen Sie die Build-ID für den Lauf Ihrer Image-Pipeline aus. Auf der Build-Detailseite werden Logs für die drei Prozessschritte (imagebuilder-customize, imagebuilder-validate und imagebuilder-publish) angezeigt.

  3. Klicken Sie auf den Tab Build-Artefakte, um das während der Ausführung erstellte Betriebssystem-Image zu sehen.

  4. Klicken Sie auf den Tab Anhänge, um die signierten SLSA-Herkunftsnachweisdateien und Ergebnisdateien aufzurufen. In der Ergebnisdatei wird das während der Ausführung verwendete Quellbasisbild aufgezeichnet.

Console (Artifact Registry)

So rufen Sie die Build-Herkunft direkt in Artifact Registry auf:

  1. Rufen Sie in der Cloud de Confiance Console die Seite Artifact Registry auf.

    Zu Artifact Registry

  2. Klicken Sie in der Liste der Repositories auf den Namen Ihres generischen Repositorys.

  3. Klicken Sie in der Paketliste auf den Namen Ihres Betriebssystem-Image-Pakets.

  4. Klicken Sie in der Liste des Versionsverlaufs auf die Versions-ID (v${BUILD_ID}) für Ihre Pipelineausführung.

  5. Klicken Sie auf den Tab Anhänge, um die signierten SLSA-Herkunftsnachweisdateien und Ergebnisdateien für diese Bildversion aufzurufen. In der Ergebnisdatei wird das während der Ausführung verwendete Quellbild aufgezeichnet.

gcloud

In Artifact Registry werden Herkunftsnachweise als Anhänge neben den generischen Image-Tarballs gespeichert.

Da die Bestätigung als Dead Simple Signing Envelope (DSSE) formatiert ist, ist die eigentliche Nutzlast der Herkunftserklärung im JSON-Dokument Base64-codiert. So lesen Sie die Details mit der gcloud CLI und dem jq-Dienstprogramm:

  1. Listen Sie die Versionen Ihres Pakets auf, um die spezifische Build-ID-Version zu finden, die Sie überprüfen möchten. Führen Sie dazu den gcloud artifacts versions list-Befehl aus:

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

    Ersetzen Sie Folgendes:

    • PACKAGE_NAME: Der Name des Pakets in Ihrem Artifact Registry-Repository, z. B. my-custom-image.
    • REPOSITORY_NAME: Der Name Ihres generischen Artifact Registry-Repositorys, z. B. custom-os-images.
    • REPOSITORY_LOCATION: die Region Ihres Repositorys, z. B. us-central1.
    • PROJECT_ID: Ihre Projekt-ID.
  2. Führen Sie den Befehl gcloud artifacts attachments list aus, um die Metadaten der Anhänge abzufragen, die der Zielpaketversion entsprechen:

    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
    

    Ersetzen Sie BUILD_ID durch die Versions-ID, die in Schritt 1 zurückgegeben wurde, z. B. 12345.

    Suchen Sie in der Befehlsausgabe nach dem Anhangseintrag, dessen Feld name build-result (mit type: application/vnd.in-toto+json) enthält, und kopieren Sie den unter files: aufgeführten Pfad, z. B.:

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

  3. Laden Sie die JSON-Metadaten-Anhangsnutzlast aus Ihrem Repository herunter, indem Sie den gcloud artifacts files download-Befehl ausführen:

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

    Ersetzen Sie ATTACHMENT_FILE_ID durch den im vorherigen Schritt abgerufenen files:-Anhangspfad.

  4. Führen Sie den folgenden Befehl aus, um den Inhalt der JSON-Nutzlast zu isolieren, mit Base64 zu decodieren und zu formatieren:

    cat ./provenance.json | jq -r '.payload' | base64 --decode | jq
    

    Die Ausgabe enthält Parameter im Standard-SLSA-Format, die den Build-Trigger, Details zum Rezept-Repository, verwendete Container-Images, Build-Hashes und Basis-Image-Attribute hervorheben.