Questa pagina descrive come eseguire attività relative alle chiavi di crittografia gestite dal cliente (CMEK) per Cloud Firestore. Per saperne di più sulle CMEK in generale, incluso quando e perché attivarle, consulta la documentazione di Cloud KMS.
Prepara le chiavi CMEK
Prima di poter creare un database Cloud Firestore protetto da CMEK, devi completare i seguenti passaggi:
- Richiedi l'accesso alla funzionalità CMEK di Cloud Firestore.
- Crea (o recupera) un agente di servizio Cloud Firestore.
- Crea una chiave CMEK.
- Configura le impostazioni IAM per la chiave.
Completa questi passaggi per ogni progetto che conterrà database Cloud Firestore protetti da CMEK. Se in un secondo momento crei una nuova chiave CMEK, devi configurare le impostazioni IAM per quella chiave.
Richiedi l’accesso
Prima di creare un agente di servizio Cloud Firestore, richiedi l'accesso alla funzionalità CMEK compilando questo modulo.
Crea un agente di servizio Cloud Firestore
Prima di creare una chiave CMEK, devi avere un agente di servizio Cloud Firestore, ovvero un tipo di service account gestito da Google che Cloud Firestore utilizza per accedere alla chiave.
Esegui il comando services identity create per creare l'agente di servizio utilizzato da Cloud Firestore 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=firestore.googleapis.com \
--project FIRESTORE_PROJECT
Sostituisci FIRESTORE_PROJECT con il progetto che prevedi di utilizzare per i database Cloud Firestore.
Il comando visualizza l'ID dell'agente di servizio, che è formattato come un indirizzo email. Registra la stringa email di output, perché la utilizzerai in un passaggio successivo.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
Crea una chiave
Puoi utilizzare una chiave creata direttamente in Cloud KMS o una chiave gestita esternamente che rendi disponibile con Cloud External Key Manager.
La località della chiave Cloud KMS deve essere la stessa del database Cloud Firestore con cui verrà utilizzata.
Per le località dei database a livello di regione, utilizza lo stesso nome della località per chiavi automatizzate, chiave e database, perché i nomi delle località hanno una mappatura uno a uno.
Ad esempio, se vuoi creare un database protetto da CMEK in
us-west1, crea una chiave automatizzata e una chiave inus-west1.Per le località dei database multiregionali, utilizza il nome della località multiregionale di KMS:
- Utilizza la località multiregionale Cloud KMS
usper la località multiregionalenam5Cloud Firestore. - Utilizza la località multiregionale Cloud KMS
europeper la località multiregionaleeur3Cloud Firestore.
- Utilizza la località multiregionale Cloud KMS
Nel progetto Google Cloud in cui vuoi gestire le chiavi, completa i seguenti passaggi:
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 renderla disponibile tramite Cloud KMS.
Configura le impostazioni IAM per la chiave
Console
Per concedere un ruolo Cloud KMS al tuo agente di servizio, segui questi passaggi. Puoi anche concedere l'autorizzazione a livello di chiave o di chiavi automatizzate se vuoi una granularità inferiore.
Nella console Google Cloud, vai alla pagina IAM.
Fai clic su Aggiungi.
Inserisci l'ID in formato email per l'agente di servizio Cloud Firestore.
Seleziona il ruolo Cloud KMS CryptoKey Encrypter/Decrypter.
Fai clic su Salva.
gcloud
Concedi il ruolo cloudkms.cryptoKeyEncrypterDecrypter al tuo
service agent:
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
Sostituisci quanto segue:
KMS_KEYcon il nome che hai assegnato alla chiaveKMS_KEYRINGcon il keyring KMS che contiene la chiaveKMS_LOCATIONcon la regione che contiene le chiavi automatizzateSERVICE_AGENT_EMAILcon l'identificatore in formato email dell'agente di servizio a cui stai concedendo l'accessoKMS_PROJECTcon il progetto che contiene la chiave
Il terminale dovrebbe visualizzare una risposta simile alla seguente:
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
Crea un database abilitato per CMEK
Dopo aver creato e configurato le chiavi CMEK, puoi creare un database protetto da CMEK. I database Cloud Firestore esistenti protetti dalla crittografia predefinita di Google non possono essere convertiti per l'utilizzo di CMEK.
Puoi scegliere un tipo di crittografia e una chiave solo quando crei un database abilitato per CMEK.
Console
Nella console Google Cloud, vai alla pagina Database.
Fai clic su Crea database.
Seleziona la modalità del database. Fai clic su Continua.
Nella pagina Configura il database, inserisci un ID database.
Seleziona una località.
Fai clic su Mostra opzioni di crittografia, quindi seleziona Chiave Cloud KMS.
Seleziona o inserisci il nome risorsa della chiave CMEK che vuoi utilizzare per il database.
L'elenco delle chiavi è limitato al progetto Google Cloud corrente e alla località del database che hai selezionato. Per utilizzare una chiave di un altro progetto Google Cloud, fai clic su Cambia progetto o Inserisci chiave manualmente.
Se ti viene chiesto di concedere l'autorizzazione per la chiave al service account Cloud Firestore, fai clic su Concedi. Per creare un database CMEK, al tuo service account Cloud Firestore deve essere concesso il ruolo
cloudkms.cryptoKeyEncrypterDecrypter.Seleziona le regole di sicurezza per i client web e mobile.
Fai clic su Crea database.
Una volta creato il database, puoi verificare che sia abilitato per CMEK visualizzando i Dettagli del database:
- Se il database è protetto da CMEK, il campo Tipo di crittografia viene visualizzato come Gestito dal cliente e il campo Chiave di crittografia elenca la chiave Cloud KMS corrispondente e la versione della chiave utilizzata per proteggere il database.
- Se il database non è protetto da CMEK, il campo Tipo di crittografia viene visualizzato come Gestito da Google.
gcloud
Prima di creare un database abilitato per CMEK con Google Cloud CLI, installa l'ultima versione e autorizza gcloud CLI. Per saperne di più, consulta Installa gcloud CLI.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
Sostituisci quanto segue:
FIRESTORE_DATABASE_LOCATIONcon la località Cloud Firestore del databaseDATABASE_IDcon un ID per il databaseKMS_KEY_NAMEcon il nome che hai assegnato alla chiave. Utilizza il nome completo della risorsa per la chiave nel seguente formato:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_IDFIRESTORE_PROJECTcon il progetto da utilizzare per il tuo database Cloud Firestore
API REST
Richiesta HTTP:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
Nel corpo della richiesta, configura CMEK nel campo cmek_config.kms_key_name.
Impostato sull'ID risorsa completo di una chiave Cloud KMS. È consentita solo una chiave nella stessa località di questo database.
Questo valore deve essere l'ID risorsa della chiave Cloud KMS nel formato projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
Per ulteriori informazioni sugli altri campi, consulta la pagina database create.
Esempio di richiesta:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
Interfaccia a riga di comando di Firebase
Per creare un database abilitato per CMEK, utilizza il campo Nome chiave KMS. Se non specifichi il parametro --kms-key-name, Cloud Firestore crea un database non CMEK per impostazione predefinita.
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
Sostituisci quanto segue:
DATABASE_IDcon l'ID del tuo databaseLOCATIONcon la località del tuo databaseKMS_PROJECTcon il progetto che contiene la chiave CMEKKMS_LOCATIONcon la località che contiene la chiave CMEK e le chiavi automatizzateKMS_KEYRING_IDcon l'ID delle chiavi automatizzate CMEKFIRESTORE_PROJECTcon il progetto da utilizzare per il tuo database Cloud Firestore
Verifica che il tuo database Cloud Firestore sia protetto con l'interfaccia a riga di comando di Firebase:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Nel messaggio di risposta vengono visualizzate le seguenti informazioni sulla CMEK:
- Il campo Nome chiave KMS fornisce il nome completo della risorsa chiave utilizzato per criptare il database CMEK Cloud Firestore.
- Il campo Versioni delle chiavi attive fornisce un elenco di tutte le versioni delle chiavi attualmente utilizzate da questo database CMEK. Durante la rotazione delle chiavi, puoi avere più versioni di chiavi attive.
Terraform
Per creare un database abilitato per CMEK, utilizza la risorsa google_firestore_database. Per ulteriori informazioni ed esempi, consulta la sezione
google_firestore_database.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
Sostituisci quanto segue:
FIRESTORE_PROJECTcon il progetto da utilizzare per il tuo database Cloud FirestoreDATABASE_IDcon un ID per il databaseFIRESTORE_DATABASE_LOCATIONcon la località Cloud Firestore del databaseDATABASE_TYPEconFIRESTORE_NATIVEper la modalità Native oDATASTORE_MODEper la modalità Datastore.KMS_KEY_NAMEcon il nome che hai assegnato alla chiave. Utilizza il nome completo della risorsa per la chiave nel formato:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Accedi a un database protetto da CMEK
Tutte le operazioni di lettura, scrittura e query inviate a un database protetto da CMEK dovrebbero funzionare allo stesso modo di un database criptato predefinito di Google. Ad esempio, non è necessario fornire una chiave per ogni richiesta.
Ripristina un database protetto da CMEK
Prima di ripristinare un database protetto da CMEK da un backup:
- Decidi se vuoi ripristinare il database con la crittografia CMEK, con la crittografia predefinita di Google (non CMEK) o con la stessa crittografia del backup.
Prepara la chiave (versione principale) e la versione della chiave che hai utilizzato per criptare il backup. Abilita sia la chiave sia la versione della chiave.
gcloud
Ripristina un database protetto da CMEK con crittografia CMEK
Per ripristinare la crittografia CMEK, esegui il comando gcloud firestore databases restore con i flag facoltativi encryption-type e kms-key-name per configurare il tipo di crittografia per il database ripristinato. Se non specifichi il tipo di crittografia, il database ripristinato utilizzerà la stessa configurazione di crittografia del backup.
gcloud firestore databases restore
--encryption-type=customer-managed-encryption
--kms-key-name=KMS_KEY_NAME
Sostituisci KMS_KEY_NAME con il nome che hai assegnato alla chiave. Utilizza il nome completo della risorsa per la chiave nel seguente formato:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Ripristina un database protetto da CMEK alla crittografia predefinita
Per ripristinare la crittografia predefinita di Google (non CMEK), imposta il flag encryption-type nel seguente modo:
gcloud firestore databases restore
--encryption-type=google-default-encryption
Ripristina un database protetto da CMEK con lo stesso tipo di crittografia del backup
Per eseguire il ripristino con lo stesso tipo di crittografia del backup, imposta il flag encryption-type nel seguente modo:
gcloud firestore databases restore --encryption-type=use-source-encryption
Interfaccia a riga di comando di Firebase
Ripristina un database protetto da CMEK con crittografia CMEK
Per eseguire il ripristino con la crittografia CMEK, utilizza i flag facoltativi encryption-type e kms-key-name.
Se non specifichi il tipo di crittografia, il database ripristinato utilizzerà la stessa configurazione di crittografia del backup.
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
Sostituisci quanto segue:
DATABASE_IDcon l'ID del tuo databaseFIRESTORE_PROJECTcon il progetto da utilizzare per il tuo database Cloud FirestoreFIRESTORE_LOCATIONcon la località del tuo database Cloud FirestoreBACKUP_ID: l'ID del backupKMS_PROJECTcon il progetto che contiene la chiave CMEKKMS_LOCATIONcon la località che contiene la chiave CMEK e le chiavi automatizzateKMS_KEYRING_IDcon l'ID delle chiavi automatizzate CMEK
Verifica che il database Cloud Firestore ripristinato sia criptato con CMEK:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
Ripristina un database protetto da CMEK alla crittografia predefinita
Per ripristinare la crittografia predefinita di Google (non CMEK), imposta il flag encryption-type nel seguente modo:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
Sostituisci quanto segue:
DATABASE_IDcon l'ID del tuo databaseFIRESTORE_PROJECTcon il progetto da utilizzare per il tuo database Cloud FirestoreFIRESTORE_LOCATIONcon la località del tuo database Cloud FirestoreBACKUP_ID: l'ID del backup
Ripristina un database protetto da CMEK con lo stesso tipo di crittografia del backup
Per eseguire il ripristino con lo stesso tipo di crittografia del backup, imposta il flag encryption-type nel seguente modo:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
Sostituisci quanto segue:
DATABASE_IDcon l'ID del tuo databaseFIRESTORE_PROJECTcon il progetto da utilizzare per il tuo database Cloud FirestoreFIRESTORE_LOCATIONcon la località del tuo database Cloud FirestoreBACKUP_ID: l'ID del backup
Clona un database protetto da CMEK
Prima di clonare un database protetto da CMEK:
- Decidi se vuoi clonare il database con la crittografia CMEK, con la crittografia predefinita di Google (non CMEK) o con la stessa crittografia del database di origine.
Prepara la chiave (versione principale) e la versione della chiave che hai utilizzato per criptare il database di origine. Abilita sia la chiave sia la versione della chiave.
gcloud
Clona un database protetto da CMEK nella crittografia CMEK
Per clonare con la crittografia CMEK, esegui il comando gcloud firestore databases clone con i flag facoltativi encryption-type e kms-key-name per configurare il tipo di crittografia per il database clonato. Se non specifichi il tipo di crittografia, il database clonato utilizzerà la stessa configurazione di crittografia del database di origine.
gcloud firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
Sostituisci KMS_KEY_NAME con il nome che hai assegnato alla chiave. Utilizza il nome completo della risorsa per la chiave nel seguente formato:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Clona un database protetto da CMEK nella crittografia predefinita
Per clonare con la crittografia predefinita di Google (non CMEK), imposta il flag encryption-type nel seguente modo:
gcloud firestore databases clone \
--encryption-type=google-default-encryption
Clona un database protetto da CMEK con lo stesso tipo di crittografia del database di origine
Per clonare lo stesso tipo di crittografia del database di origine, imposta il flag encryption-type nel seguente modo:
gcloud firestore databases clone \
--encryption-type=use-source-encryption
Questo è anche il comportamento predefinito se --encryption-type non è specificato.
Interfaccia a riga di comando di Firebase
Clona un database protetto da CMEK nella crittografia CMEK
Per clonare con la crittografia CMEK, esegui il comando firebase firestore:databases:clone con i flag facoltativi encryption-type e kms-key-name per configurare il tipo di crittografia per il database clonato. Se non specifichi il tipo di crittografia, il database clonato utilizzerà la stessa configurazione di crittografia del database di origine.
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name=KMS_KEY_NAME
Sostituisci KMS_KEY_NAME con il nome che hai assegnato alla chiave. Utilizza il nome completo della risorsa per la chiave nel seguente formato:
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
Clona un database protetto da CMEK nella crittografia predefinita
Per clonare con la crittografia predefinita di Google (non CMEK), imposta il flag encryption-type nel seguente modo:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
Clona un database protetto da CMEK con lo stesso tipo di crittografia del database di origine
Per clonare lo stesso tipo di crittografia del database di origine, imposta il flag encryption-type nel seguente modo:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
Questo è anche il comportamento predefinito se --encryption-type non è specificato.
Visualizza la chiave in uso
gcloud
Puoi utilizzare il comando databases describe gcloud CLI per confermare la configurazione CMEK del database:
gcloud firestore databases describe --database=DATABASE_ID --project=FIRESTORE_PROJECT
Nella risposta dovresti vedere le informazioni CMEK nel campo cmekConfig,
simili alle seguenti:
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
La risposta include le seguenti informazioni:
kmsKeyName: il nome completo della risorsa della chiave utilizzata per criptare il database protetto da CMEK.activeKeyVersion: un elenco di tutte le versioni delle chiavi attualmente in uso dal database protetto da CMEK. Durante la rotazione delle chiavi, puoi avere più versioni di chiavi attive. Sia la versione precedente della chiave sia quella nuova devono essere disponibili durante la rotazione delle chiavi. Non disattivare la versione precedente della chiave finché non viene più visualizzata nel campoactiveKeyVersion.
API REST
Richiesta HTTP:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
Nel corpo della richiesta, configura CMEK nel campo cmek_config.kms_key_name.
Impostato sull'ID risorsa completo di una chiave Cloud KMS. È consentita solo una chiave nella stessa località di questo database.
Questo valore deve essere l'ID risorsa della chiave Cloud KMS nel formato projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
Per ulteriori informazioni sugli altri campi, consulta la pagina database create.
Esempio di richiesta e risposta:
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
—----------------------------------------- Response —--------------------------------------------
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
……
}
Disattiva una chiave
Per disabilitare una chiave associata a un database, completa i seguenti passaggi:
- Visualizza le versioni delle chiavi in uso per un database.
- Disattiva queste versioni della chiave in uso.
- Attendi che la modifica diventi effettiva e verifica se i dati non sono più accessibili. In genere l'applicazione delle modifiche richiede pochi minuti, ma in alcuni casi potrebbe essere necessario attendere fino a 3 ore.
Quando una chiave utilizzata da un database viene disattivata, aspettati di ricevere un'eccezione FAILED_PRECONDITION con dettagli aggiuntivi nel messaggio di errore, ad esempio:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
Abilita una chiave
Per riattivare una chiave associata a un database, completa i seguenti passaggi:
- Visualizza le versioni principali in uso per un database
- Abilita queste versioni chiave in uso
- Attendi che la modifica diventi effettiva e verifica se i dati non sono più accessibili. In genere l'applicazione delle modifiche richiede pochi minuti, ma in alcuni casi potrebbe essere necessario attendere fino a 3 ore.
Visualizza gli audit log per una chiave Cloud KMS
Prima di abilitare gli audit log di controllo dell'accesso ai dati di Cloud KMS, devi avere familiarità con Cloud Audit Logs.
Gli audit log di accesso ai dati di Cloud KMS mostrano quando Cloud Firestore o qualsiasi altro prodotto configurato per utilizzare la tua chiave CMEK effettua chiamate di crittografia/decrittografia a Cloud KMS. Cloud Firestore 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 negli audit log.
Puoi configurare e interagire con gli audit log nella console Google 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 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 resource.labels.location=KMS_LOCATIONSostituisci quanto segue:
KMS_KEYcon il nome della chiave CMEKKMS_KEYRINGcon il keyring KMS che contiene la chiaveKMS_LOCATIONcon la località della chiave e delle chiavi automatizzate
Il log mostra un paio di voci di log ogni cinque minuti circa per database. 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/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
Per informazioni dettagliate sull'interpretazione degli audit log, consulta Informazioni sugli audit log.
Configura una policy dell'organizzazione per le CMEK
Per specificare i requisiti di conformità della crittografia per i database Cloud Firestore della tua organizzazione, utilizza un vincolo della policy dell'organizzazione CMEK.
Richiedi protezione CMEK
Configura constraints/gcp.restrictNonCmekServices in modo che richieda CMEK per la creazione del database Cloud Firestore. Imposta il vincolo su deny e aggiungi firestore.googleapis.com alla lista bloccata, ad esempio:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
Sostituisci FIRESTORE_PROJECT con il progetto da limitare.
Per scoprire di più sulla configurazione delle policy dell'organizzazione, consulta Creazione e modifica delle policy.
Dopo l'applicazione della policy, se provi a creare un database non CMEK nel progetto interessato, riceverai un'eccezione FAILED_PRECONDITION e un messaggio di errore. Ad esempio, un'eccezione è simile alla seguente:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictNonCmekServices", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ]
Limita l'utilizzo delle chiavi per CMEK
Per limitare le chiavi Cloud KMS utilizzate per la protezione CMEK, configura il vincolo constraints/gcp.restrictCmekCryptoKeyProjects.
Come vincolo dell'elenco, i valori accettati sono gli indicatori della gerarchia delle risorse (ad esempio projects/PROJECT_ID, under:folders/FOLDER_ID e under:organizations/ORGANIZATION_ID). Utilizza questo vincolo configurando un elenco di indicatori della gerarchia delle risorse e impostando il vincolo su Consenti.
Questa configurazione limita i servizi supportati in modo che le chiavi CMEK possano essere scelte solo dai progetti, dalle cartelle e dalle organizzazioni elencati. Le richieste di creazione di risorse protette da CMEK nei servizi configurati non vanno a buon fine senza una chiave Cloud Firestore di una delle risorse consentite.
L'esempio seguente consente solo le chiavi di ALLOWED_KEY_PROJECT_ID per i database protetti da CMEK nel progetto specificato:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
Dopo l'applicazione della policy, riceverai un'eccezione FAILED_PRECONDITION
e un messaggio di errore se violi il vincolo. Un'eccezione ha il seguente aspetto:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictCmekCryptoKeyProjects", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ] } ] } }