Configurazione per i cluster on-premise

Questo documento mostra come configurare l'Autorizzazione binaria per i cluster on-premise creati nell'ambito di Google Distributed Cloud. Poi viene mostrato come configurare un criterio di Autorizzazione binaria di esempio.

Prima di iniziare

  1. Assicurati che nei cluster sia supportata una versione Google Distributed Cloud. L'autorizzazione binaria supporta i seguenti ambienti.

    Bare metal

    Google Distributed Cloud 1.14 o 1.15. Per la versione 1.16 o successive, Autorizzazione binaria può essere configurata durante la creazione o l'aggiornamento del cluster.

    VMware

    Distributed Cloud per VMware (Google Distributed Cloud) 1.4 o versioni successive.

  2. Il servizio di autorizzazione dei binari utilizza un indirizzo IP esterno, accessibile tramite una normale connessione a internet. Configura il tuo regole firewall per HTTPS per consentire al cluster utente di accedere all'endpoint binaryauthorization.googleapis.com.

  3. Se vuoi utilizzare gli audit log di Cloud centralizzati per visualizzare le voci degli audit log, incluse quelle di Autorizzazione binaria per i cluster esterni a Google Cloud, devi configurare gli audit log di Cloud nella configurazione del cluster.

    Bare metal

    Configura Cloud Audit Logs in Google Distributed Cloud.

    VMware

    Configura Cloud Audit Logs in Google Distributed Cloud.

  4. Devi abilitare l'API Binary Authorization:

    1. Vai alla console Google Cloud.

      Abilita le API

    2. Nell'elenco a discesa del progetto, seleziona il progetto host del parco risorse. Puoi trovarlo nella sezione gkeConnect del file di configurazione del cluster utente. Questo è il progetto Google Cloud che connette il cluster utente a Google Cloud.

Configura Autorizzazione binaria

In questa sezione, configuri Autorizzazione binaria nel tuo cluster on-premise.

Specifica le variabili di ambiente di installazione

Per specificare le variabili di ambiente:

Utilizzare Workload Identity

  1. Specifica il progetto host del parco risorse:

    export PROJECT_ID=PROJECT_ID
    
  2. Imposta l'ID abbonamento del parco risorse sul tuo ID cluster:

    L'ID abbonamento è elencato nella colonna NAME quando esegui Comando gcloud container fleet memberships list.

    export MEMBERSHIP_ID=CLUSTER_NAME
    

Utilizzo della chiave dell'account di servizio

  1. 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 di utenti.

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

    export KUBECONFIG=PATH
    

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

  3. 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 scelto. Il Modulo di autorizzazione binaria utilizza questo account di servizio per accedere all'API Binary Authorization.

  4. Specifica il percorso del file della chiave dell'account di servizio scaricato più avanti in questa guida:

    export SA_JSON_PATH=SA_KEY_FILE_PATH
    

    Sostituisci SA_KEY_FILE_PATH con il percorso del file 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 carichi di lavoro del cluster di autenticarsi in Google senza che tu debba scaricare, ruotare manualmente e gestire in generale le chiavi dell'account di servizio Google Cloud. Puoi scoprire di più sul funzionamento di Workload Identity del parco risorse e sui vantaggi del suo utilizzo in Utilizzare Workload Identity del parco risorse.

  1. Concedi il ruolo binaryauthorization.policyEvaluator all'account di servizio Kubernetes nel progetto host del tuo parco:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
        --member="serviceAccount:${PROJECT_ID}.svc.id.goog[binauthz-system/binauthz-admin]" \
        --role="roles/binaryauthorization.policyEvaluator"
    
  2. Crea una directory di lavoro:

    1. Crea una directory denominata binauthz.

    2. Passa alla directory.

  3. Scarica il file manifest-wi-0.2.6.yaml.tmpl, che utilizzi per installare il Modulo di autorizzazione binaria nel cluster di utenti:

    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 .
    
  4. Sostituisci le variabili di ambiente nel modello:

    envsubst < manifest-wi-0.2.6.yaml.tmpl > manifest-0.2.6.yaml
    
  5. Installa il Modulo di autorizzazione binaria nel cluster utente:

    kubectl apply -f manifest-0.2.6.yaml
    
  6. 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 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

  1. Imposta il progetto predefinito per Google Cloud CLI:

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

    gcloud iam service-accounts create ${SA_NAME}
    
  3. Concedi il ruolo binaryauthorization.policyEvaluator a l'account di servizio di accesso all'API Binary Authorization sul 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"
    
  4. Crea una directory di lavoro:

    1. Crea una directory denominata binauthz.

    2. Passa alla directory.

  5. Scarica il file manifest-0.2.6.yaml, che utilizzi per installare il Modulo di autorizzazione binaria nel cluster di utenti:

    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 .
    
  6. 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
    
  7. Crea lo spazio dei nomi nel cluster utente:

    kubectl apply -f namespace.yaml
    

    Viene visualizzato un output 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 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.6.yaml
    
  11. Verifica che il deployment sia stato creato:

    kubectl get pod --namespace binauthz-system
    

    Il pod binauthz-module-deployment-* è elencato con Status di Running e 1/1 pod pronti, simile a questo output:

    NAME                                          READY   STATUS    RESTARTS   AGE
    binauthz-module-deployment-5fddf9594f-qjprz   1/1     Running   0          11s
    

