Configurazione di Cluster Anthos su VMware

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questo documento mostra come configurare Autorizzazione binaria per Cluster Anthos su VMware (GKE On-Prem). Mostra quindi come configurare un criterio di Autorizzazione binaria di esempio.

Prima di iniziare

  1. Devi avere i cluster Anthos su VMware 1.4 o versioni successive installati e configurati, con un cluster amministratore e un cluster utente. Il cluster utente deve essere registrato con Connect.

  2. Il servizio di Autorizzazione binaria utilizza un indirizzo IP pubblico, accessibile tramite una normale connessione a Internet. Configura le regole del firewall Anthos clusters on VMware per HTTPS per consentire al cluster utente di accedere all'endpoint binaryauthorization.googleapis.com.

  3. Se vuoi utilizzare Cloud Audit Logs centralizzati per visualizzare le voci degli audit log, incluse quelle di Autorizzazione binaria per Cluster Anthos su VMware, devi configurare gli audit log di Cloud nella configurazione del cluster utente prima di creare il cluster utente.

  4. Devi attivare l'API Binary Authorization come segue:

    1. Vai alla console Google Cloud.

      Abilita le API

    2. Nell'elenco a discesa del progetto, seleziona il tuo progetto Connect. Puoi trovare questo progetto Google Cloud nella sezione gkeConnect del file di configurazione del cluster utente. ovvero il progetto cloud che connette il cluster utente a Google Cloud.

Configurare Autorizzazione binaria

In questa sezione configurerai l'Autorizzazione binaria per Cluster Anthos su VMware nel tuo cluster utente.

Specifica le variabili di ambiente di installazione

Per specificare le variabili di ambiente:

  1. Utilizza SSH per connetterti ai tuoi cluster Anthos sulla workstation di amministrazione VMware.

  2. Specifica il tuo progetto Connect:

    export PROJECT_ID=PROJECT_ID
    

    Sostituisci PROJECT_ID con il progetto Cloud nella sezione gkeConnect del file di configurazione del cluster utente.

  3. Specifica il percorso del file kubeconfig del cluster utente:

    export KUBECONFIG=PATH
    

    Sostituisci PATH con il percorso del file kubeconfig del cluster utente.

  4. Scegli un nome per l'account di servizio dell'API Binary Authorization API:

    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.

  5. Specifica il percorso del file della chiave dell'account di servizio scaricato in un secondo momento in questa guida:

    export SA_JSON_PATH=SA_KEY_FILE_PATH
    

    Sostituisci SA_KEY_FILE_PATH con il percorso del file della chiave JSON dell'account di servizio.

Installa il modulo Autorizzazione binaria nel cluster utente

Per installare il modulo Autorizzazione binaria, procedi nel seguente modo:

  1. Imposta il progetto predefinito per Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  2. Crea un account di servizio per l'accesso all'API Binary Authorization:

    gcloud iam service-accounts create ${SA_NAME}
    
  3. Concedi il ruolo binaryauthorization.policyEvaluator all'account di servizio di accesso API Binary Authorization nel tuo progetto Connect:

    gcloud projects add-iam-policy-binding ${PROJECT_ID}\
      --member serviceAccount:${SA_NAME}@${PROJECT_ID}.iam.gserviceaccount.com\
      --role roles/binaryauthorization.policyEvaluator
    
  4. Creare una directory di lavoro:

    1. Crea una directory denominata binauthz.

    2. Passa alla directory.

  5. Scarica il file manifest-0.2.2.yaml, che utilizzi per installare il modulo di autorizzazione binaria nel cluster utente Cluster Anthos su VMware:

    gsutil cp gs://gke-on-prem-release/binauthz/manifest-0.2.2.yaml .
    
  6. Crea un file YAML per lo spazio dei nomibinauthz-system.

    Copia quanto segue in un file denominato namespace.yaml:

    apiVersion: v1
    kind: Namespace
    metadata:
      labels:
        control-plane: binauthz-controller
      name: binauthz-system
    
  7. Crea lo spazio dei nomi nel tuo cluster utente:

    kubectl apply -f namespace.yaml
    

    L'output visualizzato è simile al seguente:

    namespace/binauthz-system created
    
  8. 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
    
  9. Salva la chiave dell'account di servizio come secret di Kubernetes nel cluster utente:

    kubectl --namespace binauthz-system create secret generic binauthz-sa --from-file=key.json=${SA_JSON_PATH}
    
  10. Installa il modulo di Autorizzazione binaria nel cluster utente:

    kubectl apply -f manifest-0.2.2.yaml
    
  11. Verifica che il deployment sia stato creato:

    kubectl get pod --namespace binauthz-system
    

    Vedrai il pod binauthz-module-deployment-* elencato con Status di Running e 1/1 pod pronto, 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 Cluster Anthos su VMware.

In ogni esempio, configuri il criterio e lo sottoponi a test cercando di eseguire il deployment di un'immagine container nei cluster utente Cluster Anthos su VMware.

Consenti tutto

Questa sezione mostra un caso di successo. Configura 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

  1. Nella console Google Cloud, vai alla pagina Autorizzazione binaria.

    Vai ad Autorizzazione binaria

  2. Assicurati di selezionare il tuo ID progetto Connect.

  3. Fai clic su Modifica criterio.

  4. In Regola predefinita del progetto, seleziona Consenti tutte le immagini.

  5. Fai clic su Save Policy (Salva criterio).

