Questo tutorial mostra come creare un'attestazione di Autorizzazione binaria in una pipeline Cloud Build. Questa configurazione contribuisce a garantire che solo le immagini container create e firmate nell'ambito del processo di compilazione di Cloud Build siano automaticamente autorizzate a essere eseguite nel tuo ambiente di deployment.
Per scoprire come utilizzare analisi delle vulnerabilità di Artifact Analysis nella pipeline di compilazione di Cloud Build, consulta Creare attestazioni con Voucher o Creare attestazioni con Kritis Signer.
Panoramica di Cloud Build
Cloud Build (panoramica) prende il codice sorgente archiviato in Cloud Source Repositories o in un altro repository ospitato, esegue le build e i test e archivia le uscite software risultanti in Container Registry o in un altro servizio di archiviazione sulla Google Cloud Platform.
Panoramica di Autorizzazione binaria
L'autorizzazione binaria (panoramica) è un prodotto Google Cloud che applica vincoli di tempo di deployment alle applicazioni. L'integrazione con Google Kubernetes Engine (GKE) consente agli utenti di imporre che i container di cui è stato eseguito il deployment in un cluster Kubernetes siano firmati in modo crittografico da un'autorità attendibile e verificati da un attestatore di Autorizzazione binaria.
Puoi configurare l'autorizzazione binaria in modo da richiedere attestazioni in base alla posizione del codice di origine per impedire il deployment delle immagini container create da un'origine non autorizzata.
Per saperne di più:
- Introduzione generale all'Autorizzazione binaria
- Codelab: protezione dei deployment GKE con l'autorizzazione binaria
Architettura
Il seguente diagramma mostra i componenti di una configurazione di autorizzazione binaria/Cloud Build:
In questa pipeline:
Il codice per creare l'immagine del contenitore viene inviato a un repository di origine, ad esempio Cloud Source Repositories.
Cloud Build, uno strumento di integrazione continua (CI), compila e testa il contenitore.
La compilazione esegue il push dell'immagine container in Container Registry o in un altro registry che archivia le immagini create.
Cloud Key Management Service, che fornisce la gestione delle chiavi per la coppia di chiavi di crittografia, firma l'immagine del contenitore. La firma risultante viene poi archiviata in un'attestazione appena creata.
Al momento del deployment, l'attestatore verifica l'attestazione utilizzando la chiave pubblica della coppia di chiavi. Autorizzazione binaria applica il criterio richiedendo attestazioni firmate per eseguire il deployment dell'immagine container.
Creare un'attestazione utilizzando Cloud Build con Cloud Key Management Service
Questa sezione mostra come implementare l'architettura sopra indicata. Utilizza un passaggio di build personalizzato open source della community Cloud Build. Il passaggio di compilazione personalizzata firma un'immagine container, crea l'attestazione e la carica in Autorizzazione binaria.
Configurare Identity and Access Management
Per utilizzare questo passaggio di compilazione, l'account di servizio Cloud Build deve disporre dei seguenti ruoli IAM:
- Visualizzatore attestatori autorizzazione binaria
roles/binaryauthorization.attestorsViewer
- Firmatario/Responsabile verifica Cloud KMS CryptoKey (se utilizzi la chiave in KMS per firmare
la certificazione)
roles/cloudkms.signerVerifier
- Artifact Analysis Notes Attacher
roles/containeranalysis.notes.attacher
I seguenti comandi possono essere utilizzati per aggiungere i ruoli all'account di servizio Cloud Build del progetto:
Attiva Cloud Build:
Abilita l'API Cloud Build nel progetto Google Cloud di destinazione.
Salva l'ID progetto in una variabile di ambiente:
PROJECT_ID=PROJECT_ID
dove PROJECT_ID è l'ID progetto Google Cloud.
Imposta l'interfaccia a riga di comando Google Cloud del progetto:
gcloud config set project ${PROJECT_ID}
Recupera il numero del progetto:
PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
Aggiungi il ruolo Visualizzatore attestatore di autorizzazione binaria all'account di servizio Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/binaryauthorization.attestorsViewer
Aggiungi il ruolo Firmatario/Responsabile verifica Cloud KMS CryptoKey all'account di servizio Cloud Build (firma basata su KMS):
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/cloudkms.signerVerifier
Aggiungi il ruolo Attacca note di analisi degli elementi all'account di servizio Cloud Build:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \ --role roles/containeranalysis.notes.attacher
Crea e registra il passaggio di build personalizzato con Cloud Build
Clona il repository della community di build di Google Cloud:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
Configura il firmatario dell'autorizzazione binaria per Cloud Build:
Prima dell'uso, il codice per il passaggio di compilazione personalizzato deve essere incorporato in un container e inviato a Cloud Build. Per farlo, esegui i seguenti comandi:
cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml
Il passaggio di compilazione personalizzato è stato inviato al Container Registry Google del tuo progetto corrente ed è ora pronto per l'uso.
Creare un attestatore in Autorizzazione binaria
Crea un attestatore che verrà utilizzato da Autorizzazione binaria al momento del deployment per verificare l'attestazione.
Configura un attestatore e una coppia di chiavi Cloud Key Management Service in Autorizzazione binaria:
Consulta Creare un attestatore utilizzando l'interfaccia a riga di comando
Verifica che l'attestatore sia stato creato
gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
Aggiungi un passaggio "create-attestation" al tuo cloudbuild.yaml
Per utilizzare il passaggio binauthz-attestation
, devi aggiornare cloudbuild.yaml
aggiungendo il passaggio che firmerà la build che è stata trasferita in
Container Registry.
Di seguito sono riportati due metodi:
Aggiorna
cloudbuild.yaml
manualmente.Esegui una pipeline di esempio con le variabili di ambiente impostate in precedenza.
Aggiornare cloudbuild.yaml
manualmente
Aggiorna
cloudbuild.yaml
manualmente aggiungendo il passaggio di compilazione riportato di seguito dopo il passaggio in cui il contenitore viene caricato in Container Registry. Nota: devi sostituire ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME e KMS_KEY_VERSION con i tuoi valori manualmente:- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME' - '--keyversion' - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
È valido anche quanto segue:
- id: 'create-attestation' name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/${PROJECT_ID}/helloworld:latest' - '--attestor' - 'ATTESTOR_NAME' - '--attestor-project' - '${PROJECT_ID}' - '--keyversion' - 'KEY_VERSION' - '--keyversion-project' - '${PROJECT_ID}' - '--keyversion-location' - 'KEY_LOCATION' - '--keyversion-keyring' - 'KEYRING_NAME' - '--keyversion-key' - 'KEY_NAME'
(Facoltativo) Testa la pipeline
Per testare una pipeline di attestazione Cloud Build di esempio, svolgi i seguenti passaggi:
Crea un file
cloudbuild.yaml
con le variabili di ambiente impostate in precedenza:cd example cat <<EOM > cloudbuild_example.yaml steps: - id: 'build' name: 'gcr.io/cloud-builders/docker' args: - 'build' - '-t' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '.' - id: 'publish' name: 'gcr.io/cloud-builders/docker' args: - 'push' - 'gcr.io/$PROJECT_ID/helloworld:latest' - id: 'create-attestation' name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest' args: - '--artifact-url' - 'gcr.io/$PROJECT_ID/helloworld:latest' - '--attestor' - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}' - '--keyversion' - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}' tags: ['cloud-builders-community'] EOM
Esegui Cloud Build con l'esempio
cloudbuild_example.yaml
:Dalla directory
cloud-builders-community/binauthz-attestation/example
, esegui i seguenti comandi:gcloud builds submit . --config cloudbuild_example.yaml
Passaggi successivi
- Crea le attestazioni dopo aver controllato la presenza di vulnerabilità in un'immagine utilizzando Kritis Signer o Coupon.
- Crea un passaggio Cloud Build personalizzato per firmare e caricare le attestazioni di Autorizzazione binaria su GitHub.