Questa pagina mostra come criptare i dati archiviati nel piano di controllo di Google Kubernetes Engine (GKE) utilizzando le chiavi che gestisci 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 piano di controllo in GKE che ti consente di eseguire attività come verificare la posizione di sicurezza del piano di controllo o configurare la crittografia e la firma delle credenziali nel piano di controllo utilizzando le chiavi che gestisci. Per maggiori dettagli, consulta Informazioni sull'autorità del piano di controllo GKE.
Per impostazione predefinita, Google Cloud applica varie misure di sicurezza al control plane gestito. Questa pagina descrive funzionalità facoltative che ti offrono maggiore visibilità o controllo sul piano di controllo di GKE.
Informazioni sulla crittografia del disco di avvio e di etcd del piano di controllo
Per impostazione predefinita, GKE cripta il disco di avvio di un nodo del piano di controllo, il disco che archivia i dati in etcd e il backup operativo interno di Google Cloud di etcd utilizzando le chiavi di crittografia gestite da Google Cloud. Per informazioni dettagliate su questa crittografia predefinita, consulta Crittografia at-rest predefinita. Facoltativamente, puoi utilizzare le tue chiavi di crittografia gestite con Cloud KMS per criptare queste risorse. Per approfondire, consulta Crittografia del disco di avvio del control plane e di etcd.
In Cloud KMS crei le chiavi utilizzate da GKE per criptare le risorse del piano di controllo. Tieni presente quanto segue quando crei queste risorse:
- Puoi utilizzare un portachiavi per tutte le chiavi di un cluster, indipendentemente dall'uso di ciascuna chiave. Se hai già un mazzo di chiavi che hai utilizzato per scopi diversi, ad esempio per configurare le tue autorità di certificazione, puoi utilizzarlo per questa guida.
- Per una latenza migliore, devi creare le chiavi nella stessa posizione Google Cloud del tuo cluster.
- Per la maggior parte dei casi d'uso, puoi utilizzare il livello di protezione della chiave Cloud KMS software. Puoi anche utilizzare le chiavi hardware con Cloud HSM.
- Devi specificare il flag
--purpose
con il valoreencryption
perché queste chiavi vengono utilizzate per la crittografia simmetrica. - Non devi modificare la durata predefinita per l'eliminazione delle chiavi.
Utilizzo con altre funzionalità dell'autorità del control plane GKE
L'autorità del control plane GKE fornisce le seguenti funzionalità relative alle chiavi gestite autonomamente che devi attivare contemporaneamente quando crei un cluster:
- Crittografa i componenti del piano di controllo (questa pagina)
- Gestisci le tue autorità di certificazione (CA) e le tue 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 queste funzionalità nello stesso cluster, esegui tutte le procedure di configurazione delle chiavi e delle CA descritte in entrambe le guide, quindi esegui il comando di creazione del cluster che attiva entrambi gli insiemi di funzionalità come descritto nella sezione Creare un 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
.
- Assicurati che il progetto chiavi abbia un keyring Cloud KMS per il tuo cluster. Puoi utilizzare qualsiasi portachiavi esistente nella posizione del cluster. Per creare un nuovo keyring, consulta Creare un keyring.
-
Enable the Cloud Key Management Service API.
Identificare i progetti
Ti consigliamo di utilizzare progetti Google Cloud separati come segue:
- Progetto chiave: contiene tutte le chiavi.
- Progetto cluster: contiene i cluster GKE.
Se vuoi, 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 crittografiche 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:
Amministratore Cloud KMS (
roles/cloudkms.admin
) nel progetto principale -
Crea cluster GKE:
Amministratore cluster Kubernetes Engine (
roles/container.clusterAdmin
) nel progetto del cluster
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
Requisiti
Il cluster deve eseguire GKE versione 1.31.1-gke.1846000 o successive.
Limitazioni
- Puoi configurare le chiavi di crittografia del disco di avvio e di etcd solo durante la creazione del cluster.
Per i cluster in modalità standard regionali e per i cluster Autopilot, la regione in cui crei un cluster deve avere la capacità per la modalità riservata per Hyperdisk bilanciata in almeno tre zone della regione.
Per i cluster in modalità standard a livello di zona, la zona del cluster deve avere una capacità Hyperdisk Balanced. Per ricevere assistenza in merito alla capacità, contatta l'assistenza clienti Google Cloud.
La modalità riservata per Hyperdisk Balanced è disponibile solo in regioni specifiche. Per maggiori dettagli, consulta Regioni supportate per i volumi Hyperdisk Balanced in modalità riservata.
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 Cloud External Key Manager (Cloud EKM) non sono supportate.
Non puoi accedere o interagire con i backup operativi interni di Google Cloud di etcd, che sono destinati solo al ripristino di emergenza.
I portachiavi 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 piano di controllo e una chiave di crittografia separata per il backup operativo interno di Google Cloud di etcd. Puoi utilizzare un portachiavi per tenere tutte queste chiavi e qualsiasi altra chiave per il cluster.
Crea la chiave di crittografia per i dischi di avvio e i dischi etcd del control plane:
gcloud kms keys create KCP_DISK_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Sostituisci quanto segue:
KCP_DISK_KEY_NAME
: il nome della chiave di crittografia per i dischi di avvio e i dischi etcd del piano di controllo.KEYRING_NAME
: il nome del mazzo di chiavi che contiene le tue chiavi di crittografia per il cluster.LOCATION
: la posizione Google Cloud per il portachiavi. 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 esempiosoftware
ohsm
.KEY_PROJECT_ID
: l'ID del tuo progetto principale.
Crea la chiave di crittografia del backup interno etcd:
gcloud kms keys create ETCD_BACKUP_KEY_NAME \ --keyring=KEYRING_NAME \ --location=LOCATION \ --purpose="encryption" \ --protection-level=PROTECTION_LEVEL \ --project=KEY_PROJECT_ID
Sostituisci
ETCD_BACKUP_KEY_NAME
con un nome per la chiave di crittografia del backup interno di etcd.
Concedi i ruoli IAM all'agente di servizio GKE
In questa sezione, concedi i ruoli IAM per le chiavi che hai creato all'agente di servizio GKE nel progetto del cluster. L'agente di servizio GKE richiede questi ruoli per utilizzare queste chiavi per criptare le risorse del piano di controllo corrispondenti.
Trova il numero del progetto del cluster:
gcloud projects describe CLUSTER_PROJECT_ID \ --format='value(projectNumber)'
Sostituisci
CLUSTER_PROJECT_ID
con l'ID del progetto del tuo cluster GKE.L'output è simile al seguente:
1234567890
Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter
) alla chiave di crittografia per i dischi di avvio e i dischi etcd all'agente di servizio GKE nel progetto del 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_ID
Sostituisci quanto segue:
KCP_DISK_KEY_NAME
: il nome della chiave di crittografia del disco.LOCATION
: la posizione Google Cloud per la chiave.KEYRING_NAME
: il nome del mazzo di chiavi che contiene la chiave di crittografia.CLUSTER_PROJECT_NUMBER
: il numero numerico del progetto del cluster che hai trovato nel passaggio precedente.KEY_PROJECT_ID
: l'ID del tuo progetto principale.
Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS tramite delega (
roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation
) alla chiave di crittografia per i dischi di avvio e i dischi etcd all'agente di servizio GKE nel progetto del 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_ID
Concedi il ruolo Autore crittografia CryptoKey Cloud KMS (
roles/cloudkms.cryptoKeyEncrypter
) alla chiave di crittografia del backup interno di etcd all'agente di servizio GKE nel progetto del 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_ID
Sostituisci
ETCD_BACKUP_KEY_NAME
con il nome della chiave di crittografia del backup operativo di etcd.La concessione del ruolo
roles/cloudkms.cryptoKeyEncrypter
impedisce a GKE di eseguire ripristini del database per tuo conto e aumenta notevolmente il tempo necessario per ripristinare la funzionalità in caso di un problema del database. Per consentire a GKE di eseguire i ripristini per tuo conto, concedi invece il ruoloroles/cloudkms.cryptoKeyEncrypterDecrypter
.
Utilizzare 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 piano di controllo e i dischi etcd.KEYRING_NAME
: il nome della chiave automatizzata che contiene la chiave.LOCATION
: la posizione Google Cloud della chiave.KEY_PROJECT_ID
: l'ID del tuo progetto principale.
L'output è simile al seguente:
projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
Identifica il percorso della chiave di crittografia del backup interno 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_NAME
con 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à dell'autorità del piano di controllo GKE che vuoi configurare. Puoi configurare queste funzionalità su un cluster solo durante la sua creazione. I seguenti comandi creano cluster in modalità Autopilot. Per creare invece cluster in modalità standard, utilizza gli stessi flag con il comando gcloud container clusters create
.
Per creare un cluster che configuri la crittografia dei dischi ed esegua le tue CA e le chiavi di firma degli account di servizio:
- Esegui tutti i passaggi di configurazione delle chiavi e delle CA in Eseguire le tue chiavi e le tue autorità di certificazione.
- Trova i percorsi di ciascuna delle chiavi e delle CA dell'account di servizio seguendo le istruzioni riportate in Configurare CA e chiavi in un nuovo cluster.
Crea un cluster:
gcloud container clusters create-auto 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_CA
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.LOCATION
: la posizione del nuovo cluster.CLUSTER_PROJECT_ID
: l'ID del tuo progetto cluster.PATH_TO_DISK_KEY
: il percorso della chiave di crittografia del disco dei passaggi precedenti di questa pagina.PATH_TO_ETCD_BACKUP_KEY
: il percorso della chiave di crittografia del backup interno di etcd dei passaggi precedenti di questa pagina.PATH_TO_SIGNING_KEY_VERSION
: il percorso della versione della chiave di firma del servizio account Kubernetes in Cloud KMS.PATH_TO_VERIFICATION_KEY_VERSION
: il percorso della versione della chiave di verifica del servizio account Kubernetes 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 etcd.PATH_TO_ETCD_API_CA
: il percorso del pool di CA dell'API 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 che hai creato in questa guida, esegui il seguente comando:
gcloud container clusters create-auto 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
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.LOCATION
: la posizione del nuovo cluster.CLUSTER_PROJECT_ID
: l'ID del tuo progetto cluster.PATH_TO_DISK_KEY
: il percorso della chiave di crittografia del disco dei passaggi precedenti.PATH_TO_ETCD_BACKUP_KEY
: il percorso della chiave di crittografia del backup interno di etcd dei passaggi precedenti.
Puoi anche specificare tutti questi flag quando crei un nuovo cluster in modalità standard.
Verificare 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.
Utilizzare il logging per verificare le chiavi
Per verificare le chiavi utilizzando Logging:
Nella console Google Cloud, 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 corrispondente alla chiave configurata in Cloud KMS, come nell'esempio seguente:
# 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"
}
Utilizzare gcloud CLI per verificare le chiavi
Per utilizzare gcloud CLI per verificare la chiave di crittografia, segui questi passaggi:
Per la chiave di crittografia del disco, esegui il seguente comando:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
Per la chiave di crittografia del backup interno di etcd, esegui il seguente comando:
gcloud container clusters describe CLUSTER_NAME \ --location=LOCATION \ --format="value(userManagedKeysConfig.gkeopsEtcdBackupEncryptionKey)"
Passaggi successivi
- Scopri che cos'altro puoi visualizzare nel control plane
- Esegui le tue autorità di certificazione e le tue chiavi in GKE
- Verificare l'integrità della VM del piano di controllo