Applica in modo selettivo i criteri firewall in GKE


Questa pagina mostra come applicare in modo selettivo i criteri firewall di rete firewall di Cloud Next Generation in Google Kubernetes Engine (GKE) utilizzando i tag. Per scoprire come utilizzare i tag in GKE per altri scopi, come la gestione della fatturazione o i criteri IAM condizionali, consulta Gestire le risorse GKE utilizzando i tag.

Informazioni sui tag

I tag sono coppie chiave-valore che consentono di annotare e gestire le risorse Google Cloud a livello di organizzazione o di progetto. Puoi utilizzare i tag per organizzare le risorse e applicare in modo condizionale criteri come firewall o criteri IAM. Puoi utilizzare controllo dell'accesso IAM per definire chi può allegare, creare, aggiornare o eliminare i tag.

Per ulteriori informazioni sui tag, consulta la Panoramica dei tag nella documentazione di Resource Manager.

Utilizza i tag per applicare i criteri firewall di rete

Puoi usare i tag per applicare in modo condizionale criteri firewall di rete globali o regionali ai tuoi nodi GKE. Devi specificare lo scopo GCE_FIREWALL per i tag che vuoi utilizzare con i criteri firewall di rete. Quando applichi tag con scopo firewall ai cluster GKE o ai pool di nodi, GKE li collega automaticamente alle macchine virtuali (VM) di Compute Engine corrispondenti.

I tag per i criteri firewall di rete sostituiscono la necessità di utilizzare tag di rete, ovvero metadati che chiunque può collegare alle VM di Compute Engine sottostanti per l'applicazione delle regole firewall Virtual Private Cloud e che non supportano controllo dell'accesso dell'accesso IAM. Se attualmente utilizzi tag di rete con regole firewall VPC, ti consigliamo di eseguire la migrazione ai criteri firewall di rete e di utilizzare tag firewall sicuri. Per un confronto dettagliato, consulta Confrontare tag di rete e tag in questo documento.

Tag per il flusso di lavoro dei criteri firewall di rete

Per utilizzare i tag con criteri firewall di rete in GKE:

  1. Crea un tag:

    1. Definisci una chiave tag a livello di organizzazione o progetto, ad esempio env.
    2. Definisci i possibili valori tag per la chiave, ad esempio dev, staging e prod.
    3. Specifica il tag per l'utilizzo del criterio firewall di rete.

  2. Concedi agli utenti l'accesso per interagire con il tag firewall.

  3. Applica coppie chiave-valore dei tag a cluster GKE o pool di nodi specifici. GKE collega automaticamente i tag alle VM di Compute Engine sottostanti per l'applicazione dei criteri firewall.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti attività:

  • Abilita l'API Google Kubernetes Engine.
  • Abilita l'API Google Kubernetes Engine
  • Se vuoi utilizzare Google Cloud CLI per questa attività, installa e initialize gcloud CLI. Se hai già installato gcloud CLI, scarica la versione più recente eseguendo gcloud components update.

Requisiti e limitazioni

  • I tag per i criteri firewall di rete sono supportati in GKE 1.28 e versioni successive. Se utilizzi una versione di GKE precedente alla 1.28, utilizza invece tag di rete con regole firewall VPC.
  • Originariamente il cluster GKE dovrebbe essere stato creato utilizzando GKE versione 1.28 o successiva. L'upgrade di un cluster da una versione precedente alla 1.28 alla versione 1.28 o successiva non abilita i tag.
  • Il cluster GKE e il tag devono essere associati alla stessa rete VPC.
  • Nei cluster Standard, ogni pool di nodi supporta fino a cinque tag firewall collegati.
  • I cluster Autopilot supportano fino a cinque tag firewall.
  • GKE rifiuta le chiavi tag che utilizzano il prefisso gke-managed.
  • Devi creare le coppie chiave-valore dei tag prima di poterle collegare a cluster o pool di nodi.

Ruoli e autorizzazioni IAM

