Questa pagina fornisce istruzioni su come proteggere i deployment di immagini su Cloud Run e Google Kubernetes Engine utilizzando Cloud Build.
Scopri come configurare Autorizzazione binaria per verificare le attestazioni di build e bloccare i deployment di immagini non generate da Cloud Build. Questa procedura può ridurre il rischio di deployment di software non autorizzato.
Prima di iniziare
Abilita le API Cloud Build, Autorizzazione binaria e Artifact Registry, se non sono già abilitate.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.Per utilizzare gli esempi di riga di comando in questa guida, installa e configura Google Cloud SDK.
Controllare i deployment con Autorizzazione binaria
Un criterio in Autorizzazione binaria è un insieme di regole che regolano il deployment delle immagini. Puoi configurare una regola per richiedere attestazioni firmate digitalmente.
Cloud Build genera e firma le attestazioni al tempo di compilazione. Con
Autorizzazione binaria, puoi utilizzare l'built-by-cloud-build attestatore per
verificare le attestazioni ed eseguire il deployment solo delle immagini create da Cloud Build.
Per creare l'attestatore built-by-cloud-build nel tuo progetto, esegui una build in questo progetto.
Per consentire il deployment solo delle immagini create da Cloud Build, segui questi passaggi:
Console
Vai alla pagina Autorizzazione binaria nella console Google Cloud :
Nella scheda Policy, fai clic su Modifica policy.
Nella finestra di dialogo Modifica policy, seleziona Consenti solo le immagini che sono state approvate da tutti i seguenti attestatori.
Fai clic su Aggiungi attestatori.
Nella finestra di dialogo Aggiungi attestatori, procedi nel seguente modo:
- Seleziona Aggiungi per progetto e nome dell'autore dell'attestazione e segui questi
passaggi:
- Nel campo Nome progetto, inserisci il progetto in cui esegui Cloud Build.
- Fai clic sul campo Nome attestatore e tieni presente che l'attestatore
built-by-cloud-buildè disponibile. - Fai clic su
built-by-cloud-build.
In alternativa, seleziona Aggiungi per ID risorsa attestatore. In ID risorsa attestatore, inserisci
projects/PROJECT_ID/attestors/built-by-cloud-buildSostituisci
PROJECT_IDcon il progetto in cui esegui Cloud Build.
- Seleziona Aggiungi per progetto e nome dell'autore dell'attestazione e segui questi
passaggi:
Fai clic su Aggiungi 1 attestatore.
Fai clic su Save Policy (Salva criterio).
gcloud
Esporta la policy esistente in un file utilizzando il seguente comando:
gcloud container binauthz policy export > /tmp/policy.yamlModifica il file della policy.
Modifica una delle seguenti regole:
defaultAdmissionRuleclusterAdmissionRulesistioServiceIdentityAdmissionRuleskubernetesServiceAccountAdmissionRules
Aggiungi un blocco
requireAttestationsByalla regola se non è già presente.Nel blocco
requireAttestationsBy, aggiungiprojects/PROJECT_ID/attestors/built-by-cloud-buildSostituisci
PROJECT_IDcon il progetto in cui esegui Cloud Build.Salva il file della policy.
Importa il file delle norme.
gcloud container binauthz policy import /tmp/policy.yamlDi seguito è riportato un esempio di file della policy che contiene il riferimento a
built-by-cloud-build-attestor:defaultAdmissionRule: evaluationMode: REQUIRE_ATTESTATION enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG requireAttestationsBy: - projects/PROJECT_ID/attestors/built-by-cloud-build name: projects/PROJECT_ID/policySostituisci
PROJECT_IDcon l'ID progetto in cui esegui Cloud Build.
Puoi visualizzare gli errori dei criteri nei messaggi di log di Autorizzazione binaria per GKE o Cloud Run
Utilizzo della modalità dry run
In modalità dry run, Autorizzazione binaria verifica la conformità ai criteri senza bloccare effettivamente il deployment. I messaggi di stato di conformità ai criteri vengono invece registrati in Cloud Logging. Puoi utilizzare questi log per determinare se il criterio di blocco funziona correttamente e per identificare i falsi positivi.
Per abilitare il dry run:
Console
Vai alla pagina Autorizzazione binaria nella console Google Cloud .
Fai clic su Modifica policy.
In Regola predefinita o in una regola specifica, seleziona Modalità dry run.
Fai clic su Save Policy (Salva criterio).
gcloud
Esporta la policy di Autorizzazione binaria in un file YAML:
gcloud container binauthz policy export > /tmp/policy.yamlIn un editor di testo, imposta
enforcementModesuDRYRUN_AUDIT_LOG_ONLYe salva il file.Per aggiornare la policy, importa il file eseguendo il seguente comando:
gcloud container binauthz policy import /tmp/policy.yaml
Puoi visualizzare gli errori dei criteri nei messaggi di log di Autorizzazione binaria per GKE o Cloud Run
Limitazioni
Cloud Build e Autorizzazione binaria devono trovarsi nello stesso progetto. Se esegui la piattaforma di deployment in un altro progetto, configura i ruoli IAM per una configurazione multi-progetto e fai riferimento al progetto Cloud Build quando aggiungi l'
built-by-cloud-buildattestatore in Autorizzazione binaria.Cloud Build non genera attestazioni quando esegui il push delle immagini in Artifact Registry utilizzando un passaggio di build
docker pushesplicito. Assicurati di eseguire il push ad Artifact Registry utilizzando il campoimagesnel passaggio di builddocker build. Per maggiori informazioni suimages, consulta Diversi modi per archiviare le immagini in Artifact Registry.Devi utilizzare file di configurazione della build separati per la pipeline di build e la pipeline di deployment. Questo perché Cloud Build produce attestazioni solo dopo il completamento della pipeline di build. Autorizzazione binaria controllerà l'attestazione prima di eseguire il deployment dell'immagine.
Abilitare le attestazioni nei pool privati
Per impostazione predefinita, Cloud Build non genera attestazioni di autorizzazione binaria per le build nei pool privati. Per generare
attestazioni, aggiungi l'opzione requestedVerifyOption: VERIFIED al
file di configurazione della build:
steps:
- name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
requestedVerifyOption: VERIFIED
Dopo aver aggiunto requestedVerifyOption, Cloud Build attiva
la generazione dell'attestazione e i metadati di provenienza per la tua
immagine.
Visualizzare i metadati dell'attestatore
Un attestatore viene creato la prima volta che esegui una build in un progetto. L'ID attestatore ha il formato
projects/PROJECT_ID/attestors/built-by-cloud-build,
dove PROJECT_ID è l'ID progetto.
Puoi controllare i metadati dell'attestatore della build utilizzando il seguente comando:
curl -X GET -H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build
Sostituisci PROJECT_ID con il progetto in cui esegui
Cloud Build.
L'output contiene informazioni sull'attestatore e sulle chiavi pubbliche corrispondenti. Ad esempio:
name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
"userOwnedDrydockNote": {
"noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
"publicKeys": [
{
"id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
"pkixPublicKey": {
"publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
"signatureAlgorithm": "ECDSA_P256_SHA256"
}
},
...
}
],
"delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
},
"updateTime": "2021-09-24T15:26:44.808914Z",
"description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"
Passaggi successivi
- Scopri di più su Autorizzazione binaria.