Informazioni sulla crittografia CMEK di Backup per GKE


Questa pagina descrive come funziona il supporto delle chiavi di crittografia gestite dal cliente (CMEK) in Backup per GKE.

Panoramica

Esistono due tipi di artefatti dei dati utente che vengono prodotti e archiviati Backup per GKE:

  • Backup della configurazione: un insieme di descrizioni delle risorse Kubernetes estratto dall'API server del cluster sottoposto a backup, che acquisisce lo stato del cluster.
  • Backup dei volumi: un insieme di backup dei volumi corrispondenti alle risorse PersistentVolumeClaim trovate nel backup della configurazione.

Per impostazione predefinita, tutti gli artefatti di backup prodotti da Backup per GKE sono criptati at-rest utilizzando una chiave fornita da Google.

Tuttavia, puoi scegliere di criptare questi elementi utilizzando un chiave di crittografia gestita dal cliente (CMEK) gestita con Cloud Key Management assistenza.

Abilita la crittografia CMEK

L'attivazione della crittografia CMEK prevede due passaggi:

  • Specifica una chiave per criptare i backup prodotti per una BackupPlan.

  • Concedi agli account di servizio appropriati l'accesso alle chiavi appropriate.

Per qualsiasi scenario di backup specifico, sono potenzialmente coinvolte tre chiavi CMEK:

  • bplan_key: questa è la chiave a cui fai riferimento quando crei o aggiorni BackupPlan. Se possibile, questa chiave che verrà utilizzata per la crittografia tutti gli artefatti di backup. Questa chiave deve trovarsi nella stessa regione di BackupPlan (consulta Informazioni sulle località delle risorse).

  • orig_disk_key: se hai criptato i volumi dei disco permanente utilizzando una chiave CMEK, i backup del volume prodotti da Backup per GKE volumi verranno criptati con questa chiave, anche se viene utilizzata una chiave diversa registrato presso BackupPlan.

  • new_disk_key: questa è la chiave CMEK che vuoi utilizzare per criptare i volumi che hai ripristinato dalla copia di backup. A questo viene fatto riferimento da StorageClass nel cluster di destinazione del ripristino.

Esistono quattro diversi account di servizio che potrebbero richiedere l'accesso alle chiavi CMEK:

  • agent_robot: a questo account di servizio deve essere concesso l'accesso a bplan_key. Questo account di servizio avrà il seguente formato: service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com, dove PROJECT_NUMBER è il numero del tuo progetto Google Cloud.

  • non_cmek_service_agent: quando esegui il backup di volumi non criptati con CMEK, questo account di servizio deve essere ha ottenuto l'accesso al bplan_key. Questo account di servizio avrà modulo: service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com, dove PROJECT_NUMBER è il numero del tuo progetto Google Cloud.

  • cmek_service_agent: quando esegui il backup dei volumi con crittografia CMEK, a questo account di servizio deve essere concesso l'accesso a orig_disk_key. Questo account di servizio avrà la forma: service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, dove TENANT_PROJECT_NUMBER è il numero del progetto del tenant assegnato per il tuo BackupPlan.

  • compute_service_agent: questo account di servizio viene utilizzato per creare nuovi volumi criptati per un cluster e deve avere accesso a new_disk_key. Questo account servizio avrà il seguente formato: service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com, dove PROJECT_NUMBER è il numero del tuo progetto Google Cloud.

Se diskEncryptionKey.kmsKeyServiceAccount è già impostato per i dischi, devi eseguire le seguenti operazioni prima per creare un backup:

  • Disattiva il criterio dell'organizzazione iam.disableCrossProjectServiceAccountUsage per abilitare la simulazione dell'identità degli account di servizio tra progetti:

      gcloud resource-manager org-policies disable-enforce \
          iam.disableCrossProjectServiceAccountUsage
          --project=PROJECT_ID
    
  • Concedi a cmek_service_agent il ruolo roles/iam.serviceAccountTokenCreator a creare credenziali di breve durata:

      gcloud iam service-accounts add-iam-policy-binding \
        # Replace the email with the value from
        # `diskEncryptionKey.kmsKeyServiceAccount`
        your-kms-key-service-acount@PROJECT_ID.iam.gserviceaccount.com \
        --member=service-TENANT_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
    

La tabella seguente riassume a quali account di servizio deve essere concesso l'accesso a quali chiavi in vari scenari:

Artefatto Service account Chiave
cluster di backup della configurazione agent_robot bplan_key
backup del volume criptato con CMEK cmek_service_agent orig_disk_key
backup del volume criptato con Google non_cmek_service_agent bplan_key
Nuovo volume con crittografia CMEK creato durante il ripristino compute_service_agent new_disk_key

Puoi scegliere di concedere l'accesso alle chiavi a livello di progetto, il che consente di accedere a tutte le chiavi del progetto o alla singola chiave.

Concedi l'accesso a livello di progetto

