Questa pagina descrive come utilizzare le chiavi di crittografia gestite dal cliente (CMEK) su Google Kubernetes Engine (GKE). Per controllare delle tue chiavi, puoi utilizzare Cloud Key Management Service e per proteggere i dischi permanenti collegati e i dischi di avvio personalizzati nel tuo cluster GKE.
Panoramica
Per impostazione predefinita, Google Cloud cripta i contenuti at-rest dei clienti, e GKE gestisce la crittografia per te senza che sia necessaria alcuna azione .
Se vuoi controllare e gestire personalmente rotazione della chiave di crittografia, puoi utilizzare tramite CMEK. Queste chiavi criptano le chiavi di crittografia dei dati che criptano i tuoi dati. Per ulteriori informazioni, vedi Gestione delle chiavi.
Puoi anche criptare i secret nel cluster utilizzando le chiavi che gestisci. Per maggiori dettagli, vedi Crittografia dei secret a livello di applicazione.
In GKE, CMEK può proteggere i dati di due tipi di dischi di archiviazione: i dischi di avvio e i dischi collegati.
- Dischi di avvio del nodo
- I dischi di avvio dei nodi fanno parte dei pool di nodi del tuo cluster. Puoi creare un Disco di avvio del nodo criptato con CMEK durante la creazione di cluster e pool di nodi.
- Dischi collegati
- I dischi collegati sono oggetti PersistentVolume utilizzati dai pod per durare a lungo archiviazione. I dischi permanenti criptati con CMEK sono disponibili in GKE come oggetto PersistentVolume con provisioning dinamico.
Per scoprire di più sui dischi di archiviazione, vedi Opzioni di archiviazione. I dischi del piano di controllo, utilizzati per i piani di controllo GKE, non possono essere protetti con CMEK.
Prima di iniziare
Per eseguire gli esercizi di questo argomento, sono necessari due progetti Google Cloud:
Progetto chiave: è qui che crei una chiave di crittografia.
Progetto cluster: è dove crei un cluster che abilita tramite CMEK.
Nel progetto chiave, assicurati di aver abilitato l'API Cloud KMS.
Nel progetto chiave, l'utente che crea il keyring e la chiave deve avere autorizzazioni IAM seguenti:
cloudkms.keyRings.getIamPolicy
cloudkms.keyRings.setIamPolicy
Queste autorizzazioni vengono concesse all'entità predefinita
roles/cloudkms.admin
Ruolo Identity and Access Management. Puoi apprendere Scopri di più su come concedere autorizzazioni per gestire le chiavi nella documentazione di Cloud KMS.Nel progetto cluster, assicurati di aver abilitato l'API Cloud KMS.
Assicurati di aver installato gcloud CLI.
Aggiorna
gcloud
all'ultima versione:gcloud components update
Crea una chiave Cloud KMS
Prima di poter proteggere il disco di avvio del nodo o il disco collegato con una CMEK, sono necessari un keyring e una chiave di Cloud KMS.
Il keyring e la chiave hanno i seguenti requisiti:
La chiave deve utilizzare la crittografia simmetrica.
Devi concedere le autorizzazioni dell'account di servizio GKE a la chiave.
La posizione del keyring deve corrispondere a quella del Cluster GKE:
Un cluster di zona deve utilizzare un keyring da una posizione sovrapposta. Ad esempio, un cluster in La zona
us-central1-a
può usare una chiave solo nella regioneus-central1
.Un cluster a livello di regione deve utilizzare un keyring della stessa posizione. Ad esempio, un cluster La regione
asia-northeast1
deve essere protetta con un keyring della regioneasia-northeast1
.La regione Cloud KMS
global
non è supportata per l'uso con con GKE.
Per istruzioni su come creare un keyring e una chiave, consulta Creazione di chiavi simmetriche.
Concedi l'autorizzazione a utilizzare la chiave
Devi assegnare l'account di servizio Compute Engine utilizzato dai nodi nel cluster il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS. Questa operazione è necessaria per consentire ai dischi permanenti di GKE di accedere alla tua chiave di crittografia e utilizzarla.
Il nome dell'account di servizio Compute Engine ha il seguente formato:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
Sostituisci PROJECT_NUMBER
con il token del tuo cluster
numero di progetto.
Per concedere l'accesso all'account di servizio, puoi utilizzare il comando gcloud
o la console Google Cloud.
gcloud
Concedi al tuo account di servizio Compute Engine Ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS:
gcloud kms keys add-iam-policy-binding KEY_NAME \
--location LOCATION \
--keyring RING_NAME \
--member serviceAccount:SERVICE_ACCOUNT \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KEY_PROJECT_ID
Sostituisci quanto segue:
KEY_NAME
: il nome della chiave.LOCATION
: la regione in cui hai creato il keyring.RING_NAME
: il nome del tuo keyring.SERVICE_ACCOUNT
: il nome del tuo Compute Engine l'account di servizio.KEY_PROJECT_ID
: l'ID progetto chiave.
Console
Concedi al tuo account di servizio Compute Engine Ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS:
- Apri il browser Cloud Key Management Service Key nella console Google Cloud.
Apri il browser delle chiavi Cloud KMS Fai clic sul nome del keyring contenente la chiave desiderata.
Seleziona la casella di controllo della chiave desiderata.
La scheda Autorizzazioni nel riquadro a destra della finestra diventa disponibile.
Nella finestra di dialogo Aggiungi membri, specifica l'indirizzo email Account di servizio Compute Engine a cui stai concedendo l'accesso.
Nel menu a discesa Seleziona un ruolo, seleziona CryptoKey Cloud KMS strumento di crittografia/decrittografia.
Fai clic su Salva.
Usa dischi di avvio dei nodi protetti da CMEK
In questa sezione creerai un nuovo cluster o pool di nodi con una protezione CMEK disco di avvio.
Non puoi abilitare la crittografia gestita dal cliente per i dischi di avvio dei nodi su un perché non puoi modificare il tipo di disco di avvio di un cluster o di un nodo esistente. piscina. Tuttavia, puoi creare un nuovo pool di nodi per il tuo cluster con sia abilitata la crittografia gestita; elimina il pool di nodi precedente.
Inoltre, non puoi disabilitare la crittografia gestita dal cliente per i dischi di avvio dei nodi in una un cluster esistente o un pool di nodi esistente. Tuttavia, puoi creare un nuovo nodo per il tuo cluster con la crittografia gestita dal cliente disabilitata ed elimina pool di nodi precedente.
Crea un cluster con un disco di avvio del nodo protetto da CMEK
Puoi creare un cluster con un disco di avvio del nodo protetto da CMEK utilizzando il metodo con gcloud CLI o la console Google Cloud.
Per i cluster standard, solo un disco permanente standard (pd-standard
)
o un disco permanente SSD (pd-ssd
) può essere criptato con una chiave CMEK.
gcloud
Per creare un cluster il cui disco di avvio è criptato con una chiave CMEK, specifica un'istanza
per il parametro --boot-disk-kms-key
nel comando di creazione del cluster.
Crea un cluster Standard
Per creare un cluster Standard il cui disco di avvio è criptato con un chiave CMEK, utilizza il seguente comando:
gcloud container clusters create CLUSTER_NAME \
--cluster-version=latest \
--region COMPUTE_REGION \
--boot-disk-kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME \
--project CLUSTER_PROJECT_ID \
--disk-type DISK_TYPE
Creare un cluster Autopilot
Per creare un cluster Autopilot il cui disco di avvio è criptato con un chiave CMEK, utilizza il seguente comando:
gcloud container clusters create-auto CLUSTER_NAME \
--cluster-version=latest \
--region COMPUTE_REGION \
--boot-disk-kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME \
--project CLUSTER_PROJECT_ID
Sostituisci quanto segue:
CLUSTER_NAME
: il nome del nuovo cluster.COMPUTE_REGION
: la regione di computing per il piano di controllo del cluster.KEY_PROJECT_ID
: l'ID progetto chiave.LOCATION
: la posizione del keyring.RING_NAME
: il nome del tuo keyring.KEY_NAME
: il nome della chiave.CLUSTER_PROJECT_ID
è l'ID progetto del cluster.DISK_TYPE
:pd-standard
(valore predefinito) opd-ssd
.
Console
Crea un cluster Standard
Per creare un cluster Standard il cui disco di avvio è criptato con un chiave CMEK, esegui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_box Crea.
Nella sezione Standard, fai clic su Configura.
Configura il cluster come preferisci.
Nel riquadro di navigazione, in Pool di nodi, fai clic su Nodi.
Nell'elenco a discesa Tipo di disco di avvio, seleziona Standard permanente disco o Disco permanente SSD.
Seleziona la casella di controllo Abilita la crittografia gestita dal cliente per il disco di avvio e scegli la chiave di crittografia di Cloud KMS che hai creato in precedenza.
Fai clic su Crea.
Creare un cluster Autopilot
Per creare un cluster Autopilot il cui disco di avvio è criptato con un chiave CMEK, esegui questi passaggi:
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Fai clic su add_box Crea.
Nella sezione Autopilot, fai clic su Configura.
Configura il cluster come preferisci.
Espandi la sezione Opzioni avanzate e individua le opzioni Sicurezza.
Seleziona la casella di controllo Abilita la crittografia gestita dal cliente per il disco di avvio e scegli la chiave di crittografia di Cloud KMS che hai creato in precedenza.
Fai clic su Crea.
Crea un nuovo pool di nodi con dischi di avvio dei nodi protetti da CMEK
Per creare un nuovo pool di nodi con CMEK abilitata su un cluster standard esistente, puoi utilizzare gcloud CLI o la console Google Cloud.
gcloud
Per creare un pool di nodi con crittografia gestita dal cliente per i dischi di avvio dei nodi,
specifica un valore per il parametro --boot-disk-kms-key
nella tua creazione
.
gcloud container node-pools create NODE_POOL_NAME \
--region COMPUTE_REGION \
--disk-type DISK_TYPE \
--boot-disk-kms-key projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME \
--project CLUSTER_PROJECT_ID \
--cluster CLUSTER_NAME
Sostituisci quanto segue:
NODE_POOL_NAME
: il nome che scegli per il pool di nodi.COMPUTE_REGION
: la regione di computing per il piano di controllo del cluster.DISK_TYPE
:pd-standard
(valore predefinito) opd-ssd
.KEY_PROJECT_ID
:l'ID progetto chiave.LOCATION
: la posizione del keyring.RING_NAME
: il nome del tuo keyring.KEY_NAME
: il nome della chiave.CLUSTER_PROJECT_ID
: ID progetto del cluster.CLUSTER_NAME
: il nome dello standard che hai creato nel passaggio precedente.
Console
Vai alla pagina Google Kubernetes Engine nella console Google Cloud.
Nell'elenco dei cluster, fai clic sul nome del cluster da modificare.
Fai clic su add_box Aggiungi pool di nodi.
Nel riquadro di navigazione, fai clic su Nodi.
Nella sezione Configurazione macchina, assicurati che Tipo di disco di avvio sia Disco permanente standard o Disco permanente SSD.
Seleziona la casella di controllo Abilita la crittografia gestita dal cliente per il disco di avvio e seleziona la chiave di crittografia di Cloud KMS che hai creato.
Fai clic su Crea.
Usa istanze o dischi permanenti protetti da CMEK
Le seguenti informazioni spiegano come criptare i file Filestore appena creati di Compute Engine o dischi permanenti. Puoi abilitare CMEK su un cluster nuovo o esistente, utilizzando una chiave Cloud KMS nuova o esistente.
Queste istruzioni devono essere completate una volta per ogni cluster GKE:
- Crea un cluster GKE, se non ne hai già uno disponibile.
- Esegui il deployment del driver CSI Filestore oppure Driver CSI per il disco permanente di Compute Engine nel cluster.
- Crea una versione del keyring e della chiave di Cloud KMS, se non ne hai già uno disponibile.
- Concedi le autorizzazioni di accesso alla chiave all'account di servizio Filestore.
- Crea un oggetto StorageClass che consente la crittografia automatica dei dischi di cui Kubernetes con la chiave Cloud KMS. Per i dettagli su come eseguire questa operazione, consulta la sezione successiva.
Crea un oggetto StorageClass che fa riferimento alla chiave Cloud KMS
Copia il contenuto seguente in un file YAML denominato
cmek-sc.yaml
. Questo consente il provisioning dinamico dei volumi criptati.Istanze Filestore
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-filestore-cmek provisioner: filestore.csi.storage.gke.io allowVolumeExpansion: true parameters: tier: enterprise instance-encryption-kms-key: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
- Il campo
instance-encryption-kms-key
deve essere il identificatore di risorsa completo per la chiave che verrà utilizzata per criptare le nuove istanze Filestore. - I valori in
instance-encryption-kms-key
sono sensibili alle maiuscole (ad esempio:keyRings
ecryptoKeys
). È in corso il provisioning di un nuovo volume con genera un erroreinvalidResourceUsage
. - Non puoi aggiungere il parametro
instance-encryption-kms-key
a unStorageClass
esistente. Tuttavia, puoi eliminareStorageClass
e lo ricrea con lo stesso nome, ma con un insieme diverso parametri.
Dischi permanenti
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-gce-pd-cmek provisioner: pd.csi.storage.gke.io volumeBindingMode: "WaitForFirstConsumer" allowVolumeExpansion: true parameters: type: pd-standard disk-encryption-kms-key: projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
- Il campo
disk-encryption-kms-key
deve essere il identificatore di risorsa completo per la chiave che verrà utilizzata per criptare i nuovi dischi. - I valori in
disk-encryption-kms-key
sono sensibili alle maiuscole (ad esempio:keyRings
ecryptoKeys
). È in corso il provisioning di un nuovo volume con genera un erroreinvalidResourceUsage
. - Non puoi aggiungere il parametro
disk-encryption-kms-key
a un modello esistente OggettoStorageClass
. Tuttavia, puoi eliminare l'oggettoStorageClass
e lo ricrea con lo stesso nome, ma con un set di parametri diverso. Marca assicurati che il provisioner della classe esistente siapd.csi.storage.gke.io
.
Puoi impostare StorageClass come predefinito.
- Il campo
Esegui il deployment di
StorageClass
sul tuo cluster GKE utilizzandokubectl
:kubectl apply -f cmek-sc.yaml
Verifica che
StorageClass
abbia utilizzato Compute Engine Filestore o il driver CSI del disco permanente e include il ID del token:Istanze Filestore
kubectl describe storageclass csi-filestore-cmek
Nell'output del comando, verifica quanto segue:
- Il provisioner è impostato come filestore.csi.storage.gke.io.
- L'ID della tua chiave segue instance-encryption-kms-key.
Name: csi-filestore-cmek IsDefaultClass: No Annotations: None Provisioner: filestore.csi.storage.gke.io Parameters: instance-encryption-kms-key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME,type=pd-standard AllowVolumeExpansion: true MountOptions: none ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: none
Dischi permanenti
kubectl describe storageclass csi-gce-pd-cmek
Nell'output del comando, verifica quanto segue:
- Il provisioner è impostato su
pd.csi.storage.gke.io
. - L'ID della chiave segue
disk-encryption-kms-key
.
Name: csi-gce-pd-cmek IsDefaultClass: No Annotations: None Provisioner: pd.csi.storage.gke.io Parameters: disk-encryption-kms-key=projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME,type=pd-standard AllowVolumeExpansion: unset MountOptions: none ReclaimPolicy: Delete VolumeBindingMode: WaitForFirstConsumer Events: none
Crea un volume di archiviazione criptato in GKE
In questa sezione, eseguirai il provisioning dinamico dello spazio di archiviazione criptato di Kubernetes
volumi con la tua nuova StorageClass
e la chiave Cloud KMS.
Copia i seguenti contenuti in un nuovo file denominato
pvc.yaml
e assicurati che il valore distorageClassName
corrisponde al nome diStorageClass
:Istanze Filestore
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteMany storageClassName: csi-filestore-cmek resources: requests: storage: 1Ti
Dischi permanenti
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: csi-gce-pd-cmek resources: requests: storage: 6Gi
Applica
PersistentVolumeClaim
(PVC) al cluster GKE:kubectl apply -f pvc.yaml
Se il campo
volumeBindingMode
diStorageClass
è impostato suWaitForFirstConsumer
, devi creare un pod per utilizzare la PVC prima di poter verificarlo. Copia i seguenti contenuti in un nuovo file denominatopod.yaml
e assicurati che il valore diclaimName
corrisponda al nome del tuo OggettoPersistentVolumeClaim
:apiVersion: v1 kind: Pod metadata: name: web-server spec: containers: - name: web-server image: nginx volumeMounts: - mountPath: /var/lib/www/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc readOnly: false
Applica il pod al tuo cluster GKE:
kubectl apply -f pod.yaml
Ottieni lo stato di
PersistentVolumeClaim
del cluster e verifica che La PVC viene creata e associata a unPersistentVolume
di cui è stato eseguito il provisioning di recente.Istanze Filestore
kubectl get pvc
L'output è simile al seguente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 1Ti RWO csi-filestore-cmek 9s
Dischi permanenti
kubectl get pvc
L'output è simile al seguente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE podpvc Bound pvc-e36abf50-84f3-11e8-8538-42010a800002 6Gi RWO csi-gce-pd-cmek 9s
Ora puoi utilizzare il Persistent Disk protetto da CMEK con il tuo cluster GKE.
Rimuovi la protezione CMEK
Per rimuovere la protezione CMEK da un Persistent Disk, segui le istruzioni riportate nella Documentazione di Compute Engine.
Impossibile rimuovere la crittografia CMEK dalle istanze Filestore.
Criteri dell'organizzazione GKE e CMEK
GKE supporta Criteri dell'organizzazione CMEK (anteprima) che possono richiedere la protezione CMEK e limitare le chiavi Cloud KMS che puoi utilizzare per la protezione CMEK.
Quando container.googleapis.com
è nell'elenco dei servizi del criterio Deny
per la
Vincolo di constraints/gcp.restrictNonCmekServices
, GKE rifiuta
per creare le risorse seguenti se non abiliti la protezione CMEK:
- Nuovi cluster e pool di nodi
- Nuove istanze e dischi permanenti Filestore
Quando il vincolo constraints/gcp.restrictNonCmekCryptoKeyProjects
è
configurato in un criterio dell'organizzazione, GKE crea
Risorse protette da CMEK che usano una chiave di crittografia di un progetto consentito
cartella o organizzazione.
Passaggi successivi
- Leggi le domande frequenti su Cloud Key Management Service.
- Scopri di più sulla protezione delle risorse con le chiavi Cloud KMS.