Questo documento mostra come configurare Autorizzazione binaria per cluster on-premise creati nell'ambito di Google Distributed Cloud. Poi ti mostra come configurare una policy di Autorizzazione binaria di esempio.
Prima di iniziare
Assicurati che i tuoi cluster abbiano una versione di Google Distributed Cloud supportata. Autorizzazione binaria supporta i seguenti ambienti.
Bare metal
Google Distributed Cloud 1.14 o 1.15. Per la versione 1.16 o successive, l'autorizzazione binaria può essere configurata durante la creazione o l'aggiornamento del cluster.
VMware
Distributed Cloud for VMware (Google Distributed Cloud) 1.4 o versioni successive.
Il servizio Binary Authorization utilizza un indirizzo IP esterno accessibile tramite una normale connessione a internet. Configura le regole firewall per HTTPS per consentire al cluster utente di accedere all'endpoint
binaryauthorization.googleapis.com
.Bare metal
Configura le regole firewall di Google Distributed Cloud.
VMware
Configura le regole firewall di Google Distributed Cloud.
Se vuoi utilizzare Cloud Audit Logs centralizzato per visualizzare le voci di audit log, incluse quelle di Autorizzazione binaria per i cluster esterni Google Cloud, devi configurare Cloud Audit Logs nella configurazione del cluster.
Bare metal
Configura Cloud Audit Logs in Google Distributed Cloud.
VMware
Configura Cloud Audit Logs in Google Distributed Cloud.
Devi abilitare l'API Binary Authorization nel seguente modo:
Vai alla Google Cloud console.
Nell'elenco a discesa dei progetti, seleziona il progetto host del parco veicoli. Puoi trovare questa impostazione nella sezione
gkeConnect
del file di configurazione del cluster utente. Questo è il Google Cloud progetto che collega il tuo cluster utenti a Google Cloud.
Configura Autorizzazione binaria
In questa sezione, configurerai Autorizzazione binaria nel tuo cluster on-premise.
Specifica le variabili di ambiente di installazione
Per specificare le variabili di ambiente:
Utilizzare Workload Identity
Specifica il progetto host del parco risorse:
export PROJECT_ID=PROJECT_ID
Imposta l'ID appartenenza al parco risorse sull'ID cluster:
L'ID abbonamento è elencato nella colonna
NAME
quando esegui il comandogcloud container fleet memberships list
.export MEMBERSHIP_ID=CLUSTER_NAME
Utilizzo della chiave del account di servizio
Specifica il progetto host del parco risorse:
export PROJECT_ID=PROJECT_ID
Sostituisci PROJECT_ID con il progetto Google Cloud nella sezione
gkeConnect
del file di configurazione del cluster utente.Specifica il percorso del file kubeconfig del cluster utente:
export KUBECONFIG=PATH
Sostituisci PATH con il percorso del file kubeconfig del cluster utente.
Scegli un nome per il account di servizio di accesso all'API Binary Authorization:
export SA_NAME=SERVICE_ACCOUNT_NAME
Sostituisci SERVICE_ACCOUNT_NAME con il nome dell'account di servizio che preferisci. Il modulo di Autorizzazione binaria utilizza questo service account per accedere all'API Binary Authorization.
Specifica il percorso del file della chiave del account di servizio che scaricherai più avanti in questa guida:
export SA_JSON_PATH=SA_KEY_FILE_PATH
Sostituisci SA_KEY_FILE_PATH con il percorso del file della chiave JSON per l'account di servizio.
Installa il modulo Autorizzazione binaria nel cluster utente
Per installare il modulo di autorizzazione binaria:
Utilizzare Workload Identity
Workload Identity del parco risorse consente ai workload nel cluster di autenticarsi su Google senza richiedere il download, la rotazione manuale e la gestione generale delle chiavi dell'account di servizio. Google Cloud Puoi scoprire di più su come funziona Workload Identity del parco risorse e sui vantaggi del suo utilizzo in Utilizzare Workload Identity del parco risorse.
Concedi il ruolo
binaryauthorization.policyEvaluator
al account di servizio Kubernetes nel progetto host del tuo parco progetti:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \ --role="roles/binaryauthorization.policyEvaluator"
Crea una directory di lavoro:
Crea una directory denominata
binauthz
.Passa alla directory.
Scarica il file
manifest-wi-0.2.6.yaml.tmpl
, che utilizzi per installare il modulo di autorizzazione binaria nel cluster utente:Bare metal
gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
VMware
gcloud storage cp gs://gke-on-prem-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
Sostituisci le variabili di ambiente nel modello:
envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
Installa il modulo Autorizzazione binaria nel cluster utente:
kubectl apply -f manifest-0.2.6.yaml
Verifica che il deployment sia stato creato:
kubectl get pod --namespace binauthz-system
Vedi il pod
binauthz-module-deployment-*
elencato conStatus
diRunning
e 1/1 pod pronti, simile a questo output:NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Utilizzo della chiave del account di servizio
Imposta il progetto predefinito per Google Cloud CLI:
gcloud config set project ${PROJECT_ID}
Crea un account di servizio di accesso all'API Binary Authorization:
gcloud iam service-accounts create ${SA_NAME}
Concedi il ruolo
binaryauthorization.policyEvaluator
al account di servizio di accesso all'API Binary Authorization nel progetto host del parco risorse:gcloud projects add-iam-policy-binding ${PROJECT_ID}\ --member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/binaryauthorization.policyEvaluator"
Crea una directory di lavoro:
Crea una directory denominata
binauthz
.Passa alla directory.
Scarica il file
manifest-0.2.6.yaml
, che utilizzi per installare il modulo di autorizzazione binaria nel cluster utente:Bare metal
gcloud storage cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .
VMware
gcloud storage cp gs://gke-on-prem-release/binauthz/manifest-0.2.6.yaml .
Crea un file YAML per lo spazio dei nomi
binauthz-system
.Copia quanto segue in un file denominato
namespace.yaml
:apiVersion: v1 kind: Namespace metadata: labels: control-plane: binauthz-controller name: binauthz-system
Crea lo spazio dei nomi nel cluster utente:
kubectl apply -f namespace.yaml
Vedi un output simile al seguente:
namespace/binauthz-system created
Scarica un file della chiave JSON per il tuo account di servizio:
gcloud iam service-accounts keys create ${SA_JSON_PATH} --iam-account ${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com
Salva la chiave del account di servizio come secret Kubernetes nel cluster utente:
kubectl --namespace binauthz-system create secret generic binauthz-sa --from-file=key.json=${SA_JSON_PATH}
Installa il modulo Autorizzazione binaria nel cluster utente:
kubectl apply -f manifest-0.2.6.yaml
Verifica che il deployment sia stato creato:
kubectl get pod --namespace binauthz-system
Vedi il pod
binauthz-module-deployment-*
elencato conStatus
diRunning
e 1/1 pod pronti, simile a questo output:NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Configurare e utilizzare i criteri di Autorizzazione binaria
Questa sezione mostra come configurare e utilizzare i criteri di autorizzazione binaria per i cluster on-premise.
In ogni esempio, configuri il criterio e poi lo testi tentando di eseguire il deployment di un'immagine container nel cluster.
Consenti tutto
Questa sezione mostra un caso di successo. Configuri i criteri di autorizzazione binaria in modo che un'immagine container soddisfi i criteri e venga eseguito il deployment.
In Google Cloud, procedi nel seguente modo:
Console
Nella console Google Cloud , vai alla pagina Autorizzazione binaria.
Assicurati di selezionare l'ID progetto host della flotta.
Fai clic su Modifica criterio.
Nella sezione Regola predefinita di progetto, seleziona Consenti tutte le immagini.
Fai clic su Save Policy (Salva criterio).
gcloud
Imposta
PROJECT_ID
per il progetto host del parco risorse. Puoi trovare questo ID progetto nel campogkeConnect
del file di configurazione del cluster utente.export PROJECT_ID=PROJECT_ID
Imposta il progetto Google Cloud predefinito.
gcloud config set project ${PROJECT_ID}
Esporta il file YAML dei criteri nel sistema locale:
gcloud container binauthz policy export > policy.yaml
Il file YAML ha il seguente aspetto:
defaultAdmissionRule: enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG evaluationMode: ALWAYS_ALLOW globalPolicyEvaluationMode: ENABLE name: projects/<var>PROJECT_ID</var>/policy
Modifica
policy.yaml
.Imposta
evaluationMode
suALWAYS_ALLOW
.Se nel file è presente un blocco
requireAttestationsBy
, eliminalo.Salva il file.
Importa
policy.yaml
nel seguente modo:gcloud container binauthz policy import policy.yaml
Per aggiungere un'immagine esente all'allowlist, aggiungi quanto segue al file delle norme:
admissionWhitelistPatterns: - namePattern: EXEMPT_IMAGE_PATH
Sostituisci EXEMPT_IMAGE_PATH
con il percorso di un'immagine da esentare. Per esentare altre immagini, aggiungi altre voci - namePattern
. Scopri di più su admissionWhitelistPatterns
.
Sulla workstation di amministrazione, esegui le seguenti operazioni:
Crea un file manifest per un pod.
Salva quanto segue in un file denominato
pod.yaml
:apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Crea il pod:
kubectl apply -f pod.yaml
Vedi che il pod è stato implementato correttamente.
Elimina il pod:
kubectl delete -f pod.yaml
Disattiva tutto
Questa sezione mostra un caso di errore. In questa sezione configurerai i criteri predefiniti per impedire il deployment dell'immagine container.
In Google Cloud , segui questi passaggi:
Console
Nella console Google Cloud , vai alla pagina Autorizzazione binaria.
Assicurati che il progetto host del parco risorse sia selezionato.
Fai clic su Modifica criterio.
In Regola predefinita di progetto, seleziona Non consentire tutte le immagini.
Fai clic su Salva policy.
gcloud
Imposta
PROJECT_ID
sull'ID progetto host del parco risorse.export PROJECT_ID=PROJECT_ID
Imposta il progetto Google Cloud predefinito.
gcloud config set project ${PROJECT_ID}
Esporta il file YAML dei criteri:
gcloud container binauthz policy export > policy.yaml
Modifica
policy.yaml
.Imposta
evaluationMode
suALWAYS_DENY
.Se nel file è presente un blocco
requireAttestationsBy
, eliminalo.Salva il file.
Importa
policy.yaml
nel seguente modo:gcloud container binauthz policy import policy.yaml
Sulla workstation di amministrazione, esegui le seguenti operazioni:
Crea un file manifest per un pod.
Salva quanto segue in un file denominato
pod.yaml
:apiVersion: v1 kind: Pod metadata: name: test-pod spec: containers: - name: test-container image: us-docker.pkg.dev/google-samples/containers/gke/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Crea il pod:
kubectl apply -f pod.yaml
Vedi che il deployment del pod è stato bloccato. L'output è simile al seguente:
Error from server (VIOLATES_POLICY): error when creating "pod.yaml": admission webhook "binaryauthorization.googleapis.com" denied the request: Denied by default admission rule. Overridden by evaluation mode
Recupera l'ID risorsa del cluster utente
Questa sezione mostra come comporre l'ID risorsa cluster per il cluster utente. Nel criterio Autorizzazione binaria, puoi creare regole specifiche per il cluster. Queste regole vengono associate a un ID risorsa specifico per il cluster, che si basa sull'ID cluster.
L'ID risorsa viene visualizzato nel seguente modo:
Console
Nella Google Cloud console, vai alla pagina Cluster di GKE.
Seleziona l'ID progetto host del parco risorse per i tuoi cluster. Puoi trovare questo ID progetto nella sezione
gkeConnect
del file di configurazione del cluster utente.Nell'elenco dei cluster, trova l'ID cluster nella colonna Nome.
Per creare l'ID risorsa, aggiungi il prefisso
global.
all'ID cluster in modo che l'ID risorsa abbia il seguente formato:global.CLUSTER_ID
.
gcloud
Utilizza SSH per connetterti alla workstation amministrativa.
Sulla workstation di amministrazione, esegui questo comando:
kubectl get membership -o yaml
Ottieni l'ID cluster dal campo
spec.owner.id
dell'output. Di seguito è riportato un esempio di output:apiVersion: v1 items: - apiVersion: hub.gke.io/v1 kind: Membership ... spec: owner: id: //gkehub.googleapis.com/projects/PROJECT_NUMBER/locations/global/memberships/my-cluster-id
Nell'output di esempio, l'ID cluster è
my-cluster-id
.Per creare l'ID risorsa, aggiungi il prefisso
global.
all'ID cluster. Nell'esempio, l'ID risorsa èglobal.my-cluster-id
.
Utilizzi questo ID risorsa quando definisci regole specifiche per il cluster. Scopri come impostare regole specifiche per il cluster utilizzando la consoleGoogle Cloud o gcloud CLI.
Aggiorna la policy di errore
Il webhook del modulo di autorizzazione binaria può essere configurato per fail open o fail close.
Fail close
Per aggiornare la policy di errore in modo che si chiuda, segui questi passaggi:
Modifica il file manifest-0.2.6.yaml e imposta failurePolicy su
Fail
Riattiva il webhook:
kubectl apply -f manifest-0.2.6.yaml
Vedi un output simile al seguente:
serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Fail open
Per aggiornare la policy di errore in modo che sia aperta, segui questi passaggi:
Modifica il file manifest-0.2.6.yaml e imposta failurePolicy su
Ignore
Riattiva il webhook:
kubectl apply -f manifest-0.2.6.yaml
Vedi un output simile al seguente:
serviceaccount/binauthz-admin unchanged role.rbac.authorization.k8s.io/binauthz-role configured clusterrole.rbac.authorization.k8s.io/binauthz-role configured rolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/binauthz-rolebinding unchanged secret/binauthz-tls unchanged service/binauthz unchanged deployment.apps/binauthz-module-deployment unchanged validatingwebhookconfiguration.admissionregistration.k8s.io/binauthz-validating-webhook-configuration configured
Per scoprire di più, consulta le norme relative agli errori del webhook.
Esegui la pulizia
Il seguente esempio di codice mostra come disabilitare il webhook:
kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
Il seguente esempio di codice mostra come riattivare il webhook:
kubectl apply -f manifest-0.2.6.yaml
Il seguente esempio di codice mostra come eliminare tutte le risorse correlate all'autorizzazione binaria:
kubectl delete -f manifest-0.2.6.yaml kubectl delete namespace binauthz-system
Passaggi successivi
- Per verificare la conformità ai criteri durante la creazione del pod senza bloccare effettivamente la creazione del pod, consulta Attivare la modalità di prova.
- Per forzare la creazione di un pod che altrimenti verrebbe bloccato dall'enforcer di Autorizzazione binaria, consulta Utilizzare la procedura di emergenza.
- Utilizza l'attestatore
built-by-cloud-build
per eseguire il deployment solo delle immagini create da Cloud Build. - Per implementare una policy di autorizzazione binaria basata su attestatore, consulta quanto segue:
- Configura un criterio utilizzando la Google Cloud console o lo strumento a riga di comando. Imposta la regola predefinita o specifica del cluster per richiedere le attestazioni.
- Crea un attestatore utilizzando la consoleGoogle Cloud o lo strumento a riga di comando.
- Creare un'attestazione.
- Per visualizzare gli eventi dei log relativi a Autorizzazione binaria per Distributed Cloud, vedi Visualizzare gli eventi di Cloud Audit Logs.
- Monitora le metriche.