Per ottenere le autorizzazioni necessarie per utilizzare i tag per i criteri firewall in GKE, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Per concedere le autorizzazioni necessarie per i tag agli utenti e agli agenti di servizio GKE:
  • Per creare e amministrare i tag: Amministratore tag (roles/resourcemanager.tagAdmin) sull'organizzazione o sul progetto
  • Per collegare i tag alle risorse: Tag utente (roles/resourcemanager.tagUser) sul progetto

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Creare tag

I tag devono esistere per poterli collegare a cluster o nodi. Per creare un tag, consulta Utilizzare i tag per i firewall nella documentazione di Cloud NGFW.

Ad esempio, per creare un tag firewall con ambito a livello di progetto, esegui questi comandi:

  1. Crea la chiave tag:

    gcloud resource-manager tags keys create TAG_KEY \
        --parent=projects/PROJECT_ID \
        --purpose=GCE_FIREWALL \
        --purpose-data=network=PROJECT_ID/NETWORK_NAME
    

    Sostituisci quanto segue:

    • TAG_KEY: il nome della chiave tag, ad esempio env
    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • NETWORK_NAME: il nome della rete VPC che utilizzerai con il tag
  2. Recupera l'ID della chiave tag:

    gcloud resource-manager tags keys describe PROJECT_ID/TAG_KEY \
        --format="value(name)"
    

    L'output è tagKeys/KEY_ID, dove KEY_ID è un ID numerico per la chiave. Annota questo ID per un secondo momento.

  3. Aggiungi un valore tag alla chiave tag:

    gcloud resource-manager tags values create TAG_VALUE \
        --parent=tagKeys/KEY_ID
    

    Sostituisci TAG_VALUE con il nome di un valore consentito per quella chiave tag, ad esempio dev.

Sintassi dei tag nei comandi gcloud CLI

Quando fai riferimento ai tag con gcloud CLI, devi formattare le coppie chiave-valore utilizzando una delle seguenti sintassi:

Sintassi dei tag

tagKeys/KEY_ID=tagValues/VALUE_ID

Sostituisci quanto segue:

  • KEY_ID: l'ID della chiave numerica
  • VALUE_ID: l'ID valore numerico

Ad esempio, tagKeys/123456789=tagValues/987654321.


ORGANIZATION_ID/TAG_KEY=TAG_VALUE

Sostituisci quanto segue:

  • ORGANIZATION_ID: il tuo ID organizzazione Google Cloud numerico
  • TAG_KEY: il nome della chiave tag creata
  • TAG_VALUE: il nome del valore tag creato

Ad esempio, 12345678901/env=dev.


PROJECT_ID/TAG_KEY=TAG_VALUE

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del tuo progetto Google Cloud
  • TAG_KEY: il nome della chiave tag creata
  • TAG_VALUE: il nome del valore tag creato

Ad esempio, example-project/env=dev.


PROJECT_NUMBER/TAG_KEY=TAG_VALUE

Sostituisci quanto segue:

  • PROJECT_ID: l'identificatore numerico del tuo progetto Google Cloud
  • TAG_KEY: il nome della chiave tag creata
  • TAG_VALUE: il nome del valore tag creato

Ad esempio, 11223344556/env=dev.

Tag di destinazione con criteri firewall

Dopo aver creato i tag, puoi fare riferimento a coppie chiave-valore specifiche nelle regole dei criteri firewall. Per le istruzioni, consulta Utilizzare i tag per i firewall.

Concedi autorizzazioni IAM agli agenti di servizio

Affinché GKE possa collegare automaticamente i tag a nuovi nodi durante gli eventi di scale up, devi concedere i ruoli IAM corrispondenti agli account di servizio gestiti da Google Cloud, chiamati anche agenti di servizio.

  1. Concedi il ruolo Utente tag (roles/resourcemanager.tagUser) all'agente di servizio Kubernetes Engine:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Sostituisci PROJECT_NUMBER con il numero di progetto Google Cloud del cluster. Per trovare il numero del progetto, esegui questo comando:

    gcloud projects describe PROJECT_ID --format="value(projectNumber)"
    
  2. Concedi il ruolo Amministratore blocchi tag (roles/resourcemanager.tagHoldAdmin) all'agente di servizio Kubernetes Engine per la coppia chiave-valore del tag:

    gcloud resource-manager tags values add-iam-policy-binding PROJECT_ID/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

    Questo ruolo consente all'agente di servizio di impedire l'eliminazione dei tag se la coppia chiave-valore è ancora in uso in GKE.

  3. Concedi il ruolo Utente tag (roles/resourcemanager.tagUser) all'agente di servizio API di Google:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

