Protezione dei metadati del cluster


Google Kubernetes Engine (GKE) utilizza metadati delle istanze per configurare le macchine virtuali (VM) dei nodi, ma alcuni di questi metadati sono potenzialmente sensibili e devono essere protetti dai carichi di lavoro in esecuzione nel cluster.

Prima di iniziare

Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:

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

Configura l'account di servizio del nodo

Le credenziali dell'account di servizio di ogni nodo continuano a essere esposte ai carichi di lavoro. Per impostazione predefinita, i nodi utilizzano l'account di servizio predefinito di Compute Engine. Devi configurare un account di servizio con privilegi minimi per i nodi da utilizzare al posto dell'account di servizio predefinito di Compute Engine. Quindi, collega questo account di servizio ai tuoi nodi in modo che un malintenzionato non possa aggirare le protezioni dei metadati di GKE utilizzando l'API Compute Engine per accedere direttamente alle istanze VM sottostanti.

Per ulteriori informazioni, consulta Utilizzare gli account di servizio dei nodi con privilegio minimo minimi.

Per creare un account di servizio del nodo con privilegi minimi, svolgi i seguenti passaggi:

  1. Crea un nuovo account di servizio Identity and Access Management (IAM) e salva l'indirizzo email in una variabile di ambiente:

    gcloud iam service-accounts create NODE_SA_NAME \
        --display-name="DISPLAY_NAME"
    export NODE_SA_EMAIL=$(gcloud iam service-accounts list --format='value(email)' \
        --filter='displayName:DISPLAY_NAME')
    

    Sostituisci quanto segue:

    • NODE_SA_NAME: il nome del nuovo account servizio node.
    • DISPLAY_NAME: il nome visualizzato del nuovo account servizio.

    L'indirizzo email dell'account di servizio del nodo ha il formato NODE_SA_NAME@PROJECT_ID.iam.gserviceaccount.com.

  2. Configura il tuo account di servizio con i ruoli e le autorizzazioni minimi per eseguire i tuoi nodi GKE:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.metricWriter
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/monitoring.viewer
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/logging.logWriter
    

    Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud.

    Inoltre, se il cluster estrae immagini private da Artifact Registry, aggiungi il ruolo roles/artifactregistry.reader:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:$NODE_SA_EMAIL \
        --role=roles/artifactregistry.reader
    

Occultamento dei metadati

Il nascondimento dei metadati di GKE impedisce ai pod utente di accedere akube-env, che contiene le credenziali del kubelet, e al token di identità dell'istanza della VM.

La funzionalità di occultamento dei metadati blocca il traffico dai pod utente (non in esecuzione su HostNetwork) al server dei metadati del cluster, consentendo solo query sicure. Il firewall impedisce ai pod utente di utilizzare le credenziali di kubelet per attacchi di escalation dei privilegi o di utilizzare l'identità VM per attacchi di escalation delle istanze.

La federazione delle identità per i carichi di lavoro per GKE elimina la necessità di utilizzare l'occultamento dei metadati e amplia le protezioni offerte da questa funzionalità. In tutte le situazioni, devi utilizzare la federazione Workload Identity per GKE anziché il mascheramento dei metadati. Per approfondire, consulta Informazioni su Workload Identity Federation per GKE.

Per attivare l'occultamento dei metadati, utilizza l'opzione --workload-metadata=SECURE in disuso nel comando gcloud beta container clusters create o nel comando gcloud beta container node-pools create.

Limitazioni

La dissimulazione dei metadati presenta limitazioni, ad esempio:

  • L'oscuramento dei metadati protegge solo l'accesso a kube-env e al token di identità dell'istanza del nodo.
  • L'occultamento dei metadati non limita l'accesso all'account di servizio del nodo.
  • L'oscuramento dei metadati non limita l'accesso ad altri metadati dell'istanza correlati.
  • L'oscuramento dei metadati non limita l'accesso ad altre API legacy dei metadati.
  • L'occultamento dei metadati non limita il traffico dai pod in esecuzione sulla rete dell'host (hostNetwork: true nella specifica del pod).

Disattivazione e transizione dalle API dei metadati legacy

Gli endpoint del server di metadati di Compute Engine v0.1 e v1beta1 sono stati ritirati e disattivati il 30 settembre 2020.

Per la pianificazione dell'interruzione, consulta la sezione Deprecation degli endpoint del server di metadati v0.1 e v1beta1.

Passaggi successivi