Crittografa i dischi di avvio etcd e del control plane


.

Questa pagina mostra come criptare i dati archiviati nel piano di controllo di Google Kubernetes Engine (GKE) utilizzando le chiavi gestite in Cloud Key Management Service (Cloud KMS). Dovresti già avere familiarità con concetti come etcd, l'architettura dei cluster GKE e Cloud KMS.

Questa pagina descrive una parte di un insieme di funzionalità opzionali del control plane in GKE che ti consente di eseguire attività come la verifica del livello di sicurezza del control plane o la configurazione della crittografia e della firma delle credenziali nel control plane utilizzando chiavi che gestisci. Per maggiori dettagli, consulta l'articolo Informazioni sull'autorità del piano di controllo GKE.

Per impostazione predefinita, Trusted Cloud applica varie misure di sicurezza al piano di controllo gestito. Questa pagina descrive le funzionalità facoltative che offrono maggiore visibilità o controllo sul piano di controllo 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 backup operativo interno di etcd utilizzando chiavi di crittografia che gestisce. Trusted Cloud by S3NS Trusted CloudPer informazioni dettagliate su questa crittografia predefinita, vedi Crittografia at-rest predefinita. Facoltativamente, puoi utilizzare le tue chiavi di crittografia gestite con Cloud KMS per criptare queste risorse. Per scoprire di più, vedi Crittografia del disco di avvio del control plane e di etcd.

Crea chiavi in Cloud KMS che GKE utilizza 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 dallo scopo di ciascuna chiave. Se hai un portachiavi esistente che hai utilizzato per un altro scopo, ad esempio per configurare le tue autorità di certificazione, puoi utilizzare questo portachiavi per questa guida.
  • Per una latenza migliore, devi creare le chiavi nella stessa località Trusted Cloud del cluster.
  • Per la maggior parte dei casi d'uso, puoi utilizzare il livello di protezione delle chiavi Cloud KMS software. Puoi anche utilizzare chiavi hardware con Cloud HSM.
  • Devi specificare il flag --purpose con il valore encryption perché 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

L'autorità del control plane GKE fornisce le seguenti funzionalità relative alle chiavi autogestite che devi abilitare contemporaneamente alla creazione di un cluster:

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 di chiavi e CA in entrambe le guide, poi esegui il comando di creazione del cluster che attiva entrambi i set di funzionalità come descritto nella sezione Crea 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à, installala e poi inizializza gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima versione eseguendo gcloud components update.
  • Assicurati che il progetto chiave abbia un keyring Cloud KMS per il tuo cluster. Puoi utilizzare qualsiasi portachiavi esistente nella posizione del cluster. Per creare un nuovo portachiavi, consulta Creare un portachiavi.
  • Enable the Cloud Key Management Service API.

    Enable the API

Identificare i progetti

Ti consigliamo di utilizzare progetti Trusted Cloud separati nel seguente modo:

  • Progetto chiave: contiene tutte le chiavi.
  • Progetto cluster: contiene i cluster GKE.

Puoi utilizzare facoltativamente 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:

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

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 capacità per la modalità confidenziale per Hyperdisk bilanciato in almeno tre zone della regione.

    Per i cluster in modalità Standard a livello di zona, la zona del cluster deve avere capacità Hyperdisk bilanciato. Per assistenza in merito alla capacità, contatta l'assistenza clienti Google Cloud.

  • GKE supporta solo le chiavi di Cloud KMS. Non puoi utilizzare un altro provider KMS Kubernetes o un altro provider di crittografia.

  • Le chiavi Cloud External Key Manager (Cloud EKM) non sono supportate.

  • Non puoi accedere ai backup operativi interni di etcd, che sono solo per il ripristino di emergenza, né interagire con questi. Trusted Cloud

  • I portachiavi multiregionali non sono supportati. Devi utilizzare un keyring regionale.

  • Le regioni e le zone in cui puoi utilizzare l'autorità del control plane GKE dipendono dal fatto che tu voglia utilizzare anche funzionalità specifiche, come segue:

    • Per criptare i dischi di avvio del piano di controllo con una chiave di crittografia gestita dal cliente, il cluster deve trovarsi in una delle seguenti regioni:
      • asia-east1
      • asia-northeast1
      • asia-southeast1
      • europe-west1
      • europe-west4
      • us-central1
      • us-east1
      • us-east4
      • us-east5
      • us-south1
      • us-west1
      • us-west3
      • us-west4
    • Per utilizzare Confidential GKE Nodes con l'autorità del control plane GKE, il cluster deve trovarsi in una regione che supporta la modalità confidenziale per Hyperdisk bilanciato.

    Se non utilizzi queste funzionalità, puoi utilizzare l'autorità del piano di controllo GKE in qualsiasi Trusted Cloud posizione.

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 backup operativo interno di etcd. Trusted CloudPuoi utilizzare un portachiavi per contenere tutte queste chiavi e qualsiasi altra chiave per il cluster.

  1. 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_ID
    

    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 portachiavi in cui archiviare le chiavi di crittografia per il cluster.
    • LOCATION: la Trusted Cloud posizione delle chiavi automatizzate. 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 per la chiave, ad esempio software o hsm.
    • KEY_PROJECT_ID: l'ID progetto del tuo progetto chiave.
  2. 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_ID
    

    Sostituisci ETCD_BACKUP_KEY_NAME con un nome per la chiave di crittografia di backup interno di etcd.

Concedi ruoli IAM all'agente di servizio GKE

In questa sezione, concedi i ruoli IAM sulle 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 control plane corrispondenti.

  1. Trova il numero del progetto del cluster:

    gcloud projects describe CLUSTER_PROJECT_ID \
        --format='value(projectNumber)'
    

    Sostituisci CLUSTER_PROJECT_ID con l'ID progetto del tuo progetto cluster GKE.

    L'output è simile al seguente:

    1234567890
    
  2. Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) sulla chiave di crittografia per i dischi di avvio e i dischi etcd all'agente di servizio 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.s3ns-system.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 Trusted Cloud posizione della chiave.
    • KEYRING_NAME: il nome del portachiavi che contiene la chiave di crittografia.
    • CLUSTER_PROJECT_NUMBER: il numero di progetto numerico del progetto cluster, che hai trovato nel passaggio precedente.
    • KEY_PROJECT_ID: l'ID progetto del tuo progetto chiave.
  3. Concedi il ruolo Cloud KMS CryptoKey Encrypter/Decrypter Via Delegation (roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation) sulla chiave di crittografia per i dischi di avvio e i dischi etcd all'agente di servizio 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.s3ns-system.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypterDecrypterViaDelegation \
        --project=KEY_PROJECT_ID
    
  4. Concedi il ruolo Utente chiave Cloud KMS sulle chiavi di crittografia per i dischi di avvio e i dischi etcd all'agente di servizio GKE nel progetto del 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.s3ns-system.iam.gserviceaccount.com" \
        --role=roles/container.cloudKmsKeyUser \
        --project=KEY_PROJECT_ID
    
  5. Concedi il ruolo Autore crittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyEncrypter) alla chiave di crittografia di backup interna 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.s3ns-system.iam.gserviceaccount.com" \
        --role=roles/cloudkms.cryptoKeyEncrypter \
        --project=KEY_PROJECT_ID
    

    Sostituisci ETCD_BACKUP_KEY_NAME con il nome della chiave di crittografia di 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à quando si verifica un problema con il database. Per consentire a GKE di eseguire i ripristini per te, concedi invece il ruolo roles/cloudkms.cryptoKeyEncrypterDecrypter.

Utilizzare le chiavi di crittografia in un cluster

Questa sezione mostra come identificare i percorsi delle chiavi di crittografia.

  1. 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 portachiavi che contiene la chiave.
    • LOCATION: la Trusted Cloud posizione della chiave.
    • KEY_PROJECT_ID: l'ID progetto del tuo progetto chiave.

    L'output è simile al seguente:

    projects/KEY_PROJECT_ID/locations/LOCATION/keyRings/KEYRING_NAME/cryptoKeys/disk-encryption-key
    
  2. Identifica 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_NAME con il nome della chiave di crittografia di 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 diverse opzioni specificate a seconda delle funzionalità dell'autorità del control plane GKE 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 comando gcloud container clusters create-auto.

  • Per creare un cluster che configuri la crittografia del disco ed esegua le tue CA e le chiavi di firma del account di servizio:

    1. Esegui tutti i passaggi di configurazione della chiave e della CA in Esegui le tue chiavi e le tue autorità di certificazione.
    2. Trova i percorsi di ciascuna chiave del account di servizio e delle CA utilizzando le istruzioni riportate in Configura CA e chiavi su un nuovo cluster.
    3. 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_CA
      

      Sostituisci quanto segue:

      • CLUSTER_NAME: il nome del nuovo cluster.
      • LOCATION: la posizione del nuovo cluster.
      • CLUSTER_PROJECT_ID: l'ID progetto del tuo 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 ServiceAccount Kubernetes in Cloud KMS.
      • PATH_TO_CLUSTER_CA: il percorso del pool 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 del disco utilizzando le chiavi che hai creato in questa guida, esegui questo comando:

    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
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del nuovo cluster.
    • LOCATION: la posizione del nuovo cluster.
    • CLUSTER_PROJECT_ID: l'ID progetto del tuo 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 di 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 la registrazione per verificare le chiavi

Per verificare le chiavi utilizzando Logging:

  1. Nella Trusted Cloud console, vai alla pagina Esplora log:

    Vai a Esplora log

  2. 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:*
    
  3. 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 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"
}

Utilizza gcloud CLI per verificare le chiavi

Per utilizzare gcloud CLI per verificare la chiave di crittografia:

  1. Per la chiave di crittografia del disco, esegui il comando seguente:

    gcloud container clusters describe CLUSTER_NAME \
        --location=LOCATION \
        --format="value(userManagedKeysConfig.controlPlaneDiskEncryptionKey)"
    
  2. 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)"
    

Passaggi successivi