Concedi ruoli IAM aggiuntivi per i tag esterni al progetto

Per utilizzare i tag di proprietà di un'organizzazione o di un progetto diverso rispetto al progetto del cluster, segui questi passaggi aggiuntivi:

  1. Concedi il ruolo Utente tag (roles/resourcemanager.tagUser) all'agente di servizio Kubernetes Engine per i tag nella risorsa padre:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    

    Sostituisci quanto segue:

    • PARENT_RESOURCE: l'ID progetto o l'ID organizzazione della risorsa proprietaria del tag
    • PROJECT_NUMBER: il numero del progetto cluster
  2. Concedi il ruolo Utente tag (roles/resourcemanager.tagUser) all'accesso Agente di servizio delle API di Google per i tag nella risorsa padre:

    gcloud resource-manager tags keys add-iam-policy-binding PARENT_RESOURCE/TAG_KEY \
        --member=serviceAccount:PROJECT_NUMBER@cloudservices.gserviceaccount.com \
        --role=roles/resourcemanager.tagUser \
        --condition=None
    
  3. Concedi il ruolo Amministratore archiviazioni a fini legali nei tag (roles/resourcemanager.tagHoldAdmin) all'agente di servizio Kubernetes Engine per la coppia chiave-valore dei tag:

    gcloud resource-manager tags values add-iam-policy-binding PARENT_RESOURCE/TAG_KEY/TAG_VALUE \
        --member=serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com \
        --role=roles/resourcemanager.tagHoldAdmin
    

Collega tag firewall ai cluster Autopilot

I tag firewall vengono collegati ai cluster Autopilot a livello di cluster. GKE applica automaticamente questi tag a livello di cluster a ogni nodo.

Collega i tag quando crei un nuovo cluster Autopilot

Esegui questo comando:

gcloud beta container clusters create-auto CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del nuovo cluster.
  • LOCATION: la regione Compute Engine del cluster.
  • TAG1,TAG2,...: un insieme di coppie chiave-valore separato da virgole da collegare. Ogni coppia chiave-valore deve utilizzare una sintassi supportata, come descritto nella sezione Sintassi dei tag nei comandi. Ad esempio, example-project/env=dev,1234567901/team=sre.

Collega tag a cluster Autopilot esistenti

Esegui questo comando:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,...

Quando aggiorni i tag su un cluster, GKE sovrascrive i tag esistenti su tutti i nodi.

Collega tag firewall a cluster standard e pool di nodi

Il metodo da utilizzare per collegare i tag varia a seconda che tu voglia che altri pool di nodi nel cluster ereditino i tag, come segue:

Tag firewall standard per il cluster
--autoprovisioning-resource-manager-tags

Impostazione a livello di cluster

GKE applica i tag a tutti i nuovi pool di nodi di cui è stato eseguito il provisioning automatico nel cluster. Se utilizzi questo flag su un cluster esistente, i pool di nodi esistenti conservano tutti i tag applicati prima dell'aggiornamento.

--resource-manager-tags

Impostazione a livello di pool di nodi

GKE applica i tag al pool di nodi specificato. Se utilizzi questo flag durante la creazione del cluster, GKE applica i tag al pool di nodi predefinito creato da GKE. Se utilizzi questo flag su un pool di nodi di cui è stato eseguito il provisioning automatico, GKE sovrascrive tutti i tag esistenti sul pool di nodi.

Collega i tag firewall ai cluster standard

Puoi collegare i tag a cluster Standard nuovi o esistenti. Quando colleghi tag a un intero cluster, GKE considera questi tag impostati a livello di cluster.

Collega tag a un nuovo cluster Standard con il provisioning automatico dei nodi

