Utilizzo delle chiavi di crittografia gestite dal cliente (CMEK)

Questa pagina descrive come eseguire attività relative alle chiavi di crittografia gestite dal cliente (CMEK) per Bigtable. Per ulteriori informazioni su CMEK in generale, incluso quando e perché attivarlo, consulta la documentazione di Cloud KMS.

Ti consigliamo di utilizzare la console Google Cloud per tutte le attività di gestione delle chiavi. Se prevedi di utilizzare Google Cloud CLI, installa gcloud CLI per Bigtable.

Prepara le chiavi CMEK

Prima di poter creare una risorsa Bigtable protetta da CMEK, devi completare i seguenti passaggi per creare una chiave CMEK per ogni regione in cui si troveranno i cluster dell'istanza:

  1. Crea (o recupera) un agente di servizio Bigtable.
  2. Crea una chiave CMEK.
  3. Configura le impostazioni IAM per la chiave.

Creare un agente di servizio Bigtable

Prima di creare una chiave CMEK, devi disporre di un agente di servizio Bigtable, utilizzato da Bigtable per accedere alla chiave.

Console

Non riesci a creare un agente di servizio nella console Google Cloud. Tuttavia, se crei la chiave nella console Google Cloud, ti viene chiesto di concedere il ruolo Criptatore/decriptatore Cloud KMS e l'agente di servizio viene creato in quel momento se non esiste ancora.

gcloud

  1. Esegui il comando gcloud services identity create per visualizzare l'agente di servizio utilizzato da Bigtable per accedere alla chiave CMEK per tuo conto. Questo comando crea l'account di servizio se non esiste già e lo mostra.

    gcloud beta services identity create \
        --service=bigtableadmin.googleapis.com \
        --project CBT_PROJECT
    

    Sostituisci CBT_PROJECT con il progetto che contiene le tue risorse Bigtable.

    Il comando mostra l'ID agente di servizio, che è formato come un indirizzo email. Prendi nota della stringa email di output, poiché la utilizzerai in un passaggio successivo.

    Service identity created:
    service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
    

Crea una chiave

Puoi utilizzare una chiave creata direttamente in Cloud KMS o una chiave con gestione esterna che rendi disponibile con Cloud External Key Manager.

  1. Nel progetto Google Cloud in cui vuoi gestire le chiavi:

    1. Abilita l'API Cloud KMS.

    2. Crea un mazzo di chiavi e una chiave utilizzando una delle seguenti opzioni:

      La posizione della chiave Cloud KMS deve essere la stessa del cluster Bigtable con cui verrà utilizzata. Ad esempio, se crei un mazzo di chiavi e una chiave in us-central1 (Iowa), i cluster in us-central1-a, us-central1-b e us-central1-c possono essere protetti dalle chiavi di quel mazzo.

Configura le impostazioni IAM per la chiave

Console

Per concedere un ruolo Cloud KMS all'agente di servizio, procedi nel seguente modo. Puoi anche concedere l'autorizzazione a livello di chiave o portachiavi se vuoi una granularità inferiore.

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

    Vai alla pagina IAM

  2. Fai clic su Aggiungi.

  3. Inserisci l'ID in formato email dell'agente di servizio Bigtable.

  4. Seleziona il ruolo Cloud KMS CryptoKey Encrypter/Decrypter.

  5. Fai clic su Salva.

gcloud

  1. Concedi il ruolo cloudkms.cryptoKeyEncrypterDecrypter all'agente di servizio:

    gcloud kms keys add-iam-policy-binding KMS_KEY \
        --keyring KMS_KEYRING\
        --location KMS_LOCATION \
        --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT
    

    Fornisci quanto segue:

    • KMS_KEY: il nome assegnato alla chiave
    • KMS_KEYRING: la raccolta di chiavi KMS che contiene la chiave
    • KMS_LOCATION : la regione che contiene il portachiavi
    • SERVICE_ACCOUNT_EMAIL: l'identificatore in formato email per l'agente di servizio a cui stai concedendo l'accesso
    • KMS_PROJECT: il progetto che contiene la chiave

Crea un'istanza con CMEK abilitato

Dopo aver creato e configurato le chiavi CMEK, puoi creare un'istanza protetta da CMEK. Le istanze Bigtable esistenti protette dalla crittografia predefinita di Google non possono essere convertite per l'utilizzo di CMEK. Puoi scegliere solo un tipo di crittografia e una chiave al momento della creazione.

Segui i passaggi descritti in Creare un'istanza per creare l'istanza protetta da CMEK.

Visualizzare la chiave in uso

Le informazioni sulle versioni delle chiavi provengono dal campo encryption_info.

Per visualizzare le informazioni sulla versione della chiave CMEK di una tabella, segui questi passaggi:

Console

  1. Vai alla pagina delle istanze Bigtable nella console Google Cloud.

    Apri l'elenco delle istanze

  2. Fai clic sul nome dell'istanza contenente la tabella per aprire la pagina Dettagli istanza e visualizzare l'elenco dei cluster nell'istanza.

  3. Accanto a un ID cluster, fai clic sul nome della chiave in Chiave di crittografia per visualizzare la pagina Versioni della chiave del cluster.

gcloud

Per ogni cluster, puoi verificare la configurazione CMEK come segue:

    gcloud bigtable clusters describe CLUSTER_ID \
        --instance INSTANCE_ID --project CBT_PROJECT

Fornisci quanto segue:

  • CLUSTER_ID: l'identificatore permanente del cluster
  • INSTANCE_ID: l'identificatore permanente dell'istanza
  • CBT_PROJECT: il progetto che contiene le tue risorse Bigtable

Il comando mostra un output simile al seguente:

    defaultStorageType: SSD
    encryptionConfig:
      kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
    location: projects/cloud-bigtable-project/locations/us-central1-a
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
    serveNodes: 1
    state: READY

Disattivare una chiave

La disattivazione di una versione della chiave CMEK sospende l'accesso a tutti i dati protetti da quella versione della chiave. L'eliminazione di una versione della chiave è la controparte permanente (dopo 24 ore) di questa azione. Disattiva sempre tutte le chiavi per un'istanza anziché solo le chiavi per uno o alcuni cluster.

Console

Questo è il metodo consigliato. La console Google Cloud ti consente di disattivare tutte le versioni di una chiave contemporaneamente.

Segui queste istruzioni per ogni versione della chiave.

gcloud

Ti consigliamo di utilizzare la console Google Cloud per disattivare le chiavi. Se vuoi utilizzare Google Cloud CLI, esegui i seguenti comandi.

  1. Elenca tutte le versioni della chiave CMEK:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    Fornisci quanto segue:

    • KMS_KEY: il nome della chiave CMEK
    • KMS_KEYRING: la raccolta di chiavi KMS che contiene la chiave
    • KMS_LOCATION: la regione che contiene il portachiavi
    • KMS_PROJECT: il progetto che contiene la chiave

    L'output è simile al seguente:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      ENABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      ENABLED
    
  2. Disattiva tutte le versioni:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions disable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    Fornisci quanto segue:

    • 1 2 3 4: le versioni da disattivare
    • KMS_KEY: il nome della chiave CMEK
    • KMS_KEYRING: la raccolta di chiavi KMS che contiene la chiave
    • KMS_LOCATION: la regione che contiene il portachiavi
    • KMS_PROJECT: il progetto che contiene la chiave

    Se elenchi di nuovo tutte le versioni della chiave, lo stato verrà impostato su DISABLED, anche se potrebbero essere necessarie fino a 4 ore prima che Bigtable reagisca a questa variazione di stato.

  3. [Facoltativo] Per confermare lo stato di un CMEK disattivato dopo aver atteso 4 ore, esegui il seguente comando:

     gcloud bigtable instances tables describe TABLE_ID \
         --instance INSTANCE_ID --view ENCRYPTION \
         --project CBT_PROJECT
    

    Fornisci quanto segue:

    • TABLE_ID: l'identificatore permanente della tabella
    • INSTANCE_ID: l'identificatore permanente dell'istanza
    • CBT_PROJECT: il progetto che contiene le tue risorse Bigtable

    Il comando mostra un output simile al seguente:

    clusterStates:
      CLUSTER:
        encryptionInfo:
        - encryptionStatus:
            code: 9
            details:
            - '@type': type.googleapis.com/google.rpc.PreconditionFailure
              violations:
              - subject: KMS_KEY_NAME/cryptoKeyVersions/<int>
                type: KEY_DISABLED
            message: KMS_KEY_NAME is not enabled, current state is: DISABLED.
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int>
    name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE
    
  4. [Facoltativo] Per verificare che i cluster nell'istanza siano disattivati, esegui il seguente comando:

    gcloud bigtable clusters list --instances INSTANCE_ID
        --project CBT_PROJECT
    

    Fornisci quanto segue:

    • INSTANCE_ID: l'identificatore permanente dell'istanza
    • CBT_PROJECT: il progetto che contiene le tue risorse Bigtable

    Il comando mostra un output simile al seguente:

    NAME              ZONE           NODES  STORAGE    STATE
    my-cluster        us-central1-a  1      SSD        DISABLED
    my-other-cluster  us-central1-b  1      SSD        DISABLED
    

Attivare una chiave

Se una versione della chiave è stata disattivata, puoi riattivarla per riottenere l'accesso alle tue risorse Bigtable. Questa opzione è disponibile per 30 giorni dal momento in cui la versione della chiave viene disattivata.

Console

Questo è il metodo consigliato. La console Google Cloud ti consente di attivare tutte le versioni di una chiave contemporaneamente.

Segui queste istruzioni per ogni versione della chiave.

gcloud

Ti consigliamo di utilizzare la console Google Cloud per attivare le chiavi. Se preferisci utilizzare Google Cloud CLI, esegui i seguenti comandi.

  1. Visualizza l'elenco delle versioni per identificare tutte le versioni della chiave:

    gcloud kms keys versions list --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT
    

    Fornisci quanto segue:

    • KMS_KEY: il nome della chiave CMEK
    • KMS_KEYRING: la raccolta di chiavi KMS che contiene la chiave
    • KMS_LOCATION: la regione che contiene il portachiavi
    • KMS_PROJECT: il progetto che contiene la chiave

    Il comando mostra un output simile al seguente:

    NAME                                  STATE
    KMS_KEY_NAME/cryptoKeyVersions/1      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/2      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/3      DISABLED
    KMS_KEY_NAME/cryptoKeyVersions/4      DISABLED
    

    Esegui il comando kms keys versions enable, specificando tutte le versioni elencate. Utilizzando l'output di esempio, il comando sarà simile al seguente:

    for $KV in 1 2 3 4;
    do
    gcloud kms keys versions enable KV --key KMS_KEY \
        --keyring KMS_KEYRING --location KMS_LOCATION \
        --project KMS_PROJECT;
    done
    

    Fornisci quanto segue:

    • 1 2 3 4: le versioni da disattivare
    • KMS_KEY: il nome della chiave CMEK
    • KMS_KEYRING: la raccolta di chiavi KMS che contiene la chiave
    • KMS_LOCATION: la regione che contiene il portachiavi
    • KMS_PROJECT: il progetto che contiene la chiave

    Se elenchi di nuovo le versioni della chiave, il loro stato viene impostato su ENABLED.

Visualizzare gli audit log di una chiave Cloud KMS

Prima di attivare gli audit log di accesso ai dati di Cloud KMS, devi conoscere gli audit log di Cloud.

I log di controllo dell'accesso ai dati di Cloud KMS mostrano quando Bigtable o altri prodotti configurati per utilizzare la tua chiave CMEK effettuano chiamate di crittografia/decrittografia a Cloud KMS. Bigtable non emette una chiamata di crittografia/decrittografia per ogni richiesta di dati, ma gestisce un poller che controlla la chiave periodicamente. I risultati del polling vengono visualizzati nei log di controllo.

Puoi configurare e interagire con i log di controllo nella console Google Cloud:

  1. Assicurati che il logging sia abilitato per l'API Cloud KMS nel tuo progetto.

  2. Vai a Cloud Logging nella console Google Cloud.

    Vai a Cloud Logging

  3. Limita le voci di log alla tua chiave Cloud KMS aggiungendo le seguenti righe a Query Builder:

    resource.type="cloudkms_cryptokey"
    resource.labels.key_ring_id = KMS_KEYRING
    resource.labels.crypto_key_id = KMS_KEY
    

    Fornisci quanto segue:

    • KMS_KEY: il nome della chiave CMEK
    • KMS_KEYRING: la raccolta di chiavi KMS che contiene la chiave

    Il log mostra un paio di voci di log ogni cinque minuti circa per tabella in ciascun cluster. Le voci di log sono simili a questi esempi:

    Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com"
    
    Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com
    audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
    

Per informazioni dettagliate sull'interpretazione dei log di controllo, consulta Informazioni sugli audit log.

Visualizza l'utilizzo delle chiavi

Cloud KMS ti consente di visualizzare le seguenti informazioni sulle risorse Bigtable protette dalle tue chiavi.

  • Riepilogo dell'utilizzo delle chiavi: include informazioni sul numero di risorse e progetti protetti che utilizzano la chiave.
  • Dettagli sull'utilizzo della chiave: identifica le risorse protette da una chiave e quelle che dipendono dalla chiave.

Sono supportate le seguenti risorse Bigtable:

  • bigtableadmin.googleapis.com/Backup
  • bigtableadmin.googleapis.com/Cluster
  • bigtableadmin.googleapis.com/Table

Per ulteriori informazioni su come visualizzare l'utilizzo delle chiavi, vedi Visualizzare le informazioni sull'utilizzo delle chiavi.

Visualizzare lo stato di crittografia di una tabella

Console

Non riesci a visualizzare lo stato della crittografia di una tabella nella console Google Cloud.

gcloud

Per visualizzare i dettagli del CMEK in una tabella, imposta view su ENCRYPTION o FULL. La risposta include la versione della chiave in uso e il relativo stato come visto da Bigtable.

    gcloud alpha bigtable instances tables describe TABLE_ID \
        --instance INSTANCE_ID --view ENCRYPTION \
        --project CBT_PROJECT

Fornisci quanto segue:

  • TABLE_ID: l'identificatore permanente del cluster
  • INSTANCE_ID: l'identificatore permanente dell'istanza che contiene il backup
  • CBT_PROJECT: il progetto che contiene le tue risorse Bigtable

Il comando mostra un output simile al seguente:

    clusterStates:
      my-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      my-other-cluster:
        encryptionInfo:
        - encryptionStatus: {}
          encryptionType: CUSTOMER_MANAGED_ENCRYPTION
          kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
      name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table

Visualizzare i dettagli di crittografia di un backup

Un backup rimane bloccato sulla versione originale della chiave. Le rotazioni delle versioni delle chiavi in Cloud KMS non ruotano le versioni utilizzate per decriptare i backup.

Console

  1. Vai alla pagina delle istanze Bigtable nella console Google Cloud.

    Apri l'elenco delle istanze

  2. Fai clic sul nome dell'istanza per aprire la pagina Dettagli istanza.

  3. Nel riquadro di navigazione a sinistra, fai clic su Backup.

Il nome e la versione della chiave per ogni backup sono elencati in Chiave gestita dal cliente.

gcloud

Esegui il seguente comando per visualizzare le informazioni sulla crittografia di un backup.

    gcloud alpha bigtable backups describe BACKUP_ID \
        --instance INSTANCE_ID --cluster CLUSTER_ID \
        --project CBT_PROJECT

Fornisci quanto segue:

  • BACKUP_ID: l'ID assegnato al backup
  • CLUSTER_ID: l'identificatore permanente del cluster
  • INSTANCE_ID: l'identificatore permanente dell'istanza che contiene il backup
  • CBT_PROJECT: il progetto che contiene le tue risorse Bigtable

Il comando restituisce un output simile al seguente. kmsKeyVersion è la versione della chiave CMEK a cui è bloccato il backup. Lo stato della versione della chiave non viene segnalato.

    encryptionInfo:
      encryptionStatus:
        code: 2
        message: Status of the associated key version is not tracked.
      encryptionType: CUSTOMER_MANAGED_ENCRYPTION
      kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
    endTime: '2020-09-01T00:03:26.568600Z'
    expireTime: '2020-09-02T00:03:25.436473Z'
    name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
    sizeBytes: '3780'

Passaggi successivi