Creare attestazioni con il prospetto OpenSSF

Questo tutorial mostra come utilizzare OpenSSF Scorecard per controllare le immagini container in base alle best practice di sicurezza della supply chain. L'attestatore della scheda di valutazione viene eseguito nell'ambito della pipeline Cloud Build per generare un'attestazione che può essere verificata da Autorizzazione binaria prima del deployment. Questo passaggio di verifica impedisce l'implementazione in produzione di artefatti container compromessi, il che può prevenire diverse classi di vulnerabilità della supply chain.

Panoramica

Open Source Security Foundation (OpenSSF) è un'organizzazione che fornisce strumenti, servizi e infrastrutture per le iniziative di sicurezza open source. Scorecard è uno strumento, gestito da OpenSSF, che esegue la scansione dei repository di gestione del codice sorgente (SCM) per individuare le best practice di sicurezza della supply chain.

Scorecard Attestor è uno strumento integrato in Scorecard che ti consente di creare attestazioni di Autorizzazione binaria in base a un criterio che configuri. Scorecard Attestor esegue Scorecard sul repository SCM di un'immagine container, genera risultati, li valuta in base al criterio e genera un'attestazione se il criterio è soddisfatto.

In questo tutorial, creerai un repository di esempio e poi utilizzerai Scorecard Attestor. Ogni pipeline di esempio contiene i seguenti passaggi di build:

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

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 Scorecard sui dati non elaborati e valuta il repository SCM in base alle norme specificate dall'utente.
    1. Se tutti i criteri sono soddisfatti, Scorecard Attestor crea l'attestazione.
    2. Se una delle norme non viene soddisfatta, Scorecard Attestor non crea l'attestazione.

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

Costi

Questo tutorial utilizza i seguenti prodotti Google Cloud .

  • Container Registry
  • Artifact 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 imparerai a:

  1. Configura Scorecard Attestor come builder personalizzato di Cloud Build.
  2. Visualizza e configura i criteri di attestazione della scheda.
  3. Esegui Scorecard Attestor su un repository di esempio per creare un'attestazione basata su un criterio.
  4. Esegui Scorecard Attestor su un repository di esempio in modalità di sola verifica senza creare un'attestazione. ## Prima di iniziare

In questa sezione, esegui una configurazione una tantum del sistema.

Configura l'ambiente

  1. Memorizza il tuo 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. Memorizza il numero di 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 API:

    Per assicurarti 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
    

Configurare i ruoli IAM

Esegui questi comandi per configurare il account di servizio Cloud Build con i seguenti ruoli:

  • containeranalysis.notes.editor: aggiunge il ruolo Editor note analisi artefatti per gestire l'attestatore.
  • containeranalysis.notes.occurrences.viewer: aggiunge il ruolo Occorrenze di analisi degli artefatti per le note per gestire sia le occorrenze di vulnerabilità che quelle di attestazione.
  • roles/containeranalysis.occurrences.editor: aggiunge il ruolo Editor occorrenze Artifact Analysis per creare occorrenze di attestazione in Artifact Analysis.
  • cloudkms.signer: aggiunge il ruolo Firmatario Cloud KMS CryptoKey che consente alaccount di serviziot 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 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 all'interno del 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. Memorizza l'algoritmo di 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. In un secondo momento, 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 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.

Creare attestazioni con Scorecard Attestor in una pipeline Cloud Build

Invia la build di esempio per lo scenario di errore

In questa sezione, crei un'immagine container e controlli le relative pratiche di sicurezza della supply chain con OpenSSF Scorecard. La build dell'immagine viene eseguita correttamente, ma non viene creata un'attestazione. Il repository di base contiene alcune pratiche di sicurezza della supply chain sconsigliate, come una dipendenza non bloccata da Debian 10 nel Dockerfile e un artefatto binario compilato archiviato nel repository di origine. Si tratta di violazioni delle norme di attestazione nel repository.

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

  2. Visualizza il file dei criteri di attestazione per lo scenario di errore.

    cat policy-binauthz.yaml
    
  3. (Facoltativo) Visualizza il file di configurazione della build per lo scenario 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 dell'ultima build:

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

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

Invia la build di esempio di caso di successo

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

Per inviare la build di esempio di caso di successo a Cloud Build:

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

  2. Visualizza il file delle norme di attestazione per lo scenario di errore. sh cat policy-binauthz.yaml

  3. (Facoltativo) Visualizza il file di configurazione della build per lo scenario 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:

    gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
    
  6. Recupera l'URL dell'immagine container creata e controllata da scorecard

    export IMAGE_URI=$(gcloud storage 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. Scorecard Attestor 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 eliminare le risorse utilizzate in questo documento, puoi eliminare il progetto:

gcloud projects delete $PROJECT_ID

Passaggi successivi