Questo documento mostra come configurare Autorizzazione binaria per i cluster Anthos. Quindi mostra come configurare un criterio di Autorizzazione binaria di esempio.
Prima di iniziare
Devi avere cluster Anthos registrati con Connetti. Autorizzazione binaria supporta i seguenti ambienti.
Anthos clusters on bare metal
Anthos clusters on bare metal 1.14 o versioni successive.
Anthos clusters on VMware
Anthos clusters on VMware 1.4 o versioni successive.
Il servizio Autorizzazione binaria utilizza un indirizzo IP pubblico, accessibile tramite una normale connessione a internet. Configura le regole firewall per HTTPS in modo che il cluster utente possa accedere all'endpoint
binaryauthorization.googleapis.com
.Anthos clusters on bare metal
Configura le regole firewall Anthos clusters on bare metal.
Anthos clusters on VMware
Configura le regole firewall per i cluster Anthos su VMware.
Se vuoi utilizzare audit log di Cloud centralizzati per visualizzare le voci degli audit log, incluse quelle di Autorizzazione binaria per i cluster Anthos, devi configurare Cloud Audit Logs nella configurazione del cluster.
Anthos clusters on bare metal
Configura Cloud Audit Logs in Anthos clusters on bare metal.
Anthos clusters on VMware
Configura gli audit log di Cloud in Cluster Anthos su VMware.
Devi abilitare l'API Binary Authorization come segue:
Vai alla console Google Cloud.
Nell'elenco a discesa dei progetti, seleziona il progetto Connect. Puoi trovare questo progetto Google Cloud nella sezione
gkeConnect
del file di configurazione del cluster utente. Questo è il progetto Google Cloud che connette il tuo cluster utente a Google Cloud.
Configura Autorizzazione binaria
In questa sezione configurerai Autorizzazione binaria per i cluster Anthos nel tuo cluster.
Specifica le variabili di ambiente di installazione
Per specificare le variabili di ambiente:
Utilizzare Workload Identity
Specifica il progetto Connect:
export PROJECT_ID=PROJECT_ID
Specifica l'ID appartenenza del parco risorse del cluster:
export MEMBERSHIP_ID=MEMBERSHIP_ID
Utilizzo della chiave dell'account di servizio
Specifica il progetto Connect:
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 l'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 account di servizio per accedere all'API Binary Authorization.
Specifica il percorso del file della chiave dell'account di servizio che scarichi in seguito 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 Autorizzazione binaria, procedi nel seguente modo:
Utilizzare Workload Identity
Fleet Workload Identity consente ai carichi di lavoro nel tuo cluster di autenticarsi su Google senza che tu debba scaricare, ruotare manualmente e gestire in generale le chiavi degli account di servizio Google Cloud. Per ulteriori informazioni sul funzionamento di Workload Identity del parco risorse e sui vantaggi di utilizzarlo, consulta Utilizzare Workload Identity del parco risorse.
Concedi il ruolo
binaryauthorization.policyEvaluator
all'account di servizio Kubernetes nel progetto Connect:gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \ --role="roles/binaryauthorization.policyEvaluator"
Creare 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 dei cluster Anthos:Anthos clusters on bare metal
gsutil cp gs://anthos-baremetal-release/binauthz/manifest-wi-0.2.6.yaml.tmpl .
Anthos clusters on VMware
gsutil 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 di 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, in modo simile a questo output:NAME READY STATUS RESTARTS AGE binauthz-module-deployment-5fddf9594f-qjprz 1/1 Running 0 11s
Utilizzo della chiave dell'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
all'account di servizio di accesso all'API Binary Authorization nel progetto Connect:gcloud projects add-iam-policy-binding ${PROJECT_ID}\ --member="serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com" \ --role="roles/binaryauthorization.policyEvaluator"
Creare 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 dei cluster Anthos:cluster_anthos_su_bare_metal
gsutil cp gs://anthos-baremetal-release/binauthz/manifest-0.2.6.yaml .
cluster_anthos_on_vmware
gsutil 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
Verrà visualizzato 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 dell'account di servizio come secret di Kubernetes nel tuo cluster utente:
kubectl --namespace binauthz-system create secret generic binauthz-sa --from-file=key.json=${SA_JSON_PATH}
Installa il Modulo di 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, in modo 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 Anthos.
In ogni esempio, configuri il criterio e lo testi provando a eseguire il deployment di un'immagine container nel tuo cluster Anthos.
Consenti tutto
Questa sezione mostra un caso di successo. Puoi configurare il criterio di Autorizzazione binaria in modo che un'immagine container soddisfi il criterio e ne venga eseguito il deployment.
In Google Cloud, segui questi passaggi:
Console
Nella console Google Cloud, vai alla pagina Autorizzazione binaria.
Assicurati di selezionare l'ID progetto Connect.
Fai clic su Modifica criterio.
In Regola predefinita del progetto, seleziona Consenti tutte le immagini.
Fai clic su Save Policy (Salva criterio).
gcloud
Imposta
PROJECT_ID
per il tuo progetto Connect. Puoi trovare questo ID progetto nel campogkeConnect
del file di configurazione del cluster utente.export PROJECT_ID=PROJECT_ID
Impostare il progetto Google Cloud predefinito.
gcloud config set project ${PROJECT_ID}
Esporta il file YAML dei criteri nel tuo sistema locale:
gcloud container binauthz policy export > policy.yaml
Il file YAML ha il seguente aspetto:
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/<var>PROJECT_ID</var>/policy
Modifica
policy.yaml
.Imposta
evaluationMode
suALWAYS_ALLOW
.Se il file contiene un blocco
requireAttestationsBy
, elimina questo blocco.Salva il file.
Importa
policy.yaml
come segue:gcloud container binauthz policy import policy.yaml
Sulla workstation di amministrazione dei cluster Anthos, segui questi passaggi:
Creare 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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Crea il pod:
kubectl apply -f pod.yaml
Vedrai che il deployment del pod è stato eseguito correttamente.
Elimina il pod:
kubectl delete -f pod.yaml
Disattiva tutto
Questa sezione mostra un caso di errore. In questa sezione configurerai il criterio predefinito 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 Connect sia selezionato.
Fai clic su Modifica criterio.
In Regola predefinita del progetto, seleziona Non consentire tutte le immagini.
Fai clic su Salva criterio.
gcloud
Imposta
PROJECT_ID
sul tuo ID progetto Connect.export PROJECT_ID=PROJECT_ID
Impostare il progetto Google Cloud predefinito.
gcloud config set project ${PROJECT_ID}
Esporta il file YAML del criterio:
gcloud container binauthz policy export > policy.yaml
Modifica
policy.yaml
.Imposta
evaluationMode
suALWAYS_DENY
.Se il file contiene un blocco
requireAttestationsBy
, elimina questo blocco.Salva il file.
Importa
policy.yaml
come segue:gcloud container binauthz policy import policy.yaml
Sulla workstation di amministrazione dei cluster Anthos, segui questi passaggi:
Creare 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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
Crea il pod:
kubectl apply -f pod.yaml
Vedrai 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
Ottieni l'ID risorsa del cluster utente
Questa sezione mostra come comporre l'ID risorsa del cluster per il cluster utente. Nel criterio di Autorizzazione binaria, puoi creare regole specifiche del cluster. Devi associare queste regole a un ID risorsa specifico del cluster, che si basa sull'ID del cluster.
L'ID risorsa è il seguente:
Console
Nella console Google Cloud, vai alla pagina Cluster Anthos.
Seleziona l'ID progetto Connect per i cluster Anthos. Puoi trovare questo ID progetto nella sezione
gkeConnect
del file di configurazione del cluster utente.In Cluster gestiti Anthos, 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 di amministrazione dei cluster Anthos.
Sulla workstation di amministrazione, esegui questo comando:
kubectl get membership -o yaml
Recupera l'ID cluster dal campo
spec.owner.id
dell'output. Segue 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
.
Questo ID risorsa viene utilizzato quando definisci regole specifiche per il cluster. Scopri come impostare regole specifiche per il cluster utilizzando la console Google Cloud o gcloud CLI.
Aggiorna il criterio di errore
Il webhook del Modulo di autorizzazione binaria può essere configurato su apertura non riuscita o chiusura non riuscita.
Chiusura non riuscita
Per aggiornare il criterio di errore in modo che la chiusura non vada a buon fine:
Modifica il file manifest-0.2.6.yaml e imposta failurePolicy su
Fail
Riattiva il webhook:
kubectl apply -f manifest-0.2.6.yaml
Verrà visualizzato 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 il criterio di errore in modo che l'apertura non vada a buon fine:
Modifica il file manifest-0.2.6.yaml e imposta failurePolicy su
Ignore
Riattiva il webhook:
kubectl apply -f manifest-0.2.6.yaml
Verrà visualizzato 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 ulteriori informazioni, consulta il criterio relativo agli errori dei 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 ad Autorizzazione binaria:
kubectl delete -f manifest-0.2.6.yaml kubectl delete namespace binauthz-system
Passaggi successivi
- Per verificare la conformità ai criteri al momento della creazione del pod senza bloccare effettivamente la creazione del pod, consulta Abilitare la prova.
- Per forzare la creazione di un pod che altrimenti verrebbe bloccato dall'applicatore di Autorizzazione binaria, consulta Utilizzare il deployment di emergenza.
- Utilizza l'attestatore
built-by-cloud-build
per eseguire il deployment solo delle immagini create da Cloud Build (anteprima). - Per implementare un criterio di Autorizzazione binaria basato su attestatore, vedi quanto segue:
- Configura un criterio utilizzando la console Google Cloud o lo strumento a riga di comando. Imposta la regola predefinita o specifica del cluster per richiedere le attestazioni.
- Crea un attestatore utilizzando la console Google Cloud o lo strumento a riga di comando.
- Crea un'attestazione.
- Per visualizzare gli eventi di log relativi ad Autorizzazione binaria per i cluster Anthos, consulta Visualizzare gli eventi di Cloud Audit Logs.
- Monitorare le metriche.