I pacchetti Assured OSS sono creati in conformità con lo SLSA livello 2. La provenienza della build viene fornita nell'ambito dei metadati di sicurezza. Questa pagina spiega come verificare i metadati di provenienza della build.
Questo documento si applica al livello senza costi. Per informazioni sulla provenienza della build nel livello premium, vedi Accedere ai metadati di sicurezza e verificare i pacchetti.
Prima di iniziare
- Installa cosign per verificare la firma nella provenienza della build.
Configura l'autenticazione
Per informazioni sulla configurazione dell'autenticazione, vedi Configurare l'autenticazione.
Verificare la provenienza della build
La provenienza della build viene firmata utilizzando un'attestazione in-toto che a sua volta utilizza il formato di busta DSSE. Ciò significa che la firma generata contiene la firma wrapper e i dati non elaborati.
Utilizzo dello strumento aoss-verifier
Per verificare la provenienza della build, installa lo strumento aoss-verifier.
Esporta
$(go env GOPATH)/bined esegui il comandoaoss-verifier verify-packagecon il flag--verify_build_provenance.aoss-verifier verify-package \ --language LANGUAGE \ --package_id PACKAGE_ID \ --version VERSION \ --artifact_path ARTIFACT_PATH \ --verify_build_provenance \ [--disable_certificate_verification] \ [--temp_downloads_path TEMP_DOWNLOADS_DIR_PATH] \ [--disable_deletes]Sostituisci quanto segue:
- LANGUAGE: la lingua del pacchetto. Il valore deve essere in minuscolo.
- PACKAGE_ID: per Java, il formato è groupId:artifactId. Per Python, il formato è packageName. Il valore deve essere in minuscolo.
- VERSION: la versione del pacchetto.
- ARTIFACT_PATH: il percorso del file di dati nella directory locale che vuoi verificare. Utilizza le seguenti estensioni
dei nomi dei file:
- Estensione del file
jarper un pacchetto Java - Estensione file
whlper un pacchetto Python
- Estensione del file
--disable_certificate_verificationè un flag facoltativo che, se utilizzato, salta la corrispondenza tra il certificato foglia e il certificato radice tramite la catena di certificati.--temp_downloads_pathè un flag facoltativo per impostare il percorso in cui vuoi scaricare i file. Sostituisci TEMP_DOWNLOADS_DIR_PATH. Se questo flag non è impostato, i file vengono scaricati nella cartellatmp_downloadsdella directory attuale.--disable_deletesè un flag facoltativo che conserva i file scaricati. Per impostazione predefinita, lo strumento pulisce tutti i file scaricati.
Per saperne di più, consulta il file README dello strumento.
Verifica manuale
Per verificare la provenienza della build:
Recupera la provenienza della build.
A seconda di come accedi ai metadati di sicurezza, la provenienza della build viene accessibile in modo diverso.
- Se accedi ai metadati di sicurezza utilizzando Cloud Storage, la provenienza della build è disponibile come parte dei metadati
Build Informationnel campobuildDetails.
Per ulteriori informazioni, consulta il seguente snippet di metadati di esempio:
{ "creationTime": "2023-03-25T05:32:23Z", "buildDetails": [ { "packageFileName": "jackson-databind-2.13.3.jar", "envelope": { "payload": "eyJfdHlwZSI6Imh0d……………", "payloadType": "application/vnd.in-toto+json", "signatures": [ "sig": "eyJwYXlsb2FkVHlwZSI6Im……", "keyid": "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains" } ] }, "buildProvenance": "{\"_type\":\"https://in-toto.io/Statement/v0.1…" .....- Se accedi ai metadati di sicurezza utilizzando l'API Artifact Analysis,
la provenienza della build viene memorizzata nella sezione
BuildOccurrencedei metadati di sicurezza.
Snippet di metadati di esempio:
{'BuildOccurrence': name: "projects/cloud-aoss/occurrences/06c514bb-1069-4cde-8d68-b1306f19535a" resource_uri: "jackson-databind-2.13.3.jar@sha256:4c01a14673bc1cd4a2df337a3b4e695af0a6ed8ac6be19c9e4077377fb8adf92" note_name: "projects/cloud-aoss/notes/tekton-cloudbuild-intoto" kind: BUILD create_time { seconds: 1665556616 nanos: 891004000 } …… …… } envelope { payload: "{\"_type\":\"https://in-toto.io/Statement/v0.1\", ….." payload_type: "application/vnd.in-toto+json" signatures { sig: "{\"payloadType\":\"application/vnd.in-toto+json\",....." keyid: "gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/tekton-chains" } } , …- Se accedi ai metadati di sicurezza utilizzando Cloud Storage, la provenienza della build è disponibile come parte dei metadati
Recupera la firma della provenienza della build.
La provenienza della build contiene una sezione denominata Envelope che contiene le firme come EnvelopeSignature. Per recuperare la firma, segui questi passaggi:
- Archivia i dati
sigin un file denominatosignature.txt. Verifica se i metadati vengono scaricati utilizzando lo script dei metadati.
Se i metadati vengono scaricati utilizzando lo script dei metadati, modifica la firma e archiviala in un altro file denominato
signature.sig.Per modificare la firma, esegui questo comando:
cat signature.txt | sed -e 's/\\"/"/g' > signature.sigSe i metadati non vengono scaricati utilizzando lo script dei metadati, decodifica la firma e memorizzala in un altro file denominato
signature.sig.Per decodificare la firma, utilizza il seguente comando:
cat signature.txt | tr '\-_' '+/' | base64 -d > signature.sig
- Archivia i dati
Recupera la chiave pubblica della provenienza della build.
La sezione EnvelopeSignature in build provenance contiene il riferimento alla chiave utilizzata per firmare la provenienza della build. La chiave viene memorizzata in uno dei seguenti formati:
gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAMEgcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSIONDove KEY_NAME e KEY_VERSION sono il nome e la versione della chiave Cloud Key Management Service.
La chiave pubblica è archiviata in un bucket Cloud Storage di proprietà di Assured OSS.
Recupera la chiave pubblica utilizzando Google Cloud CLI. Utilizza uno dei seguenti comandi:
Se è presente solo KEY_NAME:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-public.pem PATH_TO_LOCAL_STORESe sono presenti sia KEY_NAME che KEY_VERSION:
gcloud storage cp gs://cloud-aoss/keys/KEY_NAME-KEY_VERSION-public.pem PATH_TO_LOCAL_STORE
Sostituisci quanto segue :
- KEY_NAME con il nome della chiave Cloud Key Management Service.
- KEY_VERSION con la versione della chiave Cloud Key Management Service.
- PATH_TO_LOCAL_STORE con il nome del percorso locale per l'archiviazione della chiave pubblica.
Verifica la firma di provenienza.
Per verificare la firma, esegui questo comando:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=false /dev/nullSostituisci quanto segue:
- KEY_REF: il percorso della chiave pubblica scaricata nel passaggio precedente.
- signature.sig: Il file contenente la firma recuperata nel passaggio precedente.
Dopo l'esecuzione corretta del comando, viene restituito il seguente output:
Verified OKPer verificare anche l'hash dell'artefatto associato alla provenienza, utilizza il seguente comando:
cosign verify-blob-attestation --insecure-ignore-tlog --key KEY_REF --signature signature.sig --type slsaprovenance --check-claims=true ARTIFACT_PATHSostituisci quanto segue:
- KEY_REF: il percorso della chiave pubblica scaricata nel passaggio precedente.
- signature.sig: Il file contenente la firma recuperata nel passaggio precedente.
- ARTIFACT_PATH: il percorso dell'artefatto.
Dopo l'esecuzione corretta del comando, viene restituito il seguente output:
Verified OK