Questo tutorial descrive come configurare e utilizzare Voucher per creare attestazioni di Autorizzazione binaria.
Panoramica del coupon
Voucher è uno strumento open source che esegue una suite di controlli sulle immagini container prima di creare attestations di Autorizzazione binaria per le immagini. Il voucher ha un componente client e un componente server. Esegui Voucher Client come passaggio aggiuntivo nella pipeline di build, dopo il passaggio che crea l'immagine. Quando viene eseguito il passaggio di creazione del client coupon, l'immagine viene inviata al server coupon, che esegue i controlli. Puoi definire i controlli eseguiti da Voucher e altri criteri nel file di configurazione del server dei coupon.
Questo tutorial mostra come utilizzare il controllo snakeoil
del coupon per testare le vulnerabilità nelle immagini. Puoi abilitare il controllo nel file di configurazione impostando l'opzione fail-on
su una soglia di vulnerabilità, come mostrato più avanti in questo tutorial.
Al termine del controllo snakeoil
, se tutte le vulnerabilità identificate scendono al di sotto della soglia, il server voucher crea l'attestazione di Autorizzazione binaria per l'immagine. Se una delle vulnerabilità identificate soddisfa o supera la soglia, il server voucher non crea un'attestazione.
Al momento del deployment dell'immagine container, senza un'attestazione verificata, l'applicazione forzata di Autorizzazione binaria non consente il deployment dell'immagine.
Obiettivi
In questa guida:
- Configura il server voucher in Cloud Run.
- Configura il client voucher.
- Utilizza Voucher in pipeline di build di esempio.
Costi
Questa guida utilizza i seguenti prodotti Google Cloud.
- Container Registry
- Artifact Analysis
- Cloud Build
- Cloud Key Management Service
- Cloud Run
Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Cloud Build, Container Registry, Artifact Analysis, Cloud KMS, Cloud Run, and Identity and Access Management.
- Installa Google Cloud CLI.
-
Per initialize gcloud CLI, esegui questo comando:
gcloud init
- Ti consigliamo di configurare Autorizzazione binaria con Google Kubernetes Engine. Questo tutorial descrive come creare un'attestazione. Per utilizzare l'applicazione forzata in fase di deployment per verificare l'attestazione ed eseguire il deployment dell'immagine associata, è necessario configurare Autorizzazione binaria. Assicurati di configurare il criterio in modo da richiedere le attestazioni. Puoi configurare il criterio nella console Google Cloud o dalla riga di comando.
-
Specifica il progetto Google Cloud in una variabile di ambiente.
export PROJECT_ID=PROJECT_ID
Sostituisci PROJECT_ID con l'ID progetto.
-
Imposta l'ID progetto per i comandi
gcloud
:gcloud config set project ${PROJECT_ID}
-
Specifica il numero del progetto in una variabile di ambiente per i passaggi futuri:
export PROJECT_NUMBER=$(gcloud projects describe "${PROJECT_ID}" \ --format='value(project_number)')
Configura server coupon
Nei passaggi seguenti puoi configurare il server dei coupon.
Crea una chiave di firma di Cloud Key Management Service
In questa sezione creerai la chiave utilizzata dal server dei coupon per creare un'attestazione di Autorizzazione binaria.
Crea un keyring:
gcloud kms keyrings create KEY_RING\ --location global
Sostituisci KEY_RING con il nome di un keyring, ad esempio
voucher-key-ring
.Crea una chiave di firma:
gcloud kms keys create KEY_NAME \ --keyring KEY_RING \ --location global \ --purpose "asymmetric-signing" \ --default-algorithm "rsa-sign-pkcs1-4096-sha512"
Sostituisci KEY_NAME con il nome di una chiave, ad esempio
voucher-key
.Archivia l'ID risorsa della versione della chiave Cloud Key Management Service:
export KMS_RESOURCE_ID=projects/$PROJECT_ID/locations/global/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
Concedi il ruolo
cloudkms.signer
all'account di servizio del motore di runtime di Compute Engine.In questo passaggio, concederai il ruolo
cloudkms.signer
all'account di servizio che esegue il server voucher. In questo modo Voucher Server può firmare le attestazioni con le chiavi di Cloud Key Management Service. Per farlo, esegui questo comando:gcloud kms keys add-iam-policy-binding\ KEY_NAME --keyring=KEY_RING\ --location=global\ --member=serviceAccount:${PROJECT_NUMBER}-compute@developer.gserviceaccount.com\ --role=roles/cloudkms.signer
Creazione della nota Artifact Analysis
In questa sezione creerai la nota.
Memorizza l'ID nota:
export NOTE_ID=snakeoil
Memorizza l'URI della nota:
export NOTE_URI=projects/$PROJECT_ID/notes/$NOTE_ID
Crea payload della richiesta:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "voucher note for snakeoil check" } } } EOM
Crea la nota:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud --project ${PROJECT_ID} auth print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/note_payload.json \ "https://containeranalysis.googleapis.com/v1/projects/${PROJECT_ID}/notes/?noteId=${NOTE_ID}"
Creare e configurare il server dei coupon
In questa configurazione da eseguire una sola volta, riceverai, configurerai e crei l'immagine del server dei coupon. quindi lo archivi in Container Registry.
Clona il repository dei coupon:
git clone https://github.com/grafeas/voucher.git cd voucher/
Questo repository contiene:
- Codice sorgente per creare il tuo server voucher.
- Codice sorgente per creare Voucher Client.
- Esempi che dimostrano l'utilizzo di un coupon.
Aggiorna il file di configurazione del server voucher.
Linux
Crea il file di configurazione del server coupon da un modello, sostituendo
e con i valori che hai definito sopra. Per farlo, esegui questo comando: cat tutorials/cloudrun/config.toml.template \ | sed -e "s?<PROJECT_ID>?${PROJECT_ID}?g" \ | sed -e "s?<KMS_KEY_NAME>?${KMS_RESOURCE_ID}?g" \ > tutorials/cloudrun/config.toml
Altro sistema operativo
Modifica il file
tutorials/cloudrun/config.toml.template
.- Sostituisci
<PROJECT_ID>
con il valore in${PROJECT_ID}
. - Sostituisci
<KMS_KEY_NAME>
con il valore in${KMS_RESOURCE_ID}
.
- Sostituisci
Salva il file come
tutorials/cloudrun/config.toml
.
Visualizza il file di configurazione del server voucher:
cat tutorials/cloudrun/config.toml
Verrà visualizzato un output contenente i seguenti elementi:
failon = "high"
Tieni presente che nel file di configurazione l'opzione
failon
è impostata suhigh
. Questa impostazione configura il server voucher in modo che esegua un controllo delle vulnerabilità su un'immagine. Se l'immagine contiene vulnerabilità con gravitàHIGH
, il controllo non riesce e il server voucher non crea l'attestazione di Autorizzazione binaria. Per maggiori informazioni sulle impostazioni difail-on
, consulta Fail-On: errore sulle vulnerabilità.Crea e carica l'immagine container del server dei coupon:
In questa sezione eseguirai la pipeline di Cloud Build che crea l'immagine del container Voucher Server. La build carica anche l'immagine del server coupon su gcr.io/$PROJECT_ID/voucher-server.
gcloud builds submit --config ./tutorials/cloudrun/cloudbuild-server.yaml
Esegui il deployment di un server voucher su Cloud Run
Seleziona una regione.
Per visualizzare un elenco delle regioni disponibili, vedi Visualizzare un elenco delle regioni disponibili. Crea una variabile per archiviare la regione selezionata:
export REGION=REGION
Sostituisci REGION con il nome della regione in cui prevedi di eseguire il deployment del server coupon.
Esegui il deployment del server Voucher su Cloud Run.
gcloud run deploy --image gcr.io/${PROJECT_ID}/voucher-server \ --platform managed voucher-server \ --region ${REGION} \ --no-allow-unauthenticated
Vedrai un output simile al seguente:
Service [voucher-server] revision [voucher-server-00001-caw] has been deployed and is serving 100 percent of traffic. Service URL: https://voucher-server-4wjtm2amga-uc.a.run.app
Memorizza l'URL del servizio del server dei coupon:
export SERVER_SERVICE_URL=$(gcloud run services describe voucher-server --platform managed --region ${REGION} --format='value(status.url)')
Configura cliente voucher
Nei passaggi seguenti puoi configurare il client voucher.
Crea l'account di servizio chiamante per il client voucher:
gcloud iam service-accounts create INVOKER_ACCOUNT_NAME
Sostituisci INVOKER_ACCOUNT_NAME con un nome per l'account di servizio del chiamante, ad esempio
voucher-invoker
.Specifica l'account di servizio:
export INVOKER_SERVICE_ACCOUNT=INVOKER_ACCOUNT_NAME@$PROJECT_ID.iam.gserviceaccount.com
Concedi il ruolo
run.invoker
all'account di servizio callout per il progetto.Concedi all'account di servizio del chiamante l'autorizzazione per richiamare il server coupon su Cloud Run. Per farlo, inserisci il seguente comando:
gcloud run services add-iam-policy-binding voucher-server \ --member serviceAccount:$INVOKER_SERVICE_ACCOUNT \ --role roles/run.invoker \ --platform managed \ --region ${REGION}
Concedi il ruolo
iam.serviceAccountTokenCreator
all'account di servizio dell'invoker per Cloud Build.In questa sezione, concedi l'autorizzazione all'account di servizio Cloud Build per simulare l'account di servizio dell'invoker in modo che il client di Voucher abbia l'autorizzazione a inviare richieste al server dei coupon durante la build. Per farlo, inserisci il seguente comando:
gcloud iam service-accounts add-iam-policy-binding $INVOKER_SERVICE_ACCOUNT \ --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Usa il voucher per verificare la presenza di vulnerabilità nelle immagini
In questa sezione eseguirai due pipeline Cloud Build di esempio. In entrambe le pipeline, crei un'immagine e poi utilizzi il voucher per verificare la presenza di eventuali vulnerabilità.
Caso di errore
In questa sezione, la pipeline di build di esempio non riesce a creare un'attestazione.
L'immagine basata su Debian 9 contiene almeno una vulnerabilità di gravità HIGH
. L'opzione fail-on
nel server dei coupon config.toml
è impostata in modo da non superare le vulnerabilità con gravità HIGH
. In questo caso, il server coupon non crea un'attestazione di Autorizzazione binaria.
Esegui la pipeline di build:
gcloud builds submit \ --substitutions=_SERVICE_URL=$SERVER_SERVICE_URL,_SERVICE_ACCOUNT=$INVOKER_SERVICE_ACCOUNT \ --config=tutorials/cloudrun/examples/cloudbuild-bad.yaml tutorials/cloudrun/examples
Cerca nel log dell'ultima build i risultati del coupon
snakeoil
:Console
Prendi nota dell'ID dell'ultima build.
Nella console Google Cloud, vai alla pagina Cronologia build.
In Build, fai clic sull'elemento che contiene i primi caratteri dell'ID build.
Fai clic su Visualizza non elaborati.
Cerca
snakeoil
utilizzando il browser.Vedrai un output simile al seguente:
"name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
gcloud
Salva l'ID della build:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Cerca nel log di build inserendo il seguente comando:
gcloud builds log ${BUILD_ID} | grep "snakeoil"
L'output sarà simile al seguente:
"name":"snakeoil","error":"vulnerable to 14 vulnerabilities"
Caso di successo
In questa sezione, la pipeline di build di esempio riesce a creare un'attestazione.
Tutte le vulnerabilità identificate sono classificate al di sotto della soglia fail-on
quindi il controllo supera la pipeline crea l'attestazione.
Esegui la pipeline:
gcloud builds submit\ --substitutions=_SERVICE_URL=$SERVER_SERVICE_URL,_SERVICE_ACCOUNT=$INVOKER_SERVICE_ACCOUNT\ --config=tutorials/cloudrun/examples/cloudbuild-good.yaml tutorials/cloudrun/examples
Cerca nel log dell'ultima build i risultati del coupon
snakeoil
:Console
Prendi nota dell'ID dell'ultima build.
Nella console Google Cloud, vai alla pagina Cronologia build.
In Build, fai clic sull'elemento che contiene i primi caratteri dell'ID build.
Fai clic su Visualizza non elaborati.
Cerca
snakeoil
utilizzando il browser.Vedrai un output simile al seguente:
"name":"snakeoil","success":true,"attested":true
gcloud
Salva l'ID build dell'ultima build:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Cerca nel log di build inserendo il seguente comando:
gcloud builds log ${BUILD_ID} | grep "snakeoil"
L'output sarà simile al seguente:
"name":"snakeoil","success":true,"attested":true
Esegui la pulizia
Per eseguire la pulizia delle risorse utilizzate in questo documento, puoi eliminare il progetto come segue:
gcloud projects delete ${PROJECT_ID}
Crea un attestatore
Per creare un criterio che richieda le attestazioni create utilizzando il metodo descritto in questa guida, devi prima creare un attestatore.
Per creare un attestatore:
Recupera il materiale della chiave pubblica dalla chiave Cloud KMS che hai creato in precedenza in questa guida:
gcloud kms keys versions get-public-key 1 \ --key KEY_NAME \ --keyring KEY_RING \ --location global \ --output-file OUTPUT_PATH
KEY_NAME
: il nome della chiaveKEY_RING
: il nome del keyringOUTPUT_PATH
: un percorso file, ad esempiomy-key.pem
Crea un attestatore utilizzando il materiale della chiave pubblica nel file e la nota che hai creato in precedenza in questa guida. Puoi creare un attestatore tramite la console Google Cloud o gcloud CLI.
Crea un criterio che richiede attestazioni e fornisci l'attestatore che hai creato in questa sezione. Puoi creare un criterio tramite la console Google Cloud o gcloud CLI.
Crea un'attestazione
Per creare un'attestazione utilizzando l'attestatore, vedi Creare un'attestazione utilizzando Cloud KMS.
Passaggi successivi
- Configura il criterio di Autorizzazione binaria in modo che richieda attestazioni utilizzando lo strumento a riga di comando o la console Google Cloud.
- Crea gli attestatori utilizzati da Autorizzazione binaria per verificare l'attestazione al momento del deployment utilizzando lo strumento a riga di comando o la console Google Cloud.
- Visualizza la documentazione dei coupon su GitHub.
- Scopri di più su Autorizzazione binaria.
- Scopri di più su Artifact Analysis e vulnerabilità.
- Scopri di più su Cloud Key Management Service.