Questa pagina mostra come criptare i dati archiviati nel control plane di Google Kubernetes Engine (GKE) utilizzando le chiavi gestite in Cloud Key Management Service (Cloud KMS). Dovresti già conoscere concetti come etcd, l' architettura del cluster GKE, e Cloud KMS.
Questa pagina descrive una parte di un insieme di funzionalità facoltative del control plane in GKE che ti consentono di eseguire attività come la verifica della security posture del control plane o la configurazione della crittografia e della firma delle credenziali nel control plane utilizzando le chiavi gestite. Per maggiori dettagli, consulta Informazioni su GKE control plane authority.
Per impostazione predefinita, Google Cloud applica varie misure di sicurezza al control plane gestito. Questa pagina descrive le funzionalità facoltative che ti offrono maggiore visibilità o controllo su control plane GKE.
Informazioni sulla crittografia del disco di avvio del control plane e di etcd
Per impostazione predefinita, GKE cripta il disco di avvio di un nodo del control plane, il disco che archivia i dati in etcd e il Google Cloud backup operativo interno di etcd utilizzando le chiavi di crittografia che Google Cloud gestisce. Per maggiori dettagli su questa crittografia predefinita, consulta Crittografia at-rest predefinita. Puoi facoltativamente utilizzare le tue chiavi di crittografia gestite con Cloud KMS per criptare queste risorse. Per saperne di più, consulta Crittografia del disco di avvio del control plane e di etcd.
Crea le chiavi in Cloud KMS che GKE utilizza per criptare le risorse del control plane. Tieni presente quanto segue quando crei queste risorse:
- Puoi utilizzare un keyring per tutte le chiavi di un cluster, indipendentemente dallo scopo di ogni chiave. Se hai un keyring esistente che hai utilizzato per uno scopo diverso, ad esempio per configurare le tue autorità di certificazione, puoi utilizzare questo keyring per questa guida.
- Per una latenza migliore, devi creare le chiavi nella stessa Google Cloud località del tuo cluster.
- Per la maggior parte dei casi d'uso, puoi utilizzare il livello di protezione delle chiavi Cloud KMS software. Puoi anche utilizzare le chiavi hardware con Cloud HSM.
- Devi specificare il flag
--purposecon il valoreencryptionperché queste chiavi vengono utilizzate per la crittografia simmetrica. - Non devi modificare la durata predefinita per l'eliminazione delle chiavi.
Utilizzo con altre funzionalità di GKE control plane authority
GKE control plane authority fornisce le seguenti funzionalità relative alle chiavi autogestite che devi abilitare contemporaneamente quando crei un cluster:
- Cripta i componenti del control plane (questa pagina)
- Esegui le tue autorità di certificazione (CA) e chiavi
Puoi abilitare queste funzionalità solo quando crei un nuovo cluster GKE. Non puoi aggiornare i cluster esistenti per utilizzare queste funzionalità. Per utilizzare entrambe le funzionalità nello stesso cluster, esegui tutte le procedure di configurazione delle chiavi e delle CA in entrambe le guide, quindi esegui il comando di creazione del cluster che abilita entrambi gli insiemi di funzionalità come descritto nella sezione Crea un cluster.
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à,
installala e poi
inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il
gcloud components updatecomando. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati che il progetto chiave abbia un keyring Cloud KMS per il cluster. Puoi utilizzare qualsiasi keyring esistente nella località del cluster. Per creare un nuovo keyring, consulta Crea un keyring.
Abilita l'API Cloud Key Management Service.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore di Service Usage (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.
Identifica i progetti
Ti consigliamo di utilizzare progetti separati Google Cloud come segue:
- Progetto chiave: contiene tutte le chiavi.
- Progetto cluster: contiene i cluster GKE.
Facoltativamente, puoi utilizzare lo stesso progetto per le chiavi e i cluster GKE, ma ti consigliamo di utilizzare progetti separati in modo che i team che gestiscono le chiavi e le operazioni di crittografia siano separati dai team che gestiscono i cluster.
Ruoli e autorizzazioni richiesti
Per ottenere le autorizzazioni necessarie per eseguire le tue chiavi di crittografia, chiedi all'amministratore di concederti i seguenti ruoli IAM:
-
Crea chiavi Cloud KMS:
Cloud KMS Admin (
roles/cloudkms.admin) nel progetto chiave -
Crea cluster GKE:
Amministratore cluster Kubernetes Engine (
roles/container.clusterAdmin) nel progetto cluster
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Requisiti
La crittografia dei dischi del control plane con le tue chiavi presenta i seguenti requisiti:
- Il cluster deve eseguire la versione GKE 1.31.1-gke.1846000 o successive.
Devi creare il cluster in una delle seguenti regioni:
asia-east1asia-northeast1asia-southeast1europe-west1europe-west4us-central1us-central2us-east1us-east4us-east5us-south1us-west1us-west3us-west4
Limitazioni
- Puoi configurare le chiavi di crittografia del disco di avvio e di etcd solo durante la creazione del cluster.
Per i cluster regionali in modalità Standard e per i cluster Autopilot, la regione in cui crei un cluster deve avere capacità per la modalità Confidential per Hyperdisk Balanced in almeno tre zone della regione.
Per i cluster zonali in modalità Standard, la zona del cluster deve avere capacità Hyperdisk Balanced. Per assistenza con la capacità, contatta l'assistenza clienti Google Cloud.
GKE supporta solo le chiavi di Cloud KMS. Non puoi utilizzare un altro provider KMS di Kubernetes o un altro provider di crittografia.
Le chiavi di Cloud External Key Manager (Cloud EKM) non sono supportate.
Non puoi accedere ai backup operativi interni di etcd o interagire con essi, in quanto sono destinati solo al ripristino di emergenza. Google Cloud
I keyring multiregionali non sono supportati. Devi utilizzare un keyring regionale.
Crea chiavi
In questa sezione, crei una chiave di crittografia per i dischi di avvio e i dischi etcd nel control plane e una chiave di crittografia separata per il Google Cloud backup operativo interno di etcd. Puoi utilizzare un keyring per contenere tutte queste chiavi e qualsiasi altra chiave per il cluster.
Crea la chiave di crittografia per i dischi di avvio del control plane e i dischi etcd:
gcloud kms keys create KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_IDSostituisci quanto segue:
KCP_DISK_KEY_NAME: il nome della chiave di crittografia per i dischi di avvio del control plane e i dischi etcd.KEYRING_NAME: il nome del keyring in cui archiviare le chiavi di crittografia per il cluster.LOCATION: la Google Cloud località per il keyring. Deve corrispondere alla località del cluster. Per un elenco delle regioni, filtra per "Regione" nella tabella delle località Cloud KMS.PROTECTION_LEVEL: il livello di protezione della chiave, ad esempiosoftwareohsm.KEY_PROJECT_ID: l'ID progetto del progetto chiave.
Crea la chiave di crittografia del backup interno di etcd:
gcloud kms keys create ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_IDSostituisci
ETCD_BACKUP_KEY_NAMEcon un nome per la chiave di crittografia del backup interno di etcd.
Concedi i ruoli IAM al service agent GKE
In questa sezione, concedi i ruoli IAM sulle chiavi che hai creato al service agent GKE nel progetto cluster. Il service agent GKE richiede questi ruoli per utilizzare queste chiavi per criptare le risorse del control plane corrispondenti.
Trova il numero del progetto cluster:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'Sostituisci
CLUSTER_PROJECT_IDcon l'ID progetto del progetto cluster GKE.L'output è simile al seguente:
1234567890Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter) sulla chiave di crittografia per i dischi di avvio e i dischi etcd al service agent GKE nel progetto cluster:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project=KEY_PROJECT_IDSostituisci quanto segue:
KCP_DISK_KEY_NAME: il nome della chiave di crittografia del disco.LOCATION: la Google Cloud località per la chiave.KEYRING_NAME: il nome del keyring che contiene la chiave di crittografia.CLUSTER_PROJECT_NUMBER: il numero del progetto numerico del progetto cluster, che hai trovato nel passaggio precedente.KEY_PROJECT_ID: l'ID progetto del progetto chiave.
Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS tramite delega (
roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation) sulla chiave di crittografia per i dischi di avvio e i dischi etcd al service agent GKE nel progetto cluster:gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \ --project=KEY_PROJECT_IDConcedi il ruolo Utente chiave Cloud KMS sulle chiavi di crittografia per i dischi di avvio e i dischi etcd al service agent GKE nel progetto cluster per la rotazione della chiave:
gcloud kms keys add-iam-policy-binding KCP_DISK_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/container.cloudKmsKeyUser \ --project=KEY_PROJECT_IDConcedi il ruolo Autore crittografia CryptoKey Cloud KMS (
roles/cloudkms.cryptoKeyEncrypter) sulla chiave di crittografia del backup interno di etcd al service agent GKE nel progetto cluster:gcloud kms keys add-iam-policy-binding ETCD_BACKUP_KEY_NAME \ --location=LOCATION \ --keyring=KEYRING_NAME \ --member="serviceAccount:service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \ --role=roles/cloudkms.cryptoKeyEncrypter \ --project=KEY_PROJECT_IDSostituisci
ETCD_BACKUP_KEY_NAMEcon il nome della chiave di crittografia del backup operativo di etcd.La concessione del ruolo
roles/cloudkms.cryptoKeyEncrypterimpedisce a GKE di eseguire ripristini del database per tuo conto e aumenta notevolmente il tempo necessario per ripristinare la funzionalità in caso di problemi con il database. Per consentire a GKE di eseguire i ripristini per tuo conto, concedi invece il ruoloroles/cloudkms.cryptoKeyEncrypterDecrypter.
Utilizza le chiavi di crittografia in un cluster
Questa sezione mostra come identificare i percorsi delle chiavi di crittografia.
Identifica il percorso della chiave di crittografia del disco:
gcloud kms keys describe KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"Sostituisci quanto segue:
KCP_DISK_KEY_NAME: il nome della chiave di crittografia per i dischi di avvio del control plane e i dischi etcd.KEYRING_NAME: il nome del keyring che contiene la chiave.LOCATION: la Google Cloud località della chiave.KEY_PROJECT_ID: l'ID progetto del progetto chiave.
L'output è simile al seguente:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-keyIdentifica il percorso della chiave di crittografia del backup interno di etcd:
gcloud kms keys describe ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --project=KEY_PROJECT_ID \ --format="value(name)"Sostituisci
ETCD_BACKUP_KEY_NAMEcon il nome della chiave di crittografia del backup operativo di etcd.L'output è simile al seguente:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/etcd-backup-encryption-key
Crea un cluster
In questa sezione, crei un cluster con opzioni diverse specificate a seconda delle funzionalità di GKE control plane authority che vuoi configurare. Puoi configurare queste funzionalità su un cluster solo durante la creazione del cluster. I seguenti comandi creano cluster in modalità Standard. Per
creare invece cluster in modalità Autopilot, utilizza gli stessi flag con il
gcloud container clusters create-auto comando.
Per creare un cluster che configuri la crittografia dei dischi ed esegua le tue CA e chiavi di firma dell'account di servizio, procedi nel seguente modo:
- Esegui tutti i passaggi di configurazione delle chiavi e delle CA in Esegui le tue autorità di certificazione e chiavi.
- Trova i percorsi di ogni chiave dell'account di servizio e CA utilizzando le istruzioni riportate in Configura CA e chiavi su un nuovo cluster.
Crea un cluster:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEY \ --service-account-signing-keys=PATH_TO_SIGNING_KEY_VERSION \ --service-account-verification-keys=PATH_TO_VERIFICATION_KEY_VERSION \ --cluster-ca=PATH_TO_CLUSTER_CA \ --etcd-peer-ca=PATH_TO_ETCD_PEER_CA \ --etcd-api-ca=PATH_TO_ETCD_API_CA \ --aggregation-ca=PATH_TO_AGGREGATION_CASostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.LOCATION: la località del nuovo cluster.CLUSTER_PROJECT_ID: l'ID progetto del progetto cluster.PATH_TO_DISK_KEY: il percorso della chiave di crittografia del disco dai passaggi precedenti di questa pagina.PATH_TO_ETCD_BACKUP_KEY: il percorso della chiave di crittografia del backup interno di etcd dai passaggi precedenti di questa pagina.PATH_TO_SIGNING_KEY_VERSION: il percorso della versione della chiave di firma di Kubernetes ServiceAccount in Cloud KMS.PATH_TO_VERIFICATION_KEY_VERSION: il percorso della versione della chiave di verifica di Kubernetes ServiceAccount in Cloud KMS.PATH_TO_CLUSTER_CA: il percorso del pool di CA del cluster.PATH_TO_ETCD_PEER_CA: il percorso del pool di CA peer di etcd.PATH_TO_ETCD_API_CA: il percorso del pool di CA API di etcd.PATH_TO_AGGREGATION_CA: il percorso del pool di CA di aggregazione.
Per creare un cluster che configuri solo la crittografia dei dischi utilizzando le chiavi create in questa guida, esegui il comando seguente:
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=CLUSTER_PROJECT_ID \ --control-plane-disk-encryption-key=PATH_TO_DISK_KEY \ --gkeops-etcd-backup-encryption-key=PATH_TO_ETCD_BACKUP_KEYSostituisci quanto segue:
CLUSTER_NAME: il nome del nuovo cluster.LOCATION: la località del nuovo cluster.CLUSTER_PROJECT_ID: l'ID progetto del progetto cluster.PATH_TO_DISK_KEY: il percorso della chiave di crittografia del disco dai passaggi precedenti.PATH_TO_ETCD_BACKUP_KEY: il percorso della chiave di crittografia del backup interno di etcd dai passaggi precedenti.
Puoi anche specificare tutti questi flag quando crei un nuovo cluster in modalità Standard.
Verifica lo stato della chiave di crittografia
Questa sezione mostra come verificare la chiave di crittografia utilizzata durante la creazione del cluster. Puoi eseguire questa verifica utilizzando Cloud Logging o Google Cloud CLI.
Utilizza Logging per verificare le chiavi
Per verificare le chiavi utilizzando Logging:
Nella Google Cloud console, vai alla pagina Esplora log:
Recupera il log di creazione del cluster specificando la seguente query:
resource.type="gke_cluster" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.location="CLUSTER_LOCATION" protoPayload.serviceName="container.googleapis.com" protoPayload.methodName=~"google.container.v(1|1alpha1|1beta1).ClusterManager.CreateCluster" protoPayload.request.cluster.userManagedKeysConfig:*Fai clic su Esegui query.
Nell'output, verifica che i parametri di creazione del cluster includano un percorso della chiave che corrisponda alla chiave configurata in Cloud KMS, come nel seguente esempio:
# lines omitted for clarity
userManagedKeysConfig: {
controlPlaneDiskEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/KCP_DISK_KEY_NAME"
gkeopsEtcdBackupEncryptionKey: "projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING_NAME/cryptoKeys/ETCD_BACKUP_KEY_NAME"
}
Utilizza gcloud CLI per verificare le chiavi
Per utilizzare gcloud CLI per verificare la chiave di crittografia:
Per la chiave di crittografia del disco, esegui il comando seguente:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"Per la chiave di crittografia del backup interno di etcd, esegui il comando seguente:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
Ruota le chiavi di crittografia del disco di etcd e del control plane
Le chiavi di crittografia che crei non scadono. Per migliorare la security posture, ruota regolarmente queste chiavi e ricripta le risorse con le nuove versioni delle chiavi. Per saperne di più, consulta Ruota le chiavi di crittografia del disco di avvio di etcd e del control plane.
Passaggi successivi
- Scopri cos'altro puoi visualizzare nel control plane
- Esegui le tue autorità di certificazione e chiavi in GKE
- Verifica l'integrità delle VM del control plane