Verificare la provenienza dell'immagine

Puoi verificare le attestazioni di provenienza della build SLSA (Supply-chain Levels for Software Artifacts) per le immagini del sistema operativo personalizzate per garantire l'integrità della catena di fornitura del software.

Quando configuri la pipeline di Image Builder per l'output in Artifact Registry e abiliti le opzioni di verifica, Cloud Build genera automaticamente un'attestazione crittografica che descrive l'esatto codice sorgente della pipeline, le configurazioni, i parametri di esecuzione e l'immagine di base utilizzati durante la compilazione. La verifica della provenienza della build conferma che le pipeline attendibili hanno creato le immagini in modo sicuro senza manomissioni non autorizzate.

Prima di iniziare

  • Completa i passaggi di configurazione dell'ambiente in Prepara l'ambiente.
  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione verifica la tua identità per l'accesso ad API e servizi Google Cloud . Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    Seleziona la scheda relativa alla modalità di utilizzo degli esempi in questa pagina:

    Console

    Quando utilizzi la Google Cloud console per accedere a Google Cloud servizi e API, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:

      gcloud init

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  • Imposta una regione e una zona predefinite.
  • REST

    Per utilizzare gli esempi di API REST in questa pagina in un ambiente di sviluppo locale, utilizzi le credenziali che fornisci a gcloud CLI.

      Installa Google Cloud CLI.

      Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

    Per saperne di più, consulta Autenticati per usare REST nella Google Cloud documentazione sull'autenticazione di.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per visualizzare e verificare le attestazioni di provenienza della build, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Configurare la generazione della provenienza

Per generare la provenienza della build, assicurati di configurare i blocchi substitutions, options, results e artifacts nel file cloudbuild.yaml come mostrato nel seguente snippet:

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

Verificare i dati di provenienza

Puoi visualizzare e verificare i dati di provenienza della build e gli artefatti di esecuzione utilizzando la Google Cloud console o Google Cloud CLI:

Console (Cloud Build)

Per visualizzare la provenienza della build e gli artefatti di output tramite la cronologia delle build di Cloud Build:

  1. Nella Google Cloud console, vai alla pagina Cloud Build.

    Vai a Cloud Build

  2. Fai clic su Cronologia e seleziona l'ID build per l'esecuzione della pipeline di immagini. La pagina dei dettagli della build mostra i log per i tre passaggi del processo (imagebuilder-customize, imagebuilder-validate e imagebuilder-publish).

  3. Fai clic sulla scheda Artefatti della build per visualizzare l'immagine del sistema operativo esatta creata durante l'esecuzione.

  4. Fai clic sulla scheda Allegati per visualizzare i file di attestazione della provenienza SLSA firmati e i file dei risultati. Il file dei risultati registra l'immagine di base di origine utilizzata durante l'esecuzione.

Console (Artifact Registry)

Per visualizzare la provenienza della build direttamente in Artifact Registry:

  1. Nella Google Cloud console, vai alla pagina Artifact Registry.

    Vai ad Artifact Registry

  2. Nell'elenco dei repository, fai clic sul nome del repository generico.

  3. Nell'elenco dei pacchetti, fai clic sul nome del pacchetto dell'immagine del sistema operativo.

  4. Nell'elenco della cronologia delle versioni, fai clic sull'ID versione (v${BUILD_ID}) per l'esecuzione della pipeline.

  5. Fai clic sulla scheda Allegati per visualizzare i file di attestazione della provenienza SLSA firmati e i file dei risultati per la versione dell'immagine. Il file dei risultati registra l'immagine di origine di base utilizzata durante l'esecuzione.

gcloud

Artifact Registry archivia i record di provenienza come file di allegati insieme ai tarball delle immagini generiche.

Poiché l'attestazione è formattata come un Dead Simple Signing Envelope (DSSE), il payload dell'istruzione di provenienza effettivo all'interno del JSON è codificato in base64. Per leggere i dettagli, segui questi passaggi utilizzando gcloud CLI e l'utilità jq:

  1. Elenca le versioni del pacchetto per individuare la versione dell'ID build specifica che vuoi verificare eseguendo il comando gcloud artifacts versions list:

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

    Sostituisci quanto segue:

    • PACKAGE_NAME: il nome del pacchetto nel repository Artifact Registry, ad esempio my-custom-image.
    • REPOSITORY_NAME: il nome del repository Artifact Registry generico, ad esempio custom-os-images.
    • REPOSITORY_LOCATION: la regione del repository, ad esempio us-central1.
    • PROJECT_ID: il tuo ID progetto.
  2. Esegui una query sui metadati degli allegati che corrispondono alla versione del pacchetto di destinazione eseguendo il comando 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
    

    Sostituisci BUILD_ID con l'identificatore della versione restituito nel passaggio 1, ad esempio 12345.

    Nell'output del comando, individua la voce dell'allegato il cui campo name contiene build-result (con type: application/vnd.in-toto+json) e copia il percorso elencato in files:, ad esempio:

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

  3. Scarica il payload dell'allegato dei metadati JSON dal repository eseguendo il comando gcloud artifacts files download:

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

    Sostituisci ATTACHMENT_FILE_ID con il percorso dell'allegato files: recuperato nel passaggio precedente.

  4. Esegui il comando seguente per isolare, decodificare in base64 e formattare i contenuti del payload JSON:

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

    L'output contiene i parametri del formato SLSA standard che evidenziano il trigger di build, i dettagli del repository della ricetta, le immagini container utilizzate, gli hash della build e gli attributi dell'immagine di base.