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
-
Installa Google Cloud CLI. Dopo l'installazione, inizializza Google Cloud CLI eseguendo il comando seguente:
gcloud initSe 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:
- Lettore di Artifact Registry (
roles/artifactregistry.reader) - Visualizzatore di Cloud Build (
roles/cloudbuild.builds.viewer)
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:
Nella Google Cloud console, vai alla pagina Cloud Build.
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-validateeimagebuilder-publish).Fai clic sulla scheda Artefatti della build per visualizzare l'immagine del sistema operativo esatta creata durante l'esecuzione.
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:
Nella Google Cloud console, vai alla pagina Artifact Registry.
Nell'elenco dei repository, fai clic sul nome del repository generico.
Nell'elenco dei pacchetti, fai clic sul nome del pacchetto dell'immagine del sistema operativo.
Nell'elenco della cronologia delle versioni, fai clic sull'ID versione (
v${BUILD_ID}) per l'esecuzione della pipeline.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:
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_IDSostituisci quanto segue:
PACKAGE_NAME: il nome del pacchetto nel repository Artifact Registry, ad esempiomy-custom-image.REPOSITORY_NAME: il nome del repository Artifact Registry generico, ad esempiocustom-os-images.REPOSITORY_LOCATION: la regione del repository, ad esempious-central1.PROJECT_ID: il tuo ID progetto.
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_IDSostituisci
BUILD_IDcon l'identificatore della versione restituito nel passaggio 1, ad esempio12345.Nell'output del comando, individua la voce dell'allegato il cui campo
namecontienebuild-result(contype: application/vnd.in-toto+json) e copia il percorso elencato infiles:, ad esempio:projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_NAME/files/sha256:SHA256_HASHScarica 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.jsonSostituisci
ATTACHMENT_FILE_IDcon il percorso dell'allegatofiles:recuperato nel passaggio precedente.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.