Questo tutorial mostra come creare un'attestazione di Autorizzazione binaria in una pipeline Cloud Build. Questa configurazione aiuta a garantire che solo le immagini container create e firmate durante il processo di compilazione di Cloud Build siano automaticamente autorizzate per l'esecuzione nel tuo ambiente di deployment.
Per scoprire come utilizzare l'analisi delle vulnerabilità di Artifact Analysis nella pipeline di build 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 gli output del software risultanti in Container Registry o in un altro servizio di archiviazione su Google Cloud Platform.
Panoramica di Autorizzazione binaria
Autorizzazione binaria (panoramica) è un prodotto Google Cloud che applica vincoli in fase di deployment sulle applicazioni. L'integrazione con Google Kubernetes Engine (GKE) consente agli utenti di fare in modo che i container di cui è stato eseguito il deployment in un cluster Kubernetes siano firmati tramite crittografia da un'autorità attendibile e verificati da un attestatore di Autorizzazione binaria.
Puoi configurare Autorizzazione binaria in modo che richieda attestations in base alla località del codice di origine per impedire il deployment delle immagini container create da un'origine non autorizzata.
Per saperne di più:
- Introduzione generale ad Autorizzazione binaria
- Codelab: proteggere i deployment GKE con Autorizzazione binaria
Architettura
Il seguente diagramma mostra i componenti in una configurazione di Autorizzazione binaria/Cloud Build:
In questa pipeline:
Il codice per creare l'immagine container viene inviato tramite push a un repository di codice sorgente, ad esempio Cloud Source Repositories.
Cloud Build, uno strumento di integrazione continua (CI), crea e testa il container.
La build esegue il push dell'immagine container su Container Registry o su un altro registro che archivia le immagini create.
Cloud Key Management Service, che fornisce la gestione delle chiavi per la coppia di chiavi crittografiche, firma l'immagine del container. La firma risultante viene quindi archiviata in una 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 attestations firmate per eseguire il deployment dell'immagine container.
Crea un'attestazione utilizzando Cloud Build con Cloud Key Management Service
Questa sezione mostra come implementare l'architettura descritta sopra. Utilizza un passaggio di build personalizzato open source dalla community di Cloud Build. Il passaggio di creazione personalizzato firma un'immagine container, crea l'attestazione e la carica in Autorizzazione binaria.
Configura Identity and Access Management
Per utilizzare questo passaggio di build, l'account di servizio Cloud Build deve avere i seguenti ruoli IAM:
- Visualizzatore attestatori di autorizzazione binaria
roles/binaryauthorization.attestorsViewer
- Firmatario/verificatore CryptoKey Cloud KMS (se utilizzi la chiave nel KMS per firmare l'attestazione)
roles/cloudkms.signerVerifier
- Autore collegamento note Artifact Analysis
roles/containeranalysis.notes.attacher
I comandi seguenti possono essere utilizzati per aggiungere i ruoli all'account di servizio Cloud Build del progetto:
Abilita 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 il progetto Google Cloud CLI:
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 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/verificatore CryptoKey Cloud KMS 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 Autore collegamento note Artifact Analysis 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 di Autorizzazione binaria per Cloud Build:
Prima dell'uso, il codice per il passaggio di creazione personalizzato deve essere incorporato in un container e inviato tramite push a Cloud Build. Per farlo, esegui questi comandi:
cd cloud-builders-community/binauthz-attestation gcloud builds submit . --config cloudbuild.yaml
Il passaggio della build personalizzata è stato eseguito tramite push al Google Container Registry del progetto attuale ed è ora pronto per l'uso.
Crea un attestatore in Autorizzazione binaria
Crea un attestatore che Autorizzazione binaria utilizzerà al momento del deployment per verificare l'attestazione.
Configura una coppia di attestatori e di 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 "crea-attestazione" a cloudbuild.yaml
Per utilizzare il passaggio binauthz-attestation
, devi aggiornare cloudbuild.yaml
aggiungendo il passaggio che firmerà la build di cui è stato eseguito il push a
Container Registry.
Di seguito sono riportati due metodi:
Aggiorna il tuo
cloudbuild.yaml
manualmente.Esegui una pipeline di esempio con le variabili di ambiente impostate in precedenza.
Aggiorna il tuo cloudbuild.yaml
manualmente
Aggiorna
cloudbuild.yaml
manualmente aggiungendo il passaggio per la build riportato di seguito dopo quello in cui il container viene caricato in Container Registry. Nota: devi sostituire manualmente 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 di Cloud Build di esempio, esegui questi 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 questi comandi:gcloud builds submit . --config cloudbuild_example.yaml
Passaggi successivi
- Crea attestazioni dopo aver verificato le vulnerabilità di un'immagine utilizzando Kritis Signer o Voucher.
- Crea un passaggio personalizzato di Cloud Build per firmare e caricare attestazioni di Autorizzazione binaria su GitHub.