Questo tutorial mostra come utilizzare il prospetto OpenSSF per controllare le immagini container per le best practice per la sicurezza della catena di fornitura. L'attestatore prospetto viene eseguito come parte della pipeline 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 dei container compromessi, il che può impedire diverse classi di vulnerabilità della catena di fornitura.
Panoramica
Open Source Security Foundation (OpenSSF) è un'organizzazione che fornisce strumenti, servizi e infrastruttura per iniziative di sicurezza open source. Il prospetto è 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 fornitura.
Lo strumento di attestazione prospetto è uno strumento integrato nel prospetto che ti consente di creare attestazioni di autorizzazione binaria in base a un criterio che configuri. L'attestatore di prospetto esegue il prospetto in base al repository SCM di un'immagine container, genera i risultati, valuta i risultati rispetto al criterio e genera un'attestazione se il criterio è soddisfatto.
In questo tutorial creerai un repository di esempio e quindi utilizzerai lo strumento attestatore prospetto. Ogni pipeline di esempio contiene i seguenti passaggi di build:
build
: crea un'immagine container di esempio.push
: esegui il push dell'immagine a Container Registry.attest
: controlla e firma l'immagine, utilizzando lo strumento di attestazione prospetto per creare un'attestazione basata sul criterio.
Nel passaggio attest
di ogni pipeline, l'attestatore del prospetto esegue le seguenti operazioni:
- Recupera i dati sul repository SCM per l'immagine container di nuova creazione.
- Esegue Scorecard sui dati non elaborati e valuta il repository SCM in base al criterio specificato dall'utente.
- Se tutti i criteri sono soddisfatti, l'attestatore prospetto crea l'attestazione.
- Se uno dei criteri non è soddisfatto, l'attestatore del prospetto non crea l'attestazione.
Al momento del deployment, Autorizzazione binaria verifica la presenza di un'attestazione verificabile. Senza questo requisito, l'autore della rivendicazione 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
Usa il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Obiettivi
In questo tutorial, segui questi passaggi:
- Configura lo strumento di attestazione prospetto come builder personalizzato di Cloud Build.
- Visualizza e configura il criterio dello strumento di attestazione prospetto.
- Esegui lo strumento di attestazione prospetto su un repository di esempio per creare un'attestazione basata su un criterio.
- Esegui lo strumento di attestazione della scheda punteggi su un repository di esempio in modalità di sola verifica, senza creare un'attestazione. ## Prima di iniziare
In questa sezione eseguirai una configurazione una tantum del sistema.
Configura l'ambiente
Archivia il tuo 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 sul tuo progetto Google Cloud:
gcloud config set project $PROJECT_ID
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)")
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
Configura i 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 analisi degli artefatti per gestire l'attestatore.containeranalysis.notes.occurrences.viewer
: aggiunge il ruolo Occorrenze dell'analisi degli artefatti per le note per gestire le vulnerabilità e le occorrenze di attestazione.roles/containeranalysis.occurrences.editor
: aggiunge il ruolo Editor occorrenze Artifacts Analisi per creare occorrenze di attestazione in Artifact 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.
Crea un nuovo keyring Cloud KMS con il nome scorecard-attestor-key-ring:
gcloud kms keyrings create scorecard-attestor-key-ring \ --location global
Crea una nuova chiave Cloud KMS denominata scorecard-attestor-keynel 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"
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
Crea l'attestatore di Autorizzazione binaria. In seguito, 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 Creazione di chiavi asimmetriche.
Crea attestazioni con attestatore prospetto in una pipeline Cloud Build
Invia la build di esempio della richiesta di errore
In questa sezione creerai un'immagine container e ne controllerai le pratiche di sicurezza della catena di fornitura con OpenSSF Scorecard. L'immagine viene creata correttamente, ma non viene creata 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 inserito nel repository di origine. Si tratta di violazioni del criterio di attestazione nel repository.
Clona il repository di test: scorecard-binauthz-test-bad.
Visualizza il file del criterio di attestazione per la richiesta di errore.
cat policy-binauthz.yaml
(Facoltativo) Visualizza il file di configurazione di compilazione per la richiesta di errore.
cat samples/signer/cloudbuild.yaml
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"
Salva l'ID build dell'ultima build:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
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 del caso di successo
In questa sezione creerai un'immagine container che soddisfa i criteri di attestazione del prospetto. In questo caso, l'Attestatore di prospetto crea un'attestazione.
Per inviare la build di esempio del caso di successo a Cloud Build, procedi nel seguente modo:
Clona il repository di test: scorecard-binauthz-test-good.
Visualizza il file del criterio di attestazione per la richiesta di errore.
sh cat policy-binauthz.yaml
(Facoltativo) Visualizza il file di configurazione di compilazione per la richiesta di errore.
cat samples/signer/cloudbuild.yaml
Invia la build:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Verifica il risultato:
gsutil cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
Ottieni l'URL dell'immagine container che è stata creata e controllata dal 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 '"')
Verifica che sia stata creata un'attestazione per l'immagine container. L'attestatore 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 pulire le risorse utilizzate in questo documento, puoi eliminare il progetto:
gcloud projects delete $PROJECT_ID
Passaggi successivi
- Visualizza la documentazione dell'attestatore prospetto
- Scopri di più sul prospetto
- Scopri di più su Autorizzazione binaria
- Crea attestatori tramite la console Google Cloud o lo strumento a riga di comando