Per impostazione predefinita, GKE utilizza i tag a livello di cluster per i nuovi nodi di cui è stato eseguito il provisioning automatico. Per il pool di nodi predefinito che GKE crea nel cluster non viene eseguito automaticamente il provisioning e non riceve questi tag.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=TAG1,TAG2,... \
    --enable-autoprovisioning \
    --max-cpu=MAX_CPU \
    --max-memory=MAX_MEMORY

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del nuovo cluster
  • LOCATION: la regione o la zona di Compute Engine per il cluster
  • TAG1,TAG2,...: un insieme di coppie chiave-valore separato da virgole da collegare. Ogni coppia chiave-valore deve utilizzare una sintassi supportata, come descritto nella sezione Sintassi dei tag nei comandi. Ad esempio, example-project/env=dev,1234567901/team=sre.
  • MAX_CPU: il numero massimo di core per il cluster
  • MAX_MEMORY: la capacità massima di memoria del cluster, in gigabyte

Collega i tag quando abiliti il provisioning automatico dei nodi su un cluster esistente

GKE applica questi tag solo ai nuovi pool di nodi di cui è stato eseguito il provisioning automatico. I pool di nodi esistenti conservano tutti i tag che avevano prima dell'aggiornamento.

  1. Associa i tag al cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=TAG1,TAG2,...
    
  2. Abilita il provisioning automatico dei nodi nel cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --enable-autoprovisioning \
        --max-cpu=MAX_CPU \
        --max-memory=MAX_MEMORY
    

Collega tag firewall ai pool di nodi

Puoi collegare i tag a pool di nodi nuovi o esistenti indipendentemente dal fatto che utilizzino il provisioning automatico dei nodi. GKE considera questi tag come un'impostazione a livello di pool di nodi.

Collega tag al pool di nodi predefinito

GKE collega i tag specificati utilizzando il flag --resource-manager-tags quando crei un cluster al pool di nodi predefinito creato da GKE nel cluster.

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del nuovo cluster
  • LOCATION: la regione o la zona di Compute Engine per il cluster
  • TAG1,TAG2,...: un insieme di coppie chiave-valore separato da virgole da collegare. Ogni coppia chiave-valore deve utilizzare una sintassi supportata, come descritto nella sezione Sintassi dei tag nei comandi. Ad esempio, example-project/env=dev,1234567901/team=sre.

Collega tag a un nuovo pool di nodi

Quando utilizzi il flag --resource-manager-tags durante la creazione del pool di nodi, GKE associa i tag specificati a quel pool di nodi.

gcloud beta container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Sostituisci quanto segue:

  • NODE_POOL_NAME: il nome del nuovo pool di nodi
  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la regione o la zona di Compute Engine del cluster
  • TAG1,TAG2,...:un insieme di coppie chiave-valore separato da virgole da collegare. Ogni coppia chiave-valore deve utilizzare una sintassi supportata, come descritto nella sezione Sintassi dei tag nei comandi. Ad esempio, example-project/env=dev,1234567901/team=sre.

Collega tag a un pool di nodi esistente

Quando aggiorni i tag su un pool di nodi esistente utilizzando il flag --resource-manager-tags, GKE sovrascrive tutti i tag esistenti su quel pool di nodi. Puoi utilizzare questo comando per aggiornare i tag sui pool di nodi di cui è stato eseguito il provisioning automatico.

gcloud beta container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --resource-manager-tags=TAG1,TAG2,...

Sostituisci NODE_POOL_NAME con il nome del pool di nodi da aggiornare.

Attiva/disattiva le impostazioni di provisioning automatico nei cluster e nei pool di nodi esistenti

Quando aggiorni i tag a livello di cluster, GKE applica i nuovi tag a tutti i nuovi pool di nodi nel cluster, conservando i tag associati ai pool di nodi esistenti.

Quando aggiorni i pool di nodi esistenti per abilitare o disabilitare il provisioning automatico dei nodi, considera le seguenti implicazioni per i tag:

  • Quando abiliti o disabiliti il provisioning automatico dei nodi, il pool di nodi conserva tutti i tag esistenti. GKE non sovrascrive questi tag con tag a livello di cluster, anche durante la nuova creazione del nodo.
  • Se aggiorni manualmente i tag su pool di nodi specifici, GKE sovrascrive i tag esistenti con i tag specificati per quel pool di nodi.

