Configurare un criterio di Autorizzazione binaria con GKE
Questa guida rapida mostra come configurare e testare una regola di base in un criterio di Autorizzazione binaria.
In questa guida rapida, puoi visualizzare e configurare la regola predefinita nel criterio. La regola predefinita consente il deployment di tutte le immagini. Per farlo, esegui il deployment di un'immagine container su un cluster Google Kubernetes Engine (GKE). Dopodiché imposti la regola predefinita per impedire il deployment di tutte le immagini e tentare 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 gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Artifact Registry, Binary Authorization.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
-
Nella console di Google Cloud Console, nella pagina del selettore dei progetti, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Abilita le API Artifact Registry, Binary Authorization.
- Installa Google Cloud CLI.
-
Per inizializzare l'interfaccia a riga di comando gcloud, esegui il comando seguente:
gcloud init
- Installa
kubectl
.
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 eseguire le immagini container di cui hai eseguito il deployment.
Console Google Cloud
Vai alla pagina Cluster di GKE nella console Google Cloud.
La console visualizza un elenco di cluster GKE nel progetto Google Cloud.
Fai clic su Crea cluster.
Inserisci
test-cluster
nel campo Nome.Seleziona A livello di zona nelle opzioni Tipo di località.
Seleziona
us-central1-a
dall'elenco a discesa Zona.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 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
Criterio predefinito
Per impostazione predefinita, il criterio di Autorizzazione binaria è configurato per consentire il deployment di tutte le immagini container.
Console Google Cloud
Per visualizzare il criterio predefinito:
Vai alla pagina Autorizzazione binaria nella console Google Cloud.
Nella console vengono visualizzati i dettagli del criterio.
Fai clic su Modifica criterio.
In Regola predefinita di progetto, è selezionata l'opzione Consenti tutte le immagini.
gcloud
Per visualizzare il criterio predefinito, esporta il file YAML del criterio come segue:
gcloud container binauthz policy export
Per impostazione predefinita, il file include i seguenti contenuti:
admissionWhitelistPatterns: - namePattern: gcr.io/google_containers/* - namePattern: gcr.io/google-containers/* - namePattern: k8s.gcr.io/** - namePattern: gke.gcr.io/** - namePattern: gcr.io/stackdriver-agents/* globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_ALLOW enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
API REST
Per visualizzare il criterio predefinito, recuperalo in formato JSON come segue:
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"
L'API REST restituisce quanto segue:
{ "name": "projects/PROJECT_ID/policy", "admissionWhitelistPatterns": [ { "namePattern": "gcr.io/google_containers/*" }, { "namePattern": "gcr.io/google-containers/*" }, { "namePattern": "k8s.gcr.io/*" }, { "namePattern": "gke.gcr.io/*" }, { "namePattern": "gcr.io/stackdriver-agents/*" } ], "globalPolicyEvaluationMode": "ENABLE", "defaultAdmissionRule": { "evaluationMode": "ALWAYS_ALLOW", "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG" } }
Testa il criterio di applicazione
Puoi testare il criterio di applicazione provando a eseguire il deployment di un'immagine container di esempio nel cluster.
Per questa guida rapida, utilizzerai l'immagine container di esempio che si trova nel percorso
gcr.io/google-samples/hello-app
in Container Registry. Questa è un'immagine container pubblica creata da Google che contiene un'applicazione di esempio "Hello World".
Console Google Cloud
Per testare il criterio:
Vai alla pagina Cluster di GKE nella console Google Cloud.
Fai clic su Esegui il deployment.
La console ti chiede di inserire i dettagli del deployment.
Seleziona Immagine container esistente.
Inserisci
gcr.io/google-samples/hello-app:1.0
come percorso dell'immagine container.Fai clic su Continua.
Inserisci
hello-server
nel campo Nome applicazione.Fai clic su Esegui il deployment.
kubectl
Per testare il criterio:
Aggiorna il file
kubeconfig
locale:gcloud container clusters get-credentials \ --zone us-central1-a \ test-cluster
Questo fornisce le credenziali e le informazioni sull'endpoint necessarie per accedere al cluster in GKE.
Esegui il deployment dell'immagine:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Ora verifica che il deployment sia stato consentito da Autorizzazione binaria.
Console Google Cloud
Per verificare che il deployment dell'immagine sia stato eseguito, vai alla pagina Carichi di lavoro di GKE nella console Google Cloud.
Un carico di lavoro per il deployment viene visualizzato con un'icona verde che indica che il deployment dell'immagine è stato eseguito correttamente.
kubectl
Per verificare che il deployment dell'immagine sia stato eseguito, procedi nel seguente modo:
kubectl get pods
Il comando stampa un messaggio simile al seguente, che indica che il deployment è riuscito:
NAME READY STATUS RESTARTS AGE hello-server-579859fb5b-h2k8s 1/1 Running 0 1m
Assicurati di eliminare il deployment in modo da poter andare al passaggio successivo:
Console Google Cloud
Per eliminare il deployment:
Torna alla pagina Carichi di lavoro di GKE nella console Google Cloud.
Seleziona il carico di lavoro
hello-server
.Fai clic su Elimina.
kubectl
Per eliminare il deployment:
kubectl delete deployment hello-server
Configura il criterio di applicazione per non consentire tutte le immagini
Ora modifica il criterio in modo da bloccarlo anziché consentire il deployment di tutte le immagini.
Console Google Cloud
Per modificare il criterio, segui questi passaggi:
Torna alla pagina Autorizzazione binaria nella console Google Cloud.
Fai clic su Modifica criterio.
Seleziona Non consentire tutte le immagini.
Fai clic su Save Policy (Salva criterio).
gcloud
Per modificare il criterio, segui questi passaggi:
Esporta il file YAML del criterio:
gcloud container binauthz policy export > /tmp/policy.yaml
In un editor di testo, modifica
evaluationMode
daALWAYS_ALLOW
aALWAYS_DENY
.Il file YAML del criterio dovrebbe essere visualizzato come segue:
globalPolicyEvaluationMode: ENABLE defaultAdmissionRule: evaluationMode: ALWAYS_DENY enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG name: projects/PROJECT_ID/policy
Importa il file YAML del criterio in Autorizzazione binaria:
gcloud container binauthz policy import /tmp/policy.yaml
API REST
Per modificare il criterio, 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" } } EOM
Invia 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"
Ripeti il test del criterio
Anche in questo caso, verifica il criterio eseguendo il deployment di un'immagine container di esempio nel cluster. Questa volta, Autorizzazione binaria impedisce il deployment dell'immagine.
Console Google Cloud
Esegui il deployment dell'immagine:
Vai alla pagina Cluster di GKE nella console Google Cloud.
Fai clic su Esegui il deployment.
La console ti chiede di inserire i dettagli del deployment.
Seleziona Immagine container esistente.
Inserisci
gcr.io/google-samples/hello-app:1.0
come percorso dell'immagine container.Fai clic su Continua.
Inserisci
hello-server
nel campo Nome applicazione.Fai clic su Esegui il deployment.
kubectl
Esegui il deployment dell'immagine:
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
Ora puoi verificare che il criterio sia stato bloccato:
Console Google Cloud
Per verificare che il deployment dell'immagine non sia stato eseguito, procedi nel seguente modo:
Torna alla pagina Carichi di lavoro di GKE nella console Google Cloud.
Il carico di lavoro per l'immagine container viene visualizzato con un'icona rossa che indica che non è stato eseguito il deployment dell'immagine.
kubectl
Per verificare che il deployment dell'immagine non sia stato eseguito, esegui questo comando:
kubectl get pods
Il comando stampa il seguente messaggio, che indica che il deployment dell'immagine non è stato eseguito:
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, segui questi passaggi:
Vai alla pagina Cluster di GKE nella console Google Cloud.
Seleziona il cluster
test-cluster
e fai clic su Elimina.
gcloud
Per eliminare il cluster, segui questi passaggi:
gcloud container clusters delete \ --zone=us-central1-a \ test-cluster
Passaggi successivi
- Utilizza l'attestatore
built-by-cloud-build
per eseguire il deployment solo di immagini create da Cloud Build (Anteprima). - Per un tutorial end-to-end sulla richiesta di attestazioni, consulta:
- Leggi le nostre risorse su DevOps ed esplora il nostro programma di ricerca.