Crea attestazioni con OpenSSF Scorecard

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo tutorial illustra come utilizzare il prospetto OpenSSF per controllare le immagini container per le best practice per la sicurezza della catena di fornitura. Il programma Scorecard Attestor viene eseguito come parte della pipeline di Cloud Build per generare un'attestazione che possa essere verificata da Autorizzazione binaria prima del deployment. Questo passaggio di verifica impedisce il deployment in produzione degli artefatti di container compromessi, il che può impedire diverse classi di vulnerabilità della catena di fornitura.

Panoramica

OpenS Security Foundation (OpenSSF) è un'organizzazione che offre strumenti, servizi e infrastruttura per iniziative di sicurezza open source. Scorecard è uno strumento gestito da OpenSSF che esegue la scansione dei repository di gestione del codice sorgente (SCM) per identificare le best practice per la sicurezza della catena di fornitura.

Scorecard Attestor è uno strumento integrato nel prospetto che consente di creare attestazioni di autorizzazione binaria in base a un criterio configurato. Scorecard Attestor esegue il prospetto in base al repository SCM di un'immagine container, genera risultati, valuta i risultati rispetto al criterio e genera un'attestazione se il criterio viene soddisfatto.

In questo tutorial, creerai un repository di esempio e quindi utilizzerai lo strumento di attestazione prospetto. Ogni pipeline di esempio contiene i seguenti passaggi di compilazione:

  1. build: crea un'immagine container di esempio.
  2. push: esegui il push dell'immagine a Container Registry.
  3. attest: controlla e firma l'immagine, utilizzando Scorecard Attestor per creare un'attestazione basata su criteri.

Nel passaggio attest di ogni pipeline, Scorecard Attestor esegue le seguenti operazioni:

  1. Recupera i dati sul repository SCM per l'immagine container appena creata.
  2. Esegue il prospetto sui dati non elaborati e valuta il repository SCM in base al criterio specificato dall'utente.
    1. Se tutte le norme sono soddisfatte, l'Attestatore Scorecard crea l'attestazione.
    2. Se una delle norme non viene soddisfatta, l'Attestatore prospetto non crea l'attestazione.

Al momento del deployment, Autorizzazione binaria verifica la presenza di un'attestazione verificabile. Senza un tag, l'applicazione forzata non consente il deployment dell'immagine.

Costi

Questo tutorial utilizza i seguenti prodotti Google Cloud.

  • Container Registry
  • Container Analysis
  • Cloud Build
  • Cloud Key Management Service

Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Obiettivi

In questo tutorial:

  1. Configura Scorecard Attestor come builder personalizzato di Cloud Build.
  2. Visualizza e configura il criterio Scorecard Attestor.
  3. Eseguire lo strumento di attestazione prospetto su un repository di esempio per creare un'attestazione basata su un criterio.
  4. Esegui il programma Scorecard Attestor su un repository di esempio in modalità di sola verifica senza creare un'attestazione. ## Prima di iniziare

In questa sezione eseguirai la configurazione del sistema una tantum.

Configura l'ambiente

  1. Archiviare il progetto Google Cloud in una variabile di ambiente.

    export PROJECT_ID=PROJECT_ID
    

    Sostituisci PROJECT_ID con il tuo progetto Google Cloud.

  2. Imposta l'ID progetto predefinito sul tuo progetto Google Cloud:

    gcloud config set project $PROJECT_ID
    
  3. Archivia il numero del progetto in una variabile di ambiente per i passaggi futuri:

    export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \
     --format="value(PROJECT_NUMBER)")
    
  4. Abilita le API:

    Per garantire che i servizi richiesti per questa guida siano abilitati, esegui questo comando:

    gcloud services enable \
      cloudbuild.googleapis.com \
      containerregistry.googleapis.com \
      containerscanning.googleapis.com \
      cloudkms.googleapis.com
    

Configura ruoli IAM

Esegui i comandi seguenti per configurare l'account di servizio Cloud Build con i ruoli seguenti:

  • containeranalysis.notes.editor: aggiunge il ruolo Editor note di Container Analysis per gestire l'attestatore.
  • containeranalysis.notes.occurrences.viewer: aggiunge il ruolo Occorrenze di Container Analysis per le note per gestire sia le vulnerabilità sia le occorrenze di attestazione.
  • roles/containeranalysis.occurrences.editor: aggiunge il ruolo Editor occorrenze di Container Analysis per creare occorrenze di attestazione in Container Analysis.
  • cloudkms.signer: aggiunge il ruolo Signer CryptoKey Cloud KMS che consente all'account di servizio di accedere al servizio di firma Cloud KMS.

    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.editor
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.occurrences.viewer
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.occurrences.editor
    gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/cloudkms.signer
    

Crea una chiave di firma Cloud KMS