gcloud

  1. Imposta il PROJECT_ID per il progetto Connect. Puoi trovare questo ID progetto nel campo gkeConnect del file di configurazione del cluster utente.

    export PROJECT_ID=PROJECT_ID
    

    Imposta il progetto Google Cloud predefinito.

    gcloud config set project ${PROJECT_ID}
    
  2. Esporta il file YAML del criterio nel tuo sistema locale:

    gcloud container binauthz policy export  > policy.yaml
    

    Il file YAML è simile al seguente:

    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
    
  3. Modifica policy.yaml.

  4. Imposta evaluationMode su ALWAYS_ALLOW.

  5. Se il file contiene un blocco requireAttestationsBy, eliminalo.

  6. Salva il file.

  7. Importa policy.yaml nel seguente modo:

    gcloud container binauthz policy import policy.yaml
    

Nella workstation di amministrazione di Cluster Anthos su VMware:

  1. 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
    
  2. Crea il pod:

    kubectl apply -f pod.yaml
    

    Vedi che il deployment del pod è stato eseguito correttamente.

  3. Elimina il pod:

    kubectl delete -f pod.yaml
    

Disattiva tutto

Questa sezione mostra un caso di errore. In questa sezione configurerai il criterio predefinito in modo da impedire il deployment dell'immagine container.

In Google Cloud, segui questi passaggi:

Console

  1. Nella console Google Cloud, vai alla pagina Autorizzazione binaria.

    Vai ad Autorizzazione binaria

  2. Assicurati che il progetto Connect sia selezionato.

  3. Fai clic su Modifica criterio.

  4. In Regola predefinita del progetto, seleziona Non consentire tutte le immagini.

  5. Fai clic su Salva criterio.

gcloud

  1. Imposta PROJECT_ID sull'ID progetto di Connect.

    export PROJECT_ID=PROJECT_ID
    
  2. Imposta il progetto cloud predefinito.

    gcloud config set project ${PROJECT_ID}
    
  3. Esporta il file YAML del criterio:

    gcloud container binauthz policy export  > policy.yaml
    
  4. Modifica policy.yaml.

  5. Imposta evaluationMode su ALWAYS_DENY.

  6. Se il file contiene un blocco requireAttestationsBy, eliminalo.

  7. Salva il file.

  8. Importa policy.yaml nel seguente modo:

    gcloud container binauthz policy import policy.yaml
    

Nella workstation di amministrazione di Cluster Anthos su VMware:

  1. 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
    
  2. Crea il pod:

    kubectl apply -f pod.yaml
    

    Vedrai che il deployment del pod è stato bloccato. L'output ha il seguente aspetto:

    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 del cluster per il cluster utente. Nel tuo criterio di Autorizzazione binaria, puoi creare regole specifiche per il cluster. Associa queste regole a un ID risorsa specifico del cluster, basato sull'ID del tuo cluster.

Puoi ottenere l'ID risorsa nel seguente modo:

Console

  1. Nella console Google Cloud, vai alla pagina Cluster Anthos.

    Vai a Cluster

  2. Seleziona l'ID progetto Connect per i cluster Anthos su VMware. Puoi trovare questo ID progetto nella sezione gkeConnect del file di configurazione del cluster utente.

  3. In Cluster gestiti da Anthos, trova l'ID cluster nella colonna Nome.

  4. 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

  1. Utilizza SSH per connetterti ai tuoi cluster Anthos sulla workstation di amministrazione VMware.

  2. Nella workstation di amministrazione, esegui il comando seguente:

    kubectl get membership -o yaml
    
  3. Recupera l'ID cluster dal campo spec.owner.id dell'output. L'output di esempio è il seguente:

    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.

  4. Per creare l'ID risorsa, aggiungi il prefisso global. all'ID cluster. Nell'esempio, l'ID risorsa è global.my-cluster-id.

Questo ID risorsa serve per definire regole specifiche per il cluster. Scopri come impostare regole specifiche per il cluster utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.

Aggiorna il criterio in caso di errore

Il webhook modulo Autorizzazione binaria può essere configurato su fail open o fail close.

Chiusura non riuscita

Per aggiornare il criterio in modo che non vada a buon fine, procedi nel seguente modo:

  1. Modifica il file manifest-0.2.2.yaml e imposta fallPolicy su Fail

  2. Riattiva il webhook:

    kubectl apply -f manifest-0.2.2.yaml
    

    L'output visualizzato è 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 in errore in modo che l'apertura non vada a buon fine, procedi nel seguente modo:

  1. Modifica il file manifest-0.2.2.yaml e imposta fallPolicy su Ignore

  2. Riattiva il webhook:

    kubectl apply -f manifest-0.2.2.yaml
    

    L'output visualizzato è 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 di webhook.

Esegui la pulizia

  1. Il seguente esempio di codice mostra come disattivare il webhook:

    kubectl delete ValidatingWebhookConfiguration/binauthz-validating-webhook-configuration
    
  2. Il seguente esempio di codice mostra come riattivare il webhook:

    kubectl apply -f manifest-0.2.2.yaml
    
  3. Il seguente esempio di codice mostra come eliminare tutte le risorse relative ad Autorizzazione binaria:

    kubectl delete -f manifest-0.2.2.yaml
    kubectl delete namespace binauthz-system
    

Passaggi successivi