Configura un criterio di autorizzazione binaria con GKE
Questa guida rapida mostra come configurare e testare una regola di base in una policy di Autorizzazione binaria.
In questa guida rapida, visualizzerai e configurerai la regola predefinita nella policy. La regola predefinita consente il deployment di tutte le immagini. Per testarlo, esegui il deployment di un'immagine container su un cluster Google Kubernetes Engine (GKE). Poi imposterai la regola predefinita per non consentire il deployment di nessuna immagine e tenterai di eseguire il deployment di un'immagine.
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 senza costi per l'esecuzione, il test e il deployment dei workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Binary Authorization APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Artifact Registry, Binary Authorization APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init - Installa
kubectl.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per configurare una policy di autorizzazione binaria con GKE, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
- Binary Authorization Policy Editor (
roles/binaryauthorization.policyEditor) - Compute Viewer (
roles/compute.viewer) - Amministratore Kubernetes Engine (
roles/container.admin) - Utente Service Account (
roles/iam.serviceAccountUser)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Crea un cluster con l'applicazione di Autorizzazione binaria abilitata
Ora crea un cluster GKE con Autorizzazione binaria abilitata. Questo è il cluster in cui vuoi che vengano eseguite le immagini container di cui hai eseguito il deployment.
Autorizzazione binaria funziona con i cluster Autopilot o Standard.
Console Google Cloud
I seguenti passaggi configurano un cluster Autopilot.
Nella console Google Cloud , vai alla pagina Cluster Kubernetes di GKE:
Fai clic su Crea.
In Crea un cluster Autopilot, procedi nel seguente modo:
Nel campo Nome, inserisci
test-cluster.Nel menu Regione, seleziona
us-central1.Espandi la sezione Impostazioni avanzate.
Fai clic sul link Sicurezza per visualizzare il riquadro Sicurezza.
Nel riquadro Sicurezza, seleziona la casella di controllo Abilita Autorizzazione binaria.
Seleziona Solo applicazione forzata.
Fai clic su Avanti e poi su Avanti:esamina e crea.
Per iniziare a creare il cluster, fai clic su Crea.
gcloud
Esegui gcloud container clusters create con il flag --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE
abilitato.
gcloud container clusters create \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--zone us-central1-a \
test-cluster
La creazione di un cluster può richiedere diversi minuti.
Policy predefinita
Per impostazione predefinita, la policy di Autorizzazione binaria è configurata per consentire il deployment di tutte le immagini container.
Console Google Cloud
Per visualizzare la policy predefinita:
Vai alla pagina Autorizzazione binaria nella console Google Cloud .
La console mostra i dettagli della policy.
Fai clic su Modifica policy.
In Regola predefinita del progetto, l'opzione Consenti tutte le immagini è selezionata.
gcloud
Per visualizzare la policy predefinita, esporta il file YAML della policy nel seguente modo:
gcloud container binauthz policy export
Per impostazione predefinita, il file contiene quanto segue:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
API REST
Per visualizzare la policy predefinita, recuperala in formato JSON nel seguente modo:
curl \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: ${PROJECT_ID}" \
"https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Il comando produce il seguente output:
{
"name": "projects/PROJECT_ID/policy",
"globalPolicyEvaluationMode": "ENABLE",
"defaultAdmissionRule": {
"evaluationMode": "ALWAYS_ALLOW",
"enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
}
}
Testa le norme relative all'applicazione delle norme
Puoi testare le norme relative all'applicazione delle norme provando a fare il deployment di un'immagine container di esempio nel cluster.
Per questa guida rapida, utilizzi l'immagine container di esempio che si trova nel percorso
us-docker.pkg.dev/google-samples/containers/gke/hello-app in Artifact Registry. Si tratta di un'immagine container pubblica creata da Google che contiene un'applicazione di esempio "Hello, World!".
Console Google Cloud
Per testare la policy, segui questi passaggi:
Vai alla pagina Cluster di GKE nella consoleGoogle Cloud .
Fai clic su Esegui il deployment.
La console ti chiede di inserire i dettagli sul deployment.
Inserisci
hello-servernel campo Nome deployment.Fai clic su Avanti: dettagli del container.
Seleziona Immagine container esistente.
Inserisci
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0come percorso dell'immagine container.Fai clic su Esegui il deployment.
kubectl
Per testare la policy:
Aggiorna il file
kubeconfiglocale:gcloud container clusters get-credentials \ --zone us-central1-a \ test-clusterVengono fornite le credenziali e le informazioni sull'endpoint necessarie per accedere al cluster in GKE.
Esegui il deployment dell'immagine:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Ora verifica che il deployment sia stato consentito da Autorizzazione binaria.
Console Google Cloud
Per verificare che l'immagine sia stata sottoposta a deployment, vai alla pagina Workload di GKE nella console Google Cloud .
Viene visualizzato un workload per il deployment con un'icona verde che indica che il deployment dell'immagine è stato eseguito correttamente.
kubectl
Per verificare che sia stato eseguito il deployment dell'immagine, segui questi passaggi:
kubectl get pods
Il comando stampa un messaggio simile al seguente, che indica che il deployment è andato a buon fine:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Assicurati di eliminare il deployment in modo da poter procedere al passaggio successivo:
Console Google Cloud
Per eliminare il deployment:
Torna alla pagina Workload di GKE nella consoleGoogle Cloud .
Seleziona il workload
hello-server.Fai clic su Elimina.
kubectl
Per eliminare il deployment:
kubectl delete deployment hello-server
Configura le norme relative all'applicazione delle norme in modo da non consentire tutte le immagini
Ora modifica la policy per bloccare anziché consentire il deployment di tutte le immagini.
Console Google Cloud
Per modificare la policy:
Torna alla pagina Autorizzazione binaria nella console Google Cloud .
Fai clic su Modifica policy.
Seleziona Non consentire tutte le immagini.
Fai clic su Save Policy (Salva criterio).
gcloud
Per modificare la policy:
Esporta il file YAML della policy:
gcloud container binauthz policy export > /tmp/policy.yaml
In un editor di testo, modifica
evaluationModedaALWAYS_ALLOWaALWAYS_DENY.Il file YAML della policy dovrebbe avere il seguente aspetto:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Importa di nuovo il file YAML della policy in Autorizzazione binaria:
gcloud container binauthz policy import /tmp/policy.yaml
API REST
Per modificare la policy, segui questi passaggi:
Crea un file di testo con il criterio aggiornato in formato JSON:
cat > /tmp/policy.json << EOM { "name": "projects/${PROJECT_ID}/policy", "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_DENY", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } } EOMInvia il criterio aggiornato all'API REST:
curl -X PUT \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: ${PROJECT_ID}" \ --data-binary @/tmp/policy.json \ "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
Esegui nuovamente il test della policy
Ancora una volta, testa il criterio eseguendo il deployment di un'immagine container di esempio nel cluster. Questa volta, Autorizzazione binaria blocca il deployment dell'immagine.
Console Google Cloud
Esegui il deployment dell'immagine:
Vai alla pagina Cluster di GKE nella consoleGoogle Cloud .
Fai clic su Esegui il deployment.
La console ti chiede di inserire i dettagli sul deployment.
Inserisci
hello-servernel campo Nome deployment.Fai clic su Avanti: dettagli del container.
Seleziona Immagine container esistente.
Inserisci
us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0come percorso dell'immagine container.Fai clic su Esegui il deployment.
kubectl
Esegui il deployment dell'immagine:
kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
Ora puoi verificare che il criterio sia stato bloccato:
Console Google Cloud
Per verificare che l'immagine non sia stata eseguita il deployment:
Torna alla pagina Workload di GKE nella consoleGoogle Cloud .
Il workload per l'immagine container viene visualizzato con un'icona rossa che indica che il deployment dell'immagine non è riuscito.
kubectl
Per verificare che l'immagine non sia stata sottoposta a deployment, esegui questo comando:
kubectl get pods
Il comando stampa il seguente messaggio, che indica che l'immagine non è stata deployata:
No resources found.
Puoi ottenere ulteriori dettagli sul deployment:
kubectl get event --template \
'{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
Viene visualizzata una risposta simile alla seguente:
FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
In questo output:
- POD_NAME: il nome del pod.
- IMAGE_NAME: il nome dell'immagine.
- ATTESTOR_NAME: il nome dell'attestatore.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.
Elimina il cluster che hai creato in GKE:
Console
Per eliminare il cluster:
Vai alla pagina Cluster di GKE nella consoleGoogle Cloud .
Seleziona il cluster
test-clustere fai clic su Elimina.
gcloud
Per eliminare il cluster:
gcloud container clusters delete \
--zone=us-central1-a \
test-cluster
Passaggi successivi
- Utilizza l'attestatore
built-by-cloud-buildper eseguire il deployment solo delle immagini create da Cloud Build (anteprima). - Per un tutorial end-to-end su come richiedere le attestazioni, vedi:
- Leggi le nostre risorse su DevOps ed esplora il programma di ricerca DevOps Research and Assessment (DORA).