Le chiavi di Cloud Key Management Service vengono utilizzate per creare l'attestazione.

  1. Crea un nuovo keyring Cloud KMS con il nome scorecard-attestor-key-ring:

    gcloud kms keyrings create scorecard-attestor-key-ring \
        --location global
    
  2. Crea una nuova chiave Cloud KMS denominata scorecard-attestor-key nel keyring:

    gcloud kms keys create scorecard-attestor-key \
        --keyring scorecard-attestor-key-ring \
        --location global \
        --purpose "asymmetric-signing" \
        --default-algorithm "rsa-sign-pkcs1-2048-sha256"
    
  3. Archivia l'algoritmo digest e Cloud KMS in una variabile di ambiente per i passaggi futuri:

    export KMS_DIGEST_ALG=SHA256
    export KMS_KEY_NAME=projects/$PROJECT_ID/locations/global/keyRings/scorecard-attestor-key-ring/cryptoKeys/scorecard-attestor-key/cryptoKeyVersions/1
    
  4. Crea l'attestatore di Autorizzazione binaria. Successivamente, Scorecard Attestor crea una nota associata a questo attestatore.

    gcloud container binauthz attestors create scorecard-attestor \
        --attestation-authority-note=scorecard-attestation \
        --attestation-authority-note-project=$PROJECT_ID \
        --description="Attest that ossf/scorecard policy checks pass"
    
  5. Associa l'attestatore di Autorizzazione binaria alla chiave KMS:

    gcloud container binauthz attestors public-keys add \
        --attestor=scorecard-attestor \
        --keyversion=1 \
        --keyversion-key=scorecard-attestor-key \
        --keyversion-keyring=scorecard-attestor-key-ring \
        --keyversion-location=global \
        --keyversion-project=$PROJECT_ID
    

Per esplorare altri algoritmi di firma, consulta Creazione di chiavi asimmetriche.

Crea attestazioni con Scorecard Attestor in una pipeline di Cloud Build

Invia la build di esempio con errori

In questa sezione creerai un'immagine container e ne controllerai le prassi di sicurezza della catena di fornitura con OpenSSF Scorecard. L'immagine viene creata correttamente, ma non crea un'attestazione. Il repository di base contiene alcune pratiche di sicurezza per la catena di fornitura, sconsigliate, come una dipendenza sbloccata da Debian 10 nel Dockerfile e un artefatto binario compilato nel repository di origine. Si tratta di violazioni del criterio di attestazione nel repository.

  1. Clona il repository di test: scorecard-binauthz-test-bad.

  2. Visualizza il file del criterio di attestazione per il caso di errore.

    cat policy-binauthz.yaml
    
  3. (Facoltativo) Visualizza il file di configurazione della build per il caso di errore.

    cat samples/signer/cloudbuild.yaml
    
  4. Invia la build:

    gcloud builds submit \
        --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \
        --config=cloudbuild.yaml
    

Dovresti vedere un output simile al seguente:

time="2022-12-20T22:30:14Z" level=info msg="image failed scorecard attestation policy check"
  1. Salva l'ID build dall'ultima build:

    export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
    
  2. Verifica il risultato:

    gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
    

Invia la build di esempio con successo

In questa sezione creerai un'immagine container che soddisfi i suoi criteri di attestazione del prospetto. In questo caso, l'Attestatore prospetto crea un'attestazione.

Per inviare la build di esempio con successo a Cloud Build, procedi come segue:

  1. Clona il repository di test: scorecard-binauthz-test-good.

  2. Visualizza il file del criterio di attestazione per il caso di errore. sh cat policy-binauthz.yaml

  3. (Facoltativo) Visualizza il file di configurazione della build per il caso di errore.

    cat samples/signer/cloudbuild.yaml
    
  4. Invia la build:

    gcloud builds submit \
        --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \
        --config=cloudbuild.yaml
    
  5. Verifica il risultato:

    gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
    
  6. Ottieni l'URL dell'immagine container che è stata creata e controllata tramite il prospetto

    export IMAGE_URI=$(gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep -o "Attestation for image .* is successfully uploaded" txt | cut -d' ' -f4 | tr -d '"')
    
  7. Verifica che sia stata creata un'attestazione per l'immagine container. Il programma di attestazione prospetto utilizza l'ID nota ossf-scorecard-attestation e il nome della nota projects/${PROJECT_ID}/notes/ossf-scorecard-attestation.

    gcloud container binauthz attestations list \
        --attestor="projects/${PROJECT_ID}/attestors/ossf-scorecard-attestor" \
        --filter="resourceUri='https://${IMAGE_URI}'"
    

Esegui la pulizia

Per pulire le risorse utilizzate in questo documento, puoi eliminare il progetto:

gcloud projects delete $PROJECT_ID

Passaggi successivi