Crittografia dei dati in uso del carico di lavoro con i nodi Confidential Google Kubernetes Engine


Questa pagina mostra come applicare la crittografia dei dati in uso nei nodi e nei carichi di lavoro utilizzando i nodi Confidential Google Kubernetes Engine.

Panoramica

Puoi criptare i tuoi carichi di lavoro con i nodi GKE riservati o con la modalità riservata per Hyperdisk Balanced.

Confidential GKE Node

Confidential GKE Node è basato su Confidential VM di Compute Engine e utilizza la tecnologia Secure Encrypted Virtualization (SEV) di AMD, che cripta i contenuti della memoria delle VM in uso. La crittografia in uso è uno dei tre stati della crittografia end-to-end.

Quando attivi i Confidential GKE Node su un cluster o su un pool di nodi, i dati nei carichi di lavoro in esecuzione sui nodi riservati vengono criptati in uso. Per la visibilità del tuo control plane, utilizza Access Transparency.

Puoi abilitare i nodi riservati di GKE quando esegui una delle seguenti operazioni:

  • Crea un nuovo cluster
  • Crea un nuovo node pool
  • Aggiornare un pool di nodi esistente

Non puoi aggiornare un cluster esistente per modificare l'impostazione Nuclei GKE riservati a livello di cluster.

La tabella seguente mostra il comportamento di GKE che si applica quando attivi i nodi GKE riservati a livello di cluster o di node pool:

Impostazione di Confidential GKE Node Modalità di configurazione Comportamento
A livello di cluster Crea un nuovo cluster Tutti i nodi del cluster in qualsiasi pool di nodi utilizzano Confidential GKE Node. Non puoi svolgere le seguenti operazioni:
  • Disattiva i nodi Confidential GKE per un node pool nuovo o esistente nel cluster
  • Disabilita i nodi Confidential GKE Node nel cluster
  • Abilita i nodi Confidential GKE sui cluster esistenti
A livello di node pool
  • Crea un nuovo node pool
  • Aggiornare un pool di nodi esistente
Puoi configurare i Confidential GKE Node per i node pool solo se questa funzionalità è disattivata a livello di cluster.

Modalità riservata per Hyperdisk bilanciato

Puoi anche attivare la modalità riservata per Hyperdisk Balanced sullo spazio di archiviazione del disco di avvio, che cripta i dati in ulteriori enclave basati su hardware.

Puoi attivare la modalità riservata per Hyperdisk bilanciato quando esegui una delle seguenti operazioni:

  • Crea un nuovo cluster
  • Crea un nuovo node pool

Non puoi aggiornare un cluster o un pool di nodi esistente per modificare l'impostazione Modalità riservata per Hyperdisk bilanciato.

La tabella seguente mostra il comportamento di GKE che si applica quando attivi l'impostazione Modalità riservata per le IOPS bilanciate di Hyperdisk a livello di cluster o di pool di nodi:

Impostazione della modalità riservata per Hyperdisk bilanciato Modalità di configurazione Comportamento
A livello di cluster Crea un nuovo cluster Solo il pool di nodi predefinito del cluster utilizzerà l'impostazione della modalità riservata per Hyperdisk Balanced. Non puoi svolgere le seguenti operazioni:
  • Disattiva l'impostazione della modalità riservata per Hyperdisk Balanced per un pool di nodi esistente nel cluster
  • Attivare la modalità riservata per l'impostazione Hyperdisk bilanciato sui cluster esistenti
A livello di node pool Crea un nuovo node pool Puoi configurare l'impostazione della modalità riservata per Hyperdisk bilanciato per tutti i nuovi pool di nodi al momento della creazione. Non puoi aggiornare i pool di nodi esistenti per utilizzare l'impostazione della modalità riservata per Hyperdisk bilanciato.

Prezzi

Non sono previsti costi aggiuntivi per il deployment di Confidential GKE Node, oltre al costo della VM Confidential di Compute Engine. Tuttavia, i Confidential GKE Node potrebbero generare leggermente più dati dei log all'avvio rispetto ai nodi standard. Per informazioni sui prezzi dei log, consulta Prezzi di Google Cloud Observability.

Disponibilità

Confidential GKE Node è disponibile nelle seguenti situazioni:

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.

Abilita i nodi Confidential GKE sui cluster

Puoi creare un nuovo cluster con i nodi GKE riservati abilitati utilizzando la gcloud CLI o la console Google Cloud. Se attivi Confidential GKE Node a livello di cluster, tutti i nodi del cluster sono VM riservate.

gcloud