Configura e utilizza 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, devi configurare il criterio e quindi testarlo cercando di di un'immagine container nel tuo cluster.

Consenti tutto

Questa sezione illustra un caso di successo. Configura il criterio di Autorizzazione binaria in modo che un'immagine container soddisfi il criterio e venga eseguita il deployment.

In Google Cloud:

Console

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

    Vai ad Autorizzazione binaria

  2. Assicurati di selezionare l'ID progetto host del parco risorse.

  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 PROJECT_ID per l'host del parco risorse progetto. 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 dei criteri sul sistema locale:

    gcloud container binauthz policy export  > policy.yaml
    

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

  4. Imposta evaluationMode su ALWAYS_ALLOW.

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

  6. Salva il file.

  7. Importa policy.yaml nel seguente modo:

    gcloud container binauthz policy import policy.yaml
    

Per aggiungere un'immagine esente alla lista consentita, aggiungi quanto segue al file delle norme:

admissionWhitelistPatterns:
  - namePattern: EXEMPT_IMAGE_PATH

Sostituisci EXEMPT_IMAGE_PATH con il percorso dell'immagine da escludere. Per escludere altre immagini, aggiungi altre voci - namePattern. Scopri di più su admissionWhitelistPatterns.

Nella workstation di amministrazione, svolgi i seguenti passaggi:

  1. 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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    
  2. Crea il pod:

    kubectl apply -f pod.yaml
    

    Vedrai che il pod è stato implementato correttamente.

  3. Elimina il pod:

    kubectl delete -f pod.yaml
    

Disattiva tutto

Questa sezione illustra un caso di errore. In questa sezione, configurerai il criterio predefinito per non consentire il deployment dell'immagine del 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 host del parco risorse 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 su ID progetto host del parco risorse.

    export PROJECT_ID=PROJECT_ID
    
  2. Impostare il progetto Google 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
    

Sulla workstation di amministrazione:

  1. 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: gcr.io/google-samples/hello-app@sha256:c62ead5b8c15c231f9e786250b07909daf6c266d0fcddd93fea882eb722c3be4
    
  2. Crea il pod:

    kubectl apply -f pod.yaml
    

    Puoi notare 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 cluster utente

Questa sezione mostra come comporre l'ID risorsa del cluster per il tuo cluster di utenti. Nel criterio di autorizzazione binaria, puoi creare regole specifiche per i cluster. Associa queste regole a un ID risorsa specifico per il cluster, basato sull'ID cluster.

L'ID risorsa viene ottenuto in questo modo:

Console

  1. Nella console Google Cloud, vai alla pagina Cluster di GKE.

    Vai a Cluster

  2. Seleziona l'ID progetto host del parco risorse per i cluster. Puoi trovare questo ID progetto nella sezione gkeConnect del file di configurazione del cluster utente.

  3. Nell'elenco dei cluster, individua l'ID cluster nella colonna Nome.

  4. Per creare l'ID risorsa, aggiungi il prefisso global. all'ID cluster in modo che che l'ID risorsa abbia il seguente formato: global.CLUSTER_ID.

gcloud

  1. Utilizza SSH per connetterti alla workstation di amministrazione.

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

    kubectl get membership -o yaml
    
  3. Ottieni l'ID cluster dal campo spec.owner.id dell'output. Output di esempio che segue:

    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. Nel 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 i cluster utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.

Aggiorna il criterio di errore

Il webhook del Modulo di autorizzazione binaria può essere configurato in modo da non avere esito o avere esito negativo.

Chiusura non riuscita

Per aggiornare il criterio di errore per la chiusura non riuscita, segui questi passaggi:

  1. Modifica il file manifest-0.2.6.yaml e imposta failurePolicy su Fail.

  2. Riattiva l'webhook:

    kubectl apply -f manifest-0.2.6.yaml
    

    Viene 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 per la mancata apertura, segui questi passaggi:

  1. Modifica il file manifest-0.2.6.yaml e imposta failurePolicy su Ignore.

  2. 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 scoprire di più, consulta le norme relative agli errori dei 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 l'webhook:

    kubectl apply -f manifest-0.2.6.yaml
    
  3. Il seguente esempio di codice mostra come eliminare tutte le risorse relative all'autorizzazione di codice:

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

Passaggi successivi