Questo tutorial mostra come utilizzare la OpenSSF Scorecard per verificare le immagini dei contenitori per le best practice di sicurezza della catena di approvvigionamento. Lo Scorecard Attestor viene eseguito nell'ambito della pipeline Cloud Build per generare un'attestazione che può essere verificata da Binary Authorization prima del deployment. Questo passaggio di verifica impedisce il deployment in produzione di artefatti dei container compromessi, il che può evitare diverse classi di vulnerabilità della catena di approvvigionamento.
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 per la sicurezza della catena di approvvigionamento.
Lo strumento Scorecard Attestor è integrato in Scorecard e ti consente di creare attestazioni di Autorizzazione binaria in base a un criterio configurato. Scorecard Attestor esegue il prospetto sul repository SCM di un'immagine contenitore, genera risultati, li valuta in base alle norme e genera un'attestazione se le norme sono soddisfatte.
In questo tutorial, crei un repository di esempio e poi utilizzi Scorecard Attestor. Ogni pipeline di esempio contiene i seguenti passaggi di compilazione:
build
: crea un'immagine del container di esempio.push
: esegui il push dell'immagine in Container Registry.attest
: controlla e firma l'immagine utilizzando Scorecard Attestor per creare un'attestazione in base alle norme.
Nel passaggio attest
di ogni pipeline, Scorecard Attestor esegue le seguenti operazioni:
- Recupera i dati sul repository SCM per l'immagine del contenitore appena creata.
- Esegue Scorecard sui dati non elaborati e valuta il repository SCM in base alle norme specificate dall'utente.
- Se tutti i criteri sono soddisfatti, lo strumento Scorecard Attestor crea l'attestazione.
- Se uno dei criteri non è soddisfatto, lo strumento Scorecard Attestor non crea l'attestazione.
Al momento del deployment, Autorizzazione binaria controlla la presenza di un'attestazione verificabile. In caso contrario, l'applicazione delle norme non consente il deployment dell'immagine.
Costi
Questo tutorial utilizza i seguenti Google Cloud prodotti.
- 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:
- Configura Scorecard Attestor come un builder personalizzato di Cloud Build.
- Visualizza e configura il criterio dell'attestatore prospetto.
- Esegui Scorecard Attestor su un repository di esempio per creare un'attestazione in base a un criterio.
- Esegui Scorecard Attestor su un repository di esempio in modalità solo verifica senza creare un'attestazione. ## Prima di iniziare
In questa sezione esegui una configurazione una tantum del sistema.
Configura l'ambiente
Memorizza il progetto Google Cloud in una variabile di ambiente.
export PROJECT_ID=PROJECT_ID
Sostituisci PROJECT_ID con il tuo progetto Google Cloud.
Imposta l'ID progetto predefinito per il tuo progetto Google Cloud:
gcloud config set project $PROJECT_ID
Memorizza 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)")
Abilita le 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 i seguenti comandi per configurare l'account di servizio Cloud Build con i seguenti ruoli:
containeranalysis.notes.editor
: aggiunge il ruolo Editor di note di analisi degli elementi per gestire l'attestatore.containeranalysis.notes.occurrences.viewer
: aggiunge il ruolo Occorrenze di analisi degli elementi per le note per gestire sia le occorrenze di vulnerabilità sia 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 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
Per creare l'attestazione vengono utilizzate le chiavi di Cloud Key Management Service.
Crea una nuova raccolta di chiavi Cloud KMS con il nomescorecard-attestor-key-ring:
gcloud kms keyrings create scorecard-attestor-key-ring \ --location global
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"
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
Crea l'attestatore di Autorizzazione binaria. In un secondo momento, l'attestatore prospetto 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"
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 Creare chiavi asimmetriche.
Creare attestazioni con Scorecard Attestor in una pipeline Cloud Build
Invia la build di esempio del caso di errore
In questa sezione, crei un'immagine container e ne controlli le pratiche di sicurezza della catena di approvvigionamento con la Scorecard di OpenSSF. L'immagine viene compilata correttamente, ma non viene creata un'attestazione. Il repository di base contiene alcune pratiche di sicurezza della catena di approvvigionamento scoraggiate, come una dipendenza non bloccata a Debian 10 nel Dockerfile e un artefatto binario compilato sottoposto a controllo nel repository di origine. Si tratta di violazioni delle norme di attestazione nel repository.
Clona il repository di test: scorecard-binauthz-test-bad.
Visualizza il file del criterio di attestazione per la richiesta di mancato accreditamento.
cat policy-binauthz.yaml
(Facoltativo) Visualizza il file di configurazione della build per il caso di errore.
cat samples/signer/cloudbuild.yaml
Invia la compilazione:
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"
Salva l'ID build dell'ultima build:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
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 della richiesta di assistenza andata a buon fine
In questa sezione crei un'immagine contenitore che soddisfi il criterio di attestazione della scheda di valutazione. In questo caso, l'Attestatore prospetti crea un'attestazione.
Per inviare la build di esempio del caso di successo a Cloud Build, segui questi passaggi:
Clona il repository di test: scorecard-binauthz-test-good.
Visualizza il file delle norme di attestazione per la richiesta di assistenza.
sh cat policy-binauthz.yaml
(Facoltativo) Visualizza il file di configurazione della build per il caso di errore.
cat samples/signer/cloudbuild.yaml
Invia la compilazione:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Verifica il risultato:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
Recupera l'URL dell'immagine del container creata e controllata tramite prospetto
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 '"')
Verifica che sia stata creata un'attestazione per l'immagine contenitore. Lo strumento di attestazione del prospetto utilizza l'ID nota
ossf-scorecard-attestation
e il nome della notaprojects/${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
- Visualizza la documentazione di Scorecard Attestor
- Scopri di più sul prospetto
- Scopri di più su Autorizzazione binaria
- Crea gli attestatori tramite la console Google Cloud o lo strumento a riga di comando