Verificare la provenienza della build

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

  1. Per verificare la provenienza della build, installa lo strumento aoss-verifier.

  2. Esporta $(go env GOPATH)/bin ed esegui il comando aoss-verifier verify-package con 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 jar per un pacchetto Java
      • Estensione file whl per un pacchetto Python

    --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 cartella tmp_downloads della 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:

  1. Recupera la provenienza della build.

    A seconda di come accedi ai metadati di sicurezza, la provenienza della build viene accessibile in modo diverso.

    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…"
    .....
    
    

    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"
      }
    }
    ,
    
    
    
  2. 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:

    1. Archivia i dati sig in un file denominato signature.txt.
    2. 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.sig
      

      Se 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
      
  3. 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:

    1. gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME
    2. gcpkms://projects/cloud-aoss/locations/global/keyRings/cloud-aoss-ring/cryptoKeys/KEY_NAME/cryptoKeyVersions/KEY_VERSION

      Dove 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_STORE
      
    • Se 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.
  4. Verifica la firma di provenienza.

    1. 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/null
      

      Sostituisci 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 OK

    2. Per 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_PATH 
      

      Sostituisci 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

Passaggi successivi