Utilizzo delle chiavi di crittografia gestite dal cliente (CMEK)
Questa pagina descrive come eseguire le attività relative alle chiavi di crittografia gestite dal cliente (CMEK) per Bigtable. Per saperne di più su CMEK in generale, incluso quando e perché abilitarla, consulta la documentazione di Cloud KMS.
Ti consigliamo di utilizzare la Google Cloud console 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:
- Crea (o recupera) un service agent Bigtable.
- Crea una chiave CMEK.
- Configura le impostazioni IAM per la chiave.
Crea un service agent Bigtable
Prima di creare una chiave CMEK, devi disporre di un service agent Bigtable, che Bigtable utilizza per accedere alla chiave.
Console
Non puoi creare un service agent nella console Google Cloud . Bigtable potrebbe eseguire automaticamente il provisioning di un service agent durante il flusso di lavoro di creazione dell'istanza quando crei o selezioni la chiave. Inoltre, quando selezioni una chiave gestita dal cliente, la console verifica la presenza del service agent. Potrebbe verificarsi uno dei seguenti risultati:
- Se l'agente di servizio esiste, ti viene chiesto di concedergli il ruolo Autore crittografia/decrittografia Cloud KMS.
- Se l'agente di servizio non viene sottoposto a provisioning automatico o si verificano errori durante la selezione della chiave, utilizza la scheda gcloud per creare manualmente l'agente e concedere le autorizzazioni necessarie.
gcloud
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 il service account se non esiste già, quindi lo visualizza.
gcloud beta services identity create \ --service=bigtableadmin.googleapis.com \ --project CBT_PROJECTSostituisci
CBT_PROJECTcon il progetto che contiene le tue risorse Bigtable.Il comando visualizza l'ID agente di servizio, che ha il formato di un indirizzo email. Registra la stringa dell'email di output, perché 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.
Nel progetto Google Cloud in cui vuoi gestire le chiavi:
Crea chiavi automatizzate e una chiave utilizzando una delle seguenti opzioni:
- Crea le chiavi automatizzate e la chiave direttamente in Cloud KMS.
- Utilizza una chiave gestita esternamente. Crea la chiave esterna e poi crea una chiave Cloud EKM per rendere la chiave disponibile tramite Cloud KMS.
La posizione della chiave Cloud KMS deve essere la stessa del cluster Bigtable con cui verrà utilizzata. Ad esempio, se crei un keyring e una chiave in
us-central1(Iowa), i cluster inus-central1-a,us-central1-beus-central1-cpossono essere protetti dalle chiavi di quel keyring.
Configura le impostazioni IAM per la chiave
Console
Per concedere un ruolo Cloud KMS al tuo service agent, procedi nel seguente modo. Puoi anche concedere l'autorizzazione a livello di chiave o portachiavi se vuoi una granularità inferiore.
Nella console Google Cloud , vai alla pagina IAM.
Fai clic su Aggiungi.
Inserisci l'ID in formato email del tuo agente di servizio Bigtable.
Seleziona il ruolo Cloud KMS CryptoKey Encrypter/Decrypter.
Fai clic su Salva.
gcloud
Concedi il ruolo
cloudkms.cryptoKeyEncrypterDecrypteral tuo service agent: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_PROJECTFornisci quanto segue:
KMS_KEY: il nome che hai assegnato alla chiaveKMS_KEYRING: le chiavi automatizzate KMS che contengono la chiaveKMS_LOCATION: la regione che contiene le chiavi automatizzateSERVICE_ACCOUNT_EMAIL: l'identificatore in formato email per il service agent a cui stai concedendo l'accessoKMS_PROJECT: il progetto che contiene la chiave
Crea un'istanza abilitata a CMEK
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 utilizzare CMEK. Puoi scegliere un tipo di crittografia e una chiave solo 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 per una tabella, completa i seguenti passaggi:
Console
Vai alla pagina delle istanze Bigtable nella consoleGoogle Cloud .
Fai clic sul nome dell'istanza che contiene la tabella per aprire la pagina Dettagli istanza e visualizzare l'elenco dei cluster nell'istanza.
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 confermare la configurazione CMEK nel seguente modo:
gcloud bigtable clusters describe CLUSTER_ID \
--instance INSTANCE_ID --project CBT_PROJECT
Fornisci quanto segue:
CLUSTER_ID: l'identificatore permanente del clusterINSTANCE_ID: l'identificatore permanente dell'istanzaCBT_PROJECT: il progetto che contiene le 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é disattivare solo le chiavi per uno o alcuni cluster.
Console
Questo è il metodo consigliato. L'utilizzo della 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 preferisci utilizzare Google Cloud CLI, esegui i seguenti comandi.
Elenca tutte le versioni della chiave CMEK:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECTFornisci quanto segue:
KMS_KEY: il nome della chiave CMEKKMS_KEYRING: le chiavi automatizzate KMS che contengono la chiaveKMS_LOCATION: la regione che contiene le chiavi automatizzateKMS_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 ENABLEDDisabilita 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; doneFornisci quanto segue:
1 2 3 4: le versioni che stai disattivandoKMS_KEY: il nome della chiave CMEKKMS_KEYRING: le chiavi automatizzate KMS che contengono la chiaveKMS_LOCATION: la regione che contiene le chiavi automatizzateKMS_PROJECT: il progetto che contiene la chiave
L'elenco di tutte le versioni delle chiavi mostrerà di nuovo il loro stato impostato su
DISABLED, anche se potrebbero essere necessarie fino a 4 ore prima che Bigtable agisca in base a questa modifica dello stato.[Facoltativo] Per verificare lo stato di una chiave CMEK disattivata dopo aver atteso 4 ore, esegui questo comando:
gcloud bigtable instances tables describe TABLE_ID \ --instance INSTANCE_ID --view ENCRYPTION \ --project CBT_PROJECTFornisci quanto segue:
TABLE_ID: l'identificatore permanente della tabellaINSTANCE_ID: l'identificatore permanente dell'istanzaCBT_PROJECT: il progetto che contiene le 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[Facoltativo] Per verificare che i cluster nell'istanza siano disattivati, esegui questo comando:
gcloud bigtable clusters list --instances INSTANCE_ID --project CBT_PROJECTFornisci quanto segue:
INSTANCE_ID: l'identificatore permanente dell'istanzaCBT_PROJECT: il progetto che contiene le 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
Abilitare 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 a partire dal momento in cui la versione della chiave viene disabilitata.
Console
Questo è il metodo consigliato. L'utilizzo della 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 vuoi utilizzare Google Cloud CLI, esegui i seguenti comandi.
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_PROJECTFornisci quanto segue:
KMS_KEY: il nome della chiave CMEKKMS_KEYRING: le chiavi automatizzate KMS che contengono la chiaveKMS_LOCATION: la regione che contiene le chiavi automatizzateKMS_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 DISABLEDEsegui il comando
kms keys versions enablefornendo tutte le versioni elencate. Utilizzando l'output di esempio, il comando è 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; doneFornisci quanto segue:
1 2 3 4: le versioni che stai disattivandoKMS_KEY: il nome della chiave CMEKKMS_KEYRING: le chiavi automatizzate KMS che contengono la chiaveKMS_LOCATION: la regione che contiene le chiavi automatizzateKMS_PROJECT: il progetto che contiene la chiave
Se elenchi di nuovo le versioni della chiave, il loro stato viene impostato su
ENABLED.
Visualizzare i log di controllo per una chiave Cloud KMS
Prima di attivare gli audit log di accesso ai dati di Cloud KMS, devi avere familiarità con 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 esegue una chiamata di crittografia/decrittografia per ogni richiesta di dati, ma mantiene un poller che controlla periodicamente la chiave. I risultati del sondaggio vengono visualizzati nei log di controllo.
Puoi configurare e interagire con i log di controllo nella consoleGoogle Cloud :
Assicurati che il logging sia abilitato per l'API Cloud KMS nel tuo progetto.
Vai a Cloud Logging nella console Google Cloud .
Limita le voci di log alla tua chiave Cloud KMS aggiungendo le seguenti righe al generatore di query:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEYFornisci quanto segue:
KMS_KEY: il nome della chiave CMEKKMS_KEYRING: le chiavi automatizzate KMS che contengono la chiave
Il log mostra un paio di voci di log circa ogni cinque minuti per tabella in ogni 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, vedi Informazioni sugli audit log.
Visualizzare l'utilizzo delle chiavi
Cloud KMS ti consente di visualizzare le seguenti informazioni sulle risorse Bigtable protette dalle tue chiavi.
- Riepilogo dell'utilizzo della chiave: include informazioni sul numero di risorse protette e progetti che utilizzano la chiave.
- Dettagli sull'utilizzo della chiave: identifica le risorse protette da una chiave e le risorse che dipendono dalla chiave.
Sono supportate le seguenti risorse Bigtable:
bigtableadmin.googleapis.com/Backupbigtableadmin.googleapis.com/Clusterbigtableadmin.googleapis.com/Tablebigtableadmin.googleapis.com/AuthorizedView
Le seguenti risorse Bigtable sono supportate come anteprima:
bigtableadmin.googleapis.com/LogicalViewbigtableadmin.googleapis.com/MaterializedView
Per saperne di più sulla visualizzazione dell'utilizzo delle chiavi, consulta Visualizzare le informazioni sull'utilizzo delle chiavi.
Visualizzare lo stato della crittografia di una tabella
Console
Non puoi visualizzare lo stato di crittografia di una tabella nella consoleGoogle Cloud .
gcloud
Per visualizzare i dettagli di CMEK in una tabella, imposta view su ENCRYPTION o FULL.
La risposta include la versione della chiave in uso e il relativo stato visualizzato 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 clusterINSTANCE_ID: l'identificatore permanente dell'istanza che contiene il backupCBT_PROJECT: il progetto che contiene le 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 alla versione originale della chiave. Le rotazioni delle versioni delle chiavi in Cloud KMS non ruotano le versioni utilizzate per decriptare i backup.
Console
Vai alla pagina delle istanze Bigtable nella consoleGoogle Cloud .
Fai clic sul nome dell'istanza per aprire la pagina Dettagli istanza.
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 questo 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 backupCLUSTER_ID: l'identificatore permanente del clusterINSTANCE_ID: l'identificatore permanente dell'istanza che contiene il backupCBT_PROJECT: il progetto che contiene le risorse Bigtable
Il comando restituisce un output simile al seguente. kmsKeyVersion
è la versione della chiave CMEK a cui è associato 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'