Quando crei un nuovo cluster, specifica l'opzione --enable-confidential-nodes nella gcloud CLI:

gcloud container clusters create CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --enable-confidential-nodes

Sostituisci quanto segue:

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic su Crea.

  3. Nella sezione Standard, fai clic su Configura.

  4. Nel riquadro di navigazione, in Cluster, fai clic su Sicurezza.

  5. Seleziona la casella di controllo Abilita i nodi Confidential GKE.

  6. Configura il cluster in base alle tue esigenze.

  7. Fai clic su Crea.

Per ulteriori dettagli sulla creazione di cluster, consulta Creare un cluster a livello di area geografica.

Dopo aver creato un cluster con Confidential GKE Node, tutti i node pool creati in questo cluster possono utilizzare solo nodi riservati. Non puoi creare node pool regolari nei cluster con i Confidential GKE Node abilitati. Inoltre, non puoi disabilitare i nodi Confidential GKE Node su singoli pool di nodi quando li abiliti a livello di cluster.

Per qualsiasi pool di nodi creato con l'impostazione Modalità riservata per il throughput bilanciato di Hyperdisk, solo i nodi del pool di nodi sono limitati alla configurazione di configurazione. Per tutti i nuovi node pool creati nel cluster, devi configurare la modalità riservata al momento della creazione.

Abilita i nodi Confidential GKE nei node pool

Puoi abilitare i nodi Confidential GKE Node in pool di nodi specifici se i nodi Confidential GKE Node sono disattivati a livello di cluster.

L'impostazione della modalità riservata per Hyperdisk Balanced deve essere specificata durante la richiesta di creazione del pool di nodi.

Crea un nuovo node pool

Per creare un nuovo pool di nodi con i nodi GKE riservati abilitati, esegui il seguente comando:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --machine-type=MACHINE_TYPE \
    --enable-confidential-nodes

Sostituisci quanto segue:

  • NODE_POOL_NAME: il nome del nuovo pool di nodi.
  • CLUSTER_NAME: il nome del tuo cluster.
  • MACHINE_TYPE: il tipo di macchina per il tuo pool di nodi, che deve essere un tipo di macchina N2D o il tipo di macchina C2D.

Aggiornare un pool di nodi esistente

Puoi abilitare i nodi riservati di GKE nei pool di nodi esistenti che utilizzano il tipo di macchina N2D o il tipo di macchina C2D. Esegui questo comando:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --enable-confidential-nodes

Sostituisci quanto segue:

  • NODE_POOL_NAME: il nome del pool di nodi.
  • CLUSTER_NAME: il nome del tuo cluster.

Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare i criteri di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.

Verifica che i nodi Confidential GKE Node siano abilitati

Nei cluster

Puoi verificare che il tuo cluster utilizzi i nodi GKE riservati con la gcloud CLI o la console Google Cloud.

gcloud

Descrivi il cluster:

gcloud container clusters describe CLUSTER_NAME

Se Confidential GKE Node è abilitato, l'output del comando include le seguenti righe:

confidentialNodes:
  enabled: true

Console

  1. Vai alla pagina Google Kubernetes Engine nella console Google Cloud.

    Vai a Google Kubernetes Engine

  2. Fai clic sul nome del cluster da esaminare.

  3. In Sicurezza, nel campo Nodi GKE riservati, verifica che i nodi GKE riservati siano abilitati.

Nei pool di nodi

Per verificare che il tuo pool di nodi utilizzi i nodi GKE riservati, esegui il seguente comando:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME

Se Confidential GKE Node è abilitato, l'output è simile al seguente:

confidentialNodes:
  enabled: true

Se l'impostazione Modalità riservata per Hyperdisk Balanced è abilitata, l'output è simile al seguente:

enableConfidentialStorage: true

Sui nodi

Per convalidare la riservatezza di nodi specifici, puoi:

  1. Verifica che AMD SEV sia abilitato oppure
  2. Convalida la VM con accesso riservato utilizzando Cloud Monitoring.

Esegui applicazioni su Confidential GKE Node

L'approccio di Google a Confidential Computing è quello di abilitare un'elevazione e un trasferimento senza problemi per le applicazioni esistenti. I carichi di lavoro GKE che esegui oggi possono essere eseguiti su nodi GKE riservati senza modifiche al codice.

Se vuoi dichiarare che i tuoi carichi di lavoro devono essere eseguiti solo su cluster con Confidential GKE Node, puoi utilizzare il selettore di nodi cloud.google.com/gke-confidential-nodes. Ecco un esempio di specifica del pod che utilizza questo selettore:

apiVersion: v1
kind: Pod
spec:
  containers:
  - name: my-confidential-app
    image: us-docker.pkg.dev/myproject/myrepo/my-confidential-app
  nodeSelector:
    cloud.google.com/gke-confidential-nodes: "true"

Impostare vincoli dei criteri dell'organizzazione

Puoi definire un vincolo dei criteri dell'organizzazione per assicurarti che tutte le risorse VM create nella tua organizzazione siano istanze VM riservate. Per GKE, puoi personalizzare il vincolo Limita il calcolo non riservato in modo che tutti i nuovi cluster vengano creati con i Confidential GKE Node abilitati. Aggiungi il container.googleapis.com nome del servizio API all'elenco di quelli non consentiti quando applicchi le limitazioni dei criteri dell'organizzazione, ad esempio:

gcloud resource-manager org-policies deny \
    constraints/compute.restrictNonConfidentialComputing compute.googleapis.com container.googleapis.com \
    --project=PROJECT_ID

Sostituisci PROJECT_ID con l'ID progetto.

Crea un PersistentVolume per la modalità riservata per Hyperdisk bilanciato

Per indicazioni sui valori consentiti per il throughput o le IOPS, consulta Pianificare il livello di prestazioni per il volume HyperDisk.

Gli esempi riportati di seguito mostrano come creare una modalità riservata per lo spazio di archiviazione bilanciato Hyperdisk per ogni tipo di Hyperdisk:

Hyperdisk bilanciato

  1. Salva il seguente manifest in un file denominato confidential-hdb-example-class.yaml:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
      enable-confidential-storage: true
      disk-encryption-kms-key: "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/HSM_KEY_NAME"
    

    Sostituisci quanto segue:

    • KMS_PROJECT_ID: il progetto proprietario della chiave Cloud KMS
    • REGION: la regione in cui si trova il disco
    • KEY_RING: il nome del keyring che include la chiave
    • HSM_KEY_NAME: il nome della chiave HSM utilizzata per criptare il disco
  2. Crea la classe di archiviazione:

    kubectl create -f hdb-example-class.yaml
    
  3. Crea una richiesta di volume permanente Hyperdisk per GKE che utilizzi la modalità riservata per il volume bilanciato Hyperdisk.

Per trovare il nome delle classi di archiviazione disponibili nel cluster, esegui il seguente comando:

kubectl get sc

Limitazioni

Confidential GKE Node presenta le seguenti limitazioni:

Limitazioni della migrazione live

Alcuni tipi di macchine Confidential VM di Compute Engine supportano la migrazione live, che riduce al minimo la potenziale interruzione del carico di lavoro a causa di un evento di manutenzione dell'host. La migrazione in tempo reale avviene nelle seguenti versioni di GKE:

  • 1.27.10-gke.1218000 e versioni successive
  • 1.28.6-gke.1393000 e versioni successive
  • 1.29.1-gke.1621000 e versioni successive

Se i tuoi node pool eseguivano già una versione supportata quando è stata aggiunta migrazione live, esegui l'upgrade manuale dei node pool alla stessa versione supportata o a una diversa. L'upgrade dei nodi attiva la loro recreazione e nei nuovi nodi è attivata migrazione live.

Per informazioni dettagliate sui tipi di macchine Compute Engine che supportano la migrazione in tempo reale, consulta Configurazioni supportate.

Se si verifica un evento di manutenzione dell'host su un nodo che non supporta migrazione live, il nodo entra in stato NotReady. I pod in esecuzione subiranno interruzioni finché il nodo non sarà nuovamente pronto. Se la manutenzione richiede più di cinque minuti, GKE potrebbe provare a ricreare i pod su altri nodi.

Disabilita i nodi Confidential GKE Node

La disattivazione di Confidential GKE Node funziona solo per i node pool che hanno attivato Confidential GKE Node. Se il cluster è creato con nodi riservati di GKE, non puoi disattivare la funzionalità. Esegui il seguente comando per disattivare i Confidential GKE Node in un pool di nodi:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --no-enable-confidential-nodes

Questa modifica richiede la ricreazione dei nodi, il che può causare interruzioni dei carichi di lavoro in esecuzione. Per informazioni dettagliate su questa modifica specifica, individua la riga corrispondente nella tabella Modifiche manuali che ricreano i nodi utilizzando una strategia di upgrade dei nodi senza rispettare i criteri di manutenzione. Per scoprire di più sugli aggiornamenti dei nodi, consulta Pianificare le interruzioni per gli aggiornamenti dei nodi.

Passaggi successivi