Verifica i tag firewall sul cluster

  • Elenca i tag sui cluster Autopilot:

    gcloud beta container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(nodePoolAutoConfig.resourceManagerTags)"
    
  • Elenca i tag su pool di nodi specifici:

    gcloud beta container node-pools describe NODE_POOL_NAME \
      --cluster=CLUSTER_NAME \
      --location=LOCATION \
      --format="value(config.resourceManagerTags)"
    

Scollega i tag firewall da cluster e pool di nodi

Per rimuovere i tag firewall dai cluster e dai pool di nodi, aggiorna la risorsa con un valore vuoto per i tag.

Scollega tag dai cluster Autopilot

Esegui questo comando:

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --autoprovisioning-resource-manager-tags=

Scollega i tag dai pool di nodi

  1. Scollega i tag di provisioning automatico dei nodi a livello di cluster:

    gcloud beta container clusters update CLUSTER_NAME \
        --location=LOCATION \
        --autoprovisioning-resource-manager-tags=
    

    GKE non collegherà tag ai nuovi pool di nodi di cui è stato eseguito il provisioning automatico.

  2. Scollega i tag del pool di nodi:

    gcloud beta container node-pools update NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location=LOCATION \
        --resource-manager-tags=
    

    GKE rimuove i tag esistenti dal pool di nodi.

Elimina chiavi e valori dei tag

Per eliminare una chiave o un valore tag, assicurati che il tag sia scollegato da tutte le risorse. Quindi, consulta la sezione sull'eliminazione dei tag nella documentazione di Resource Manager.

Confrontare i tag di rete con i tag

L'utilizzo dei tag per l'applicazione forzata dei criteri firewall offre vantaggi significativi in termini di sicurezza e usabilità rispetto ai tag di rete. Allo stesso modo, i criteri firewall di rete migliorano le capacità delle regole firewall VPC facilitando l'applicazione delle regole firewall in intere organizzazioni, cartelle, progetti o reti.

L'utilizzo di tag con criteri firewall di rete è un modo più sicuro e scalabile per gestire l'accesso ai tuoi ambienti GKE nella tua organizzazione. Puoi utilizzare i tag di rete nello stesso cluster dei tag, anche se non puoi utilizzare i tag di rete per applicare i criteri firewall di rete.

Per un confronto dettagliato tra tag e tag di rete, consulta il confronto di tag e tag di rete nella documentazione di Cloud NGFW.

Differenze funzionali nei pool di nodi di cui è stato eseguito il provisioning automatico

Nei cluster Autopilot e nei pool di nodi standard che non utilizzano il provisioning automatico dei nodi, i tag di rete e i tag mostrano comportamenti simili. La seguente tabella mostra le differenze funzionali tra i tag di rete e i tag nei pool di nodi con provisioning automatico nei cluster Standard:

Azione Comportamento dei tag di rete Comportamento dei tag
GKE esegue il provisioning automatico di un pool di nodi GKE applica i tag di rete a livello di cluster GKE applica i tag a livello di cluster
Aggiorni i tag o i tag di rete su un pool di nodi di cui è stato eseguito il provisioning automatico
  • Se esistono tag di rete a livello di cluster, l'operazione di aggiornamento non va a buon fine
  • Se non esistono tag di rete a livello di cluster, GKE sovrascrive i tag di rete esistenti per il pool di nodi
GKE sovrascrive i tag esistenti per il pool di nodi, indipendentemente dall'esistenza di tag a livello di cluster
Aggiorna i tag o i tag di rete per l'intero cluster GKE sovrascrive i tag di rete per i pool di nodi di cui è stato eseguito il provisioning automatico nuovi ed esistenti nel cluster. GKE applica i nuovi tag a livello di cluster ai nuovi pool di nodi di cui è stato eseguito il provisioning automatico. I pool di nodi di cui è stato eseguito il provisioning automatico esistenti conservano i tag che avevano prima dell'aggiornamento.

Passaggi successivi