Puoi concedere l'accesso alle chiavi a livello di progetto, il che consente di accedere a tutte le chiavi del progetto.

Segui le istruzioni riportate di seguito per concedere l'accesso a livello di progetto.

Console

  1. Nella console Google Cloud, vai alla pagina IAM.

    Vai a IAM

  2. Fai clic su Concedi accesso.

  3. Nel campo Nuove entità, inserisci l'indirizzo email dell'account di servizio.

  4. Nell'elenco Seleziona un ruolo, seleziona il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS.

  5. Fai clic su Salva.

gcloud

  1. Concedi l'accesso a livello di progetto.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto a cui vuoi concedere l'accesso.
    • PROJECT_NUMBER: il numero del progetto a cui vuoi concedere l'accesso.

Terraform

  1. Concedi l'accesso a livello di progetto.

    resource "google_project_iam_member" "example_iam_member" {
    project = "PROJECT_ID"
    role    = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member  = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com"
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto a cui vuoi concedere l'accesso.
    • PROJECT_NUMBER: il numero del progetto a cui vuoi concedere l'accesso.

Concedi l'accesso a livello di chiave

Segui le istruzioni riportate di seguito per concedere l'accesso a livello di singola chiave.

Console

  1. Nella console Google Cloud, vai alla pagina Gestione delle chiavi.

    Vai a Gestione delle chiavi

  2. Fai clic sul nome del keyring.

  3. Fai clic sul nome della chiave.

  4. Fai clic sulla scheda Autorizzazioni.

  5. Fai clic su Concedi accesso.

  6. Nel campo Nuove entità, inserisci l'indirizzo email dell'account di servizio.

  7. Nell'elenco Seleziona un ruolo, seleziona il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS.

  8. Fai clic su Salva.

gcloud

  1. Concedi l'accesso a livello di singola chiave.

    gcloud kms keys add-iam-policy-binding KEY_NAME \
    --keyring KEY_RING \
    --location LOCATION \
    --member "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter
    

    Sostituisci quanto segue:

    • KEY_NAME: il nome della chiave.
    • KEY_RING: il nome del keyring che contiene la chiave.
    • LOCATION: la posizione Cloud KMS della raccolta di chiavi.
    • PROJECT_NUMBER: il numero del progetto a cui vuoi concedere l'accesso.

Terraform

  1. Concedi l'accesso a livello di singola chiave.

    resource "google_kms_crypto_key_iam_member" "crypto_key_iam_member" {
    crypto_key_id = "projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME"
    role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
    member        = "serviceAccount:service-PROJECT_NUMBER@gcp-sa-gkebackup.iam.gserviceaccount.com" 
    }
    

    Sostituisci quanto segue:

    • PROJECT_ID: l'ID del progetto a cui vuoi concedere l'accesso.
    • LOCATION: la località Cloud KMS del keyring.
    • KEY_RING: il nome del keyring che contiene la chiave.
    • KEY_NAME: il nome della chiave.
    • PROJECT_NUMBER: il numero del progetto a cui vuoi concedere l'accesso.

Considerazioni sull'utilizzo e limitazioni

  • Se vuoi eseguire il backup di un volume criptato con CMEK, devi concedere l'accesso al disco anche se non abiliti la crittografia CMEK nel tuo BackupPlan.

  • Le chiavi CMEK devono trovarsi nella stessa regione di BackupPlan per garantire che un'interruzione a livello di regione non rimuoverà l'accesso alla chiave durante l'esecuzione dei backup ancora accessibili. Tuttavia, questo vincolo non può essere applicato alle chiavi condivise con i volumi criptati. Quando sono coinvolti volumi criptati, è possibile che un ripristino non vada a buon fine anche quando è disponibile un backup, perché la chiave di crittografia del disco potrebbe non essere memorizzata nella stessa regione del backup.

Utilizzare e gestire le chiavi esterne

Puoi utilizzare Cloud External Key Manager (Cloud EKM) per creare e gestire le chiavi esterne. Le chiavi esterne sono puntatori a chiavi che si trovano al di fuori di Google Cloud. Queste chiavi si trovano presso un partner esterno per la gestione delle chiavi supportato. Per ulteriori informazioni, consulta Cloud External Key Manager.

Dopo aver creato una chiave esterna con Cloud EKM, puoi applicarla a una nuovo piano di backup fornendo l'ID della chiave quando creando un nuovo piano di backup. Questa procedura equivale ad applicare una chiave Cloud KMS a un nuovo piano di backup.

Puoi utilizzare le giustificazioni di accesso alle chiavi nell'ambito di Cloud EKM. Key Access Justifications ti consente di visualizzare il motivo di ogni richiesta Cloud EKM. Inoltre, in base alla giustificazione fornita, puoi approvare o rifiutare automaticamente una richiesta. Per maggiori informazioni, consulta la Panoramica.