Questa pagina descrive come utilizzare le chiavi di crittografia gestite dal cliente (CMEK) create manualmente per Spanner.
Per scoprire di più sulle chiavi CMEK, consulta la panoramica delle chiavi di crittografia gestite dal cliente (CMEK).
Creare un database compatibile con CMEK
Crea una chiave in Cloud Key Management Service (Cloud KMS). Spanner supporta la creazione dei seguenti tipi di Cloud KMS:
La chiave deve trovarsi nella stessa posizione dell'istanza Spanner. Ad esempio, se la configurazione dell'istanza Spanner è in
us-west1
, anche la posizione del portachiavi Cloud KMS deve essereus-west1
.Non tutte le configurazioni di istanze multiregione di Spanner hanno una posizione del portachiavi Cloud KMS corrispondente. Per i database Spanner in configurazioni di istanze personalizzate, a due regioni o multiregionali, puoi utilizzare più chiavi Cloud KMS regionali (a singola regione) per proteggere il database. Ad esempio:
- Se il database Spanner si trova nella configurazione dell'istanza multiregione
nam14
, puoi creare chiavi Cloud KMS inus-east4
,northamerica-northeast1
eus-east1
. - Se il database si trova in una configurazione dell'istanza personalizzata che utilizza
nam3
come configurazione dell'istanza di base con un'ulteriore replica di sola lettura inus-central2
, puoi creare chiavi Cloud KMS inus-east4
,us-east1
,us-central1
eus-central2
.
(Facoltativo) Per visualizzare un elenco delle posizioni delle repliche nella configurazione dell'istanza Spanner, utilizza il comando
gcloud spanner instances get-locations
:gcloud spanner instances get-locations <var>INSTANCE_ID</var>
Per maggiori informazioni, consulta le seguenti risorse:
- Se il database Spanner si trova nella configurazione dell'istanza multiregione
Concedi a Spanner l'accesso alla chiave.
In Cloud Shell, crea e visualizza l'agente di servizio oppure visualizzalo se l'account esiste già:
gcloud beta services identity create --service=spanner.googleapis.com \ --project=PROJECT_ID
Se ti viene chiesto di installare il componente Comandi gcloud beta, digita
Y
. Dopo l'installazione, il comando viene riavviato automaticamente.Il comando
gcloud services identity
crea o recupera l'agente di servizio che Spanner può utilizzare per accedere alla chiave Cloud KMS per conto tuo.L'ID account di servizio ha il formato di un indirizzo email:
Service identity created: service-xxx@gcp-sa-spanner.iam.gserviceaccount.com
Concedi il ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS(
cloudkms.cryptoKeyEncrypterDecrypter
) all'account di servizio per ogni regione (--location
) nella configurazione dell'istanza Spanner. Per farlo, esegui il comandogcloud kms keys add-iam-policybinding
:gcloud kms keys add-iam-policy-binding KMS_KEY \ --location KMS_KEY_LOCATION \ --keyring KMS_KEY_RING \ --project=PROJECT_ID \ --member serviceAccount:service-xxx@gcp-sa-spanner.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Ecco un esempio di output:
Updated IAM policy for key [KMS_KEY]
Se utilizzi più chiavi Cloud KMS per proteggere il tuo database, esegui il comando
gcloud kms keys add-iam-policybinding
per tutte le chiavi.Questo ruolo garantisce che l'account di servizio abbia l'autorizzazione per criptare e decriptare con la chiave Cloud KMS. Per ulteriori informazioni, consulta Autorizzazioni e ruoli Cloud KMS.
Crea il database e specifica la chiave Cloud KMS.
Console
Utilizza la console per creare database in configurazioni di istanze regionali.
Nella console Google Cloud , vai alla pagina Istanze.
Fai clic sull'istanza in cui vuoi creare un database.
Fai clic su Crea database e compila i campi obbligatori.
Fai clic su Mostra opzioni di crittografia.
Seleziona Chiave Cloud KMS.
Seleziona una chiave dall'elenco a discesa.
L'elenco delle chiavi è limitato al progetto Google Cloud corrente. Per utilizzare una chiave di un altro progetto Google Cloud , crea il database utilizzando gcloud CLI anziché la consoleGoogle Cloud .
Una volta creato il database, puoi verificare che sia attivato per CMEK visualizzando la pagina Panoramica del database.
gcloud
Per creare un database compatibile con CMEK in una configurazione di istanze regionale, personalizzata o multiregionale, esegui il comando gcloud spanner databases create
:
gcloud spanner databases create DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID \
--ddl="CREATE TABLE Users (Id INT64 NOT NULL, FirstName STRING(100) NOT NULL, LastName STRING(100) NOT NULL,) PRIMARY KEY (Id)" \
--kms-project=KMS_PROJECT_ID \
--kms-location=KMS_KEY_LOCATION \
--kms-keyring=KMS_KEYRING \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
Per verificare che un database sia abilitato a CMEK, esegui il comando
gcloud spanner databases describe
:
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
I database abilitati per CMEK includono un campo per encryptionConfig
, come mostrato nell'esempio di output che segue:
encryptionConfig:
kmsKeyNames:projects/my-kms-project/locations/eur5/keyRings/my-kms-key-ring/cryptoKeys/my-kms-key
name: projects/my-spanner-project/instances/my-instance/databases/my-db
state: READY
Librerie client
C#
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
C++
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
Vai
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
Java
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
Node.js
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
PHP
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
Python
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
Ruby
Per creare un database compatibile con CMEK in una configurazione dell'istanza a livello di regione:
Per creare un database compatibile con CMEK in una configurazione di istanze multiregione:
Visualizzare le versioni delle chiavi in uso
Il campo encryption_info
del database mostra informazioni sulle versioni principali.
Quando la versione della chiave di un database cambia, la modifica non viene propagata immediatamente
a encryption_info
. Potrebbe essere necessario un po' di tempo prima che la modifica venga applicata in questo campo.
Console
Nella console Google Cloud , vai alla pagina Istanze.
Fai clic sull'istanza contenente il database che vuoi visualizzare.
Fai clic sul database.
Le informazioni sulla crittografia vengono visualizzate nella pagina Dettagli database.
gcloud
Puoi ottenere il valore encryption_info
di un database eseguendo il comando
gcloud spanner databases describe
o gcloud spanner databases list
. Ad esempio:
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Ecco un esempio di output:
name: projects/my-project/instances/test-instance/databases/example-db
encryptionInfo:
- encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: projects/my-kms-project/locations/my-kms-key1-location/keyRings/my-kms-key-ring1/cryptoKeys/my-kms-key1/cryptoKeyVersions/1
- encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: projects/my-kms-project/locations/my-kms-key2-location/keyRings/my-kms-key-ring2/cryptoKeys/my-kms-key2/cryptoKeyVersions/1
Disattiva la chiave
Disattiva le versioni della chiave in uso seguendo queste istruzioni per ogni versione della chiave.
Attendi che la modifica venga applicata. La disattivazione di una chiave può richiedere fino a tre ore per essere propagata.
Per verificare che il database non sia più accessibile, esegui una query nel database con CMEK disattivato:
gcloud spanner databases execute-sql DATABASE \ --project=SPANNER_PROJECT_ID \ --instance=INSTANCE_ID \ --sql='SELECT * FROM Users'
Viene visualizzato il seguente messaggio di errore:
KMS key required by the Spanner resource is not accessible.
Attiva la chiave
Attiva le versioni delle chiavi in uso dal database seguendo queste istruzioni per ogni versione della chiave.
Attendi che la modifica venga applicata. La propagazione dell'attivazione di una chiave può richiedere fino a tre ore.
Per verificare che il database non sia più accessibile, esegui una query nel database abilitato a CMEK:
gcloud spanner databases execute-sql DATABASE \ --project=SPANNER_PROJECT_ID \ --instance=INSTANCE_ID \ --sql='SELECT * FROM Users'
Se la modifica è stata applicata, il comando viene eseguito correttamente.
Eseguire il backup di un database
Puoi utilizzare i backup di Spanner per creare backup dei tuoi database. Per impostazione predefinita, i backup di Spanner creati da un database utilizzano la stessa configurazione di crittografia del database stesso. Se vuoi, puoi specificare una configurazione di crittografia diversa per un backup.
Console
Utilizza la console per creare backup nelle configurazioni delle istanze a livello di regione.
Nella console Google Cloud , vai alla pagina Istanze.
Fai clic sul nome dell'istanza contenente il database di cui vuoi eseguire il backup.
Fai clic sul database.
Nel riquadro di navigazione, fai clic su Backup/Ripristino.
Nella scheda Backup, fai clic su Crea backup.
Inserisci un nome per il backup e seleziona una data di scadenza.
(Facoltativo) Fai clic su Mostra opzioni di crittografia.
a. Se vuoi utilizzare una configurazione di crittografia diversa per il backup, fai clic sul cursore accanto a Usa crittografia esistente.
a. Seleziona Chiave Cloud KMS.
a. Seleziona una chiave dall'elenco a discesa.
L'elenco delle chiavi è limitato al progetto Google Cloud corrente. Per utilizzare una chiave di un altro progetto Google Cloud , crea il database utilizzando gcloud CLI anziché la console Google Cloud .
Fai clic su Crea.
La tabella Backup mostra le informazioni sulla crittografia per ogni backup.
gcloud
Per creare un backup abilitato a CMEK in una configurazione di istanze regionale, personalizzata o multiregionale, esegui il comando gcloud spanner backups create
:
gcloud spanner backups create BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID \
--database=DATABASE \
--retention-period=RETENTION_PERIOD \
--encryption-type=customer_managed_encryption \
--kms-project=KMS_PROJECT_ID \
--kms-location=KMS_KEY_LOCATION \
--kms-keyring=KMS_KEY_RING \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
--async
Per verificare che il backup creato sia criptato con CMEK:
gcloud spanner backups describe BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Librerie client
C#
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
C++
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Vai
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Java
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Node.js
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
PHP
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Python
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Ruby
Per creare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per creare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Copiare un backup
Puoi copiare un backup del tuo database Spanner da un'istanza a un'altra in una regione o un progetto diverso. Per impostazione predefinita, un backup copiato utilizza la stessa configurazione di crittografia, gestita da Google o dal cliente, della crittografia del backup di origine. Puoi ignorare questo comportamento specificando una configurazione di crittografia diversa durante la copia del backup. Se vuoi che il backup copiato venga criptato con CMEK durante la copia tra regioni, specifica le chiavi Cloud KMS corrispondenti alle regioni di destinazione.
Console
Utilizza la console per copiare un backup in una configurazione dell'istanza a livello di regione.
Nella console Google Cloud , vai alla pagina Istanze.
Fai clic sul nome dell'istanza contenente il database di cui vuoi eseguire il backup.
Fai clic sul database.
Nel riquadro di navigazione, fai clic su Backup/Ripristino.
Nella tabella Backup, seleziona Azioni per il backup e fai clic su Copia.
Compila il modulo scegliendo un'istanza di destinazione, fornendo un nome e selezionando una data di scadenza per la copia di backup.
(Facoltativo) Se vuoi utilizzare una configurazione di crittografia diversa per il backup, fai clic su Mostra opzioni di crittografia.
a. Seleziona Chiave Cloud KMS.
a. Seleziona una chiave dall'elenco a discesa.
L'elenco delle chiavi è limitato al progetto Google Cloud corrente. Per utilizzare una chiave di un altro progetto Google Cloud , crea il database utilizzando gcloud CLI anziché la console Google Cloud .
Fai clic su Copia.
gcloud
Per copiare un backup, con una nuova configurazione di crittografia, in un'istanza diversa nello stesso progetto, esegui il seguente comando gcloud spanner backups copy
:
gcloud spanner backups copy --async \
--source-instance=INSTANCE_ID \
--source-backup=SOURCE_BACKUP_NAME \
--destination-instance=DESTINATION_INSTANCE_ID \
--destination-backup=DESTINATION_BACKUP_NAME \
--expiration-date=EXPIRATION_DATE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
Per copiare un backup, con una nuova configurazione di crittografia, in un'istanza diversa
in un progetto diverso, esegui il seguente comando gcloud spanner backups copy
:
gcloud spanner backups copy --async \
--source-backup=SOURCE_BACKUP_NAME \
--destination-backup=DESTINATION_BACKUP_NAME \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
Per verificare che il backup copiato sia criptato con CMEK:
gcloud spanner backups describe BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Librerie client
C#
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
C++
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
Vai
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
Java
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
Node.js
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
PHP
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
Python
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
Ruby
Per copiare un backup abilitato CMEK in una configurazione di istanze multiregione:
Ripristina da un backup
Puoi ripristinare un backup di un database Spanner in un nuovo database. Per impostazione predefinita, i database che vengono ripristinati da un backup utilizzano la stessa configurazione di crittografia del backup stesso, ma puoi eseguire l'override di questo comportamento specificando una configurazione di crittografia diversa per il database ripristinato. Se il backup è protetto da CMEK, la versione della chiave utilizzata per crearlo deve essere disponibile per poter essere decriptata.
Console
Utilizza la console per ripristinare un backup in una configurazione dell'istanza regionale.
Nella console Google Cloud , vai alla pagina Istanze.
Fai clic sull'istanza contenente il database che vuoi ripristinare.
Fai clic sul database.
Nel riquadro di navigazione, fai clic su Backup/Ripristino.
Nella tabella Backup, seleziona Azioni per il backup e fai clic su Ripristina.
Seleziona l'istanza da ripristinare e assegna un nome al database ripristinato.
(Facoltativo) Se vuoi utilizzare una configurazione di crittografia diversa con il database ripristinato, fai clic sul cursore accanto a Utilizza crittografia esistente.
a. Seleziona Chiave Cloud KMS.
a. Seleziona una chiave dall'elenco a discesa.
L'elenco delle chiavi è limitato al progetto Google Cloud corrente. Per utilizzare una chiave di un altro progetto Google Cloud , crea il database utilizzando gcloud CLI anziché la console Google Cloud .
Fai clic su Ripristina.
gcloud
Per ripristinare un backup con una nuova configurazione di crittografia, esegui il seguente
gcloud spanner databases restore
comando:
gcloud spanner databases restore --async \
--project=SPANNER_PROJECT_ID \
--destination-instance=DESTINATION_INSTANCE_ID \
--destination-database=DESTINATION_DATABASE_ID \
--source-instance=SOURCE_INSTANCE_ID \
--source-backup=SOURCE_BACKUP_NAME
Per verificare che il database ripristinato sia criptato con CMEK:
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Per ulteriori informazioni, vedi Ripristinare da un backup.
Librerie client
C#
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
C++
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Vai
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Java
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Node.js
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza regionale:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
PHP
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Python
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Ruby
Per ripristinare un backup abilitato per CMEK in una configurazione dell'istanza a livello di regione:
Per ripristinare un backup abilitato per CMEK in una configurazione di istanze multiregione:
Visualizza gli audit log per la chiave Cloud KMS
Assicurati che il logging sia abilitato per l'API Cloud KMS nel tuo progetto.
Nella console Google Cloud , vai a Esplora log.
Limita le voci di log alla tua chiave Cloud KMS aggiungendo le seguenti linee al Query Builder:
resource.type="cloudkms_cryptokey" resource.labels.location="KMS_KEY_LOCATION" resource.labels.key_ring_id="KMS_KEY_RING_ID" resource.labels.crypto_key_id="KMS_KEY_ID"
In condizioni normali, le azioni di crittografia e decrittografia vengono registrate con la gravità
INFO
. Queste voci vengono registrate quando le zone dell'istanza Spanner eseguono il polling della chiave Cloud KMS ogni circa cinque minuti.Se Spanner non riesce ad accedere alla chiave, le operazioni vengono registrate come
ERROR
.