Questa guida descrive l'utilizzo di CMEK per Dataform e ti illustra come abilitare la crittografia CMEK dei repository Dataform.
Per impostazione predefinita, Dataform cripta i contenuti inattivi dei clienti. Dataform gestisce la crittografia per conto tuo senza che tu debba fare altro. Questa opzione è denominata Crittografia predefinita di Google.
Se vuoi controllare le tue chiavi di crittografia, puoi utilizzare le chiavi di crittografia gestite dal cliente (CMEK) in Cloud KMS con i servizi integrati con CMEK, incluso Dataform. L'utilizzo delle chiavi Cloud KMS ti consente di controllare il livello di protezione, la posizione, la pianificazione della rotazione, l'utilizzo e le autorizzazioni di accesso e i limiti crittografici. L'utilizzo di Cloud KMS ti consente anche di monitorare l'utilizzo delle chiavi, visualizzare i log di controllo e controllare i cicli di vita delle chiavi. Anziché essere di proprietà di Google e gestite da Google, le chiavi di crittografia delle chiavi (KEK) simmetriche che proteggono i tuoi dati sono controllate e gestite da te in Cloud KMS.
Dopo aver configurato le risorse con le chiavi CMEK, l'esperienza di accesso alle risorse Dataform è simile all'utilizzo della crittografia predefinita di Google. Per saperne di più sulle opzioni di crittografia, consulta Chiavi di crittografia gestite dal cliente (CMEK).
Crittografia CMEK dei dati del repository
Quando applichi la crittografia CMEK a un repository Dataform, tutti i dati dei clienti gestiti da Dataform in quel repository vengono criptati at-rest utilizzando il set di chiavi di protezione CMEK impostato per il repository. Questi dati includono:
- Contenuti del repository Git del repository Dataform e dei relativi workspace
- Query SQL compilate ed errori di compilazione
- Query SQL archiviate delle azioni del flusso di lavoro
- Dettagli dell'errore delle azioni del flusso di lavoro eseguite
Dataform utilizza chiavi di protezione CMEK nei seguenti scenari:
- Durante ogni operazione che richiede la decrittografia dei dati dei clienti archiviati inattivi.
Queste operazioni includono, a titolo esemplificativo:
- Risposte a una query dell'utente, ad esempio
compilationResults.query
. - Creazione di risorse Dataform che richiedono dati del repository criptati creati in precedenza, ad esempio invocazioni di workflow.
- Operazioni Git per aggiornare il repository remoto, ad esempio l'invio di un commit Git.
- Risposte a una query dell'utente, ad esempio
- Durante ogni operazione che richiede l'archiviazione dei dati dei clienti inattivi.
Queste operazioni includono, a titolo esemplificativo:
- Risposte a una query dell'utente, ad esempio
compilationResults.create
. - Operazioni Git in uno spazio di lavoro, ad esempio il pull di un commit Git.
- Risposte a una query dell'utente, ad esempio
Dataform gestisce la crittografia dei dati dei clienti associati solo alle risorse Dataform. Dataform non gestisce la crittografia dei dati dei clienti creati in BigQuery tramite l'esecuzione dei workflow Dataform. Per criptare i dati creati e archiviati in BigQuery, configura CMEK per BigQuery.
Chiavi supportate
Dataform supporta i seguenti tipi di chiavi CMEK:
- Chiavi software Cloud KMS
- Chiavi Cloud Hardware Security Module (HSM)
- Chiavi Cloud External Key Manager (Cloud EKM)
La disponibilità delle chiavi varia in base al tipo di chiave e alla regione. Per ulteriori informazioni sulla disponibilità geografica delle chiavi CMEK, consulta Località Cloud KMS.
Limitazioni
Dataform supporta CMEK con le seguenti limitazioni:
- La dimensione massima di un repository criptato con CMEK è 512 MB.
- La dimensione massima di uno spazio di lavoro in un repository criptato con CMEK è 512 MB.
- Non puoi applicare una chiave di protezione CMEK a un repository dopo la sua creazione. Puoi applicare la crittografia CMEK solo durante la creazione del repository.
- Non puoi rimuovere una chiave di protezione CMEK da un repository.
- Non puoi modificare una chiave di protezione CMEK per un repository.
- Se imposti una chiave CMEK Dataform predefinita per il tuo Google Cloud progetto, tutti i nuovi repository creati nella posizione del Google Cloud progetto devono essere criptati con CMEK. Quando crei un nuovo repository nella posizione del progetto Google Cloud , puoi applicare la chiave CMEK predefinita di Dataform o una chiave CMEK diversa, ma non puoi applicare la crittografia at-rest predefinita.
- Se modifichi il valore di una chiave CMEK Dataform predefinita, il valore precedente si applica ai repository preesistenti e il valore aggiornato si applica ai repository creati dopo la modifica.
- Puoi impostare una sola chiave CMEK Dataform predefinita per posizione dei repository di progetti Google Cloud .
- Le policy dell'organizzazione CMEK non sono disponibili.
- L'utilizzo delle chiavi Cloud HSM e Cloud EKM è soggetto a disponibilità. Per ulteriori informazioni sulla disponibilità delle chiavi nelle varie località, consulta Località Cloud KMS.
Quote Cloud KMS e Dataform
Puoi utilizzare le chiavi Cloud HSM e Cloud EKM con Dataform. Quando utilizzi CMEK in Dataform, i tuoi progetti possono consumare le quote per le richieste crittografiche di Cloud KMS. Ad esempio, i repository Dataform criptati con CMEK possono utilizzare queste quote per ogni modifica ai contenuti del repository. Le operazioni di crittografia e decrittografia che utilizzano chiavi CMEK influiscono sulle quote di Cloud KMS solo se utilizzi chiavi hardware (Cloud HSM) o esterne (Cloud EKM). Per ulteriori informazioni, consulta Quote di Cloud KMS.
Gestione delle chiavi
Utilizza Cloud KMS per tutte le operazioni di gestione delle chiavi. Dataform non può rilevare o agire in base alle modifiche alle chiavi finché non vengono propagate da Cloud KMS. Alcune operazioni, come la disattivazione o l'eliminazione di una chiave, possono richiedere fino a tre ore per la propagazione. Le modifiche alle autorizzazioni in genere vengono propagate molto più rapidamente.
Dopo la creazione del repository, Dataform chiama Cloud KMS per assicurarsi che la chiave sia ancora valida durante ogni operazione sui dati del repository criptati.
Se Dataform rileva che la chiave Cloud KMS è stata disattivata o eliminata, tutti i dati archiviati nel repository corrispondente diventano inaccessibili.
Se le chiamate di Dataform a Cloud KMS rilevano che una chiave precedentemente disabilitata è stata riattivata, Dataform ripristina automaticamente l'accesso.
Utilizzare chiavi esterne con Cloud EKM
In alternativa all'utilizzo di chiavi che risiedono su Cloud KMS, puoi utilizzare chiavi che risiedono presso un partner di gestione delle chiavi esterne supportato. Per farlo, utilizza Cloud External Key Manager (Cloud EKM) per creare e gestire chiavi esterne, che sono puntatori a chiavi che si trovano al di fuori di Google Cloud. Per saperne di più, consulta la pagina Cloud External Key Manager.
Dopo aver creato una chiave esterna con Cloud EKM, puoi applicarla a un nuovo repository Dataform fornendo l'ID della chiave durante la creazione del repository. Questa procedura è identica all'applicazione di una chiave Cloud KMS a un nuovo repository.
Utilizzare le chiavi CMEK predefinite di Dataform
Per criptare più repository Dataform con la stessa chiave CMEK, puoi impostare una chiave CMEK Dataform predefinita per il tuo progetto Google Cloud . Devi specificare la posizione del progetto Google Cloud per la chiave CMEK Dataform predefinita. Puoi impostare una sola chiave CMEK predefinita per progetto Google Cloud .
Dopo aver impostato una chiave CMEK Dataform predefinita, Dataform applica la chiave a tutti i nuovi repository creati nella località del progetto Google Cloud per impostazione predefinita. Quando crei un repository, puoi utilizzare la chiave predefinita o selezionare una chiave CMEK diversa.
Come viene gestito uno stato della chiave non disponibile
In rari scenari, ad esempio durante i periodi in cui Cloud KMS non è disponibile, Dataform potrebbe non essere in grado di recuperare lo stato della chiave da Cloud KMS.
Se il repository Dataform è protetto da una chiave abilitata nel momento in cui Dataform non è in grado di comunicare con Cloud KMS, i dati del repository criptati diventano inaccessibili.
I dati del repository criptati rimangono inaccessibili finché Dataform non riesce a riconnettersi a Cloud KMS e Cloud KMS non risponde che la chiave è attiva.
Al contrario, se il repository Dataform è protetto da una chiave disattivata nel momento in cui Dataform non riesce più a comunicare con Cloud KMS, i dati del repository criptati rimangono inaccessibili finché non è possibile riconnettersi a Cloud KMS e non hai riattivato la chiave.
Logging
Puoi controllare le richieste che Dataform invia a Cloud KMS per tuo conto in Cloud Logging, se hai abilitato il logging di controllo per l'API Cloud KMS nel tuo progetto. Queste voci di log di Cloud KMS sono visibili in Cloud Logging. Per ulteriori informazioni, consulta Visualizzare i log.
Prima di iniziare
Decidi se eseguire Dataform e Cloud KMS in progetti diversi o nello stesso progetto. Ti consigliamo di utilizzare progetti separati per un maggiore controllo sulle autorizzazioni. Per informazioni sugli ID progetto e sui numeri di progetto Google Cloud , consulta Identificazione dei progetti.
Per il progetto Google Cloud che esegue Cloud KMS:
- Abilita l'API Cloud Key Management Service.
- Crea un keyring e una chiave come descritto in
Creazione di chiavi automatizzate e chiavi. Crea il portachiavi
in una località corrispondente a quella del repository
Dataform:
-
I repository devono utilizzare chiavi regionali corrispondenti. Ad esempio,
un repository nella regione
asia-northeast3
deve essere protetto con una chiave di un keyring che si trova inasia-northeast3
. -
La regione
global
non può essere utilizzata con Dataform.
-
I repository devono utilizzare chiavi regionali corrispondenti. Ad esempio,
un repository nella regione
Attivare CMEK
Dataform può accedere alla chiave per tuo conto dopo che hai concesso il ruolo
Autore crittografia/decrittografia CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
)
di Cloud KMS all'account di servizio Dataform predefinito.
L'ID del account di servizio Dataform predefinito ha il seguente formato:
service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com
Per concedere il ruolo Autore crittografia/decrittografia CryptoKey al account di servizio Dataform predefinito, segui questi passaggi:
Console
Apri la pagina Key Management nella console Google Cloud .
Fai clic sul nome della chiave automatizzata che contiene la chiave.
Fai clic sulla casella di controllo della chiave di crittografia a cui vuoi aggiungere il ruolo. Si apre la scheda Autorizzazioni.
Fai clic su Aggiungi membro.
Inserisci l'indirizzo email del account di servizio.
- Se il account di servizio è già presente nell'elenco dei membri, dispone di ruoli esistenti. Fai clic sull'elenco a discesa del ruolo attuale per l'account di servizio.
Fai clic sull'elenco a discesa Seleziona un ruolo, fai clic su Cloud KMS e poi sul ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS.
Fai clic su Salva per applicare il ruolo all'account di servizio.
gcloud
Puoi utilizzare Google Cloud CLI per assegnare il ruolo:
gcloud kms keys add-iam-policy-binding \ --project=KMS_PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --location=KMS_KEY_LOCATION \ --keyring=KMS_KEY_RING \ KMS_KEY
Sostituisci quanto segue:
KMS_PROJECT_ID
: l'ID del tuo progetto Google Cloud che esegue Cloud KMSSERVICE_ACCOUNT
: l'indirizzo email del account di servizio Dataform predefinitoKMS_KEY_LOCATION
: il nome della località della chiave Cloud KMSKMS_KEY_RING
: il nome del portachiavi della tua chiave Cloud KMSKMS_KEY
: il nome della chiave Cloud KMS
Applica una policy dell'organizzazione CMEK
Dataform è integrato con due vincoli dei criteri dell'organizzazione per contribuire a garantire l'utilizzo di CMEK in un'organizzazione:
constraints/gcp.restrictNonCmekServices
viene utilizzato per richiedere la protezione CMEK.constraints/gcp.restrictCmekCryptoKeyProjects
viene utilizzato per limitare le chiavi Cloud KMS utilizzate per la protezione CMEK.
Questa integrazione ti consente di specificare i seguenti requisiti di conformità alla crittografia per i repository Dataform nella tua organizzazione:
- Richiedere CMEK per tutti i nuovi repository Dataform
- Limitare le chiavi Cloud KMS per un progetto Dataform
Considerazioni sull'applicazione dei criteri dell'organizzazione
Prima di applicare qualsiasi policy dell'organizzazione CMEK, tieni presente quanto segue.
Prepararsi a un ritardo di propagazione
Dopo aver impostato o aggiornato una policy dell'organizzazione, l'applicazione della nuova policy può richiedere fino a 15 minuti.
Prendi in considerazione le risorse esistenti
Le risorse esistenti non sono soggette alle policy dell'organizzazione appena create. Ad esempio, una policy dell'organizzazione non viene applicata retroattivamente ai repository esistenti. Queste risorse sono ancora accessibili senza una chiave CMEK e, se applicabile, sono ancora criptate con le chiavi esistenti.
Verificare le autorizzazioni richieste per impostare una policy dell'organizzazione
L'autorizzazione per impostare o aggiornare la policy dell'organizzazione potrebbe essere difficile da ottenere a scopo di test. Devi disporre del ruolo Amministratore policy dell'organizzazione, che può essere concesso solo a livello di organizzazione (anziché a livello di progetto o cartella).
Sebbene il ruolo debba essere concesso a livello di organizzazione, è comunque possibile specificare un criterio che si applichi solo a un progetto o a una cartella specifici.
Richiedi CMEK per tutti i nuovi repository Dataform
Puoi utilizzare il vincolo constraints/gcp.restrictNonCmekServices
per richiedere
che le chiavi CMEK vengano utilizzate per proteggere tutti i nuovi repository Dataform in
un'organizzazione.
Se impostato, questo criterio dell'organizzazione causa l'esito negativo di tutte le richieste di creazione di risorse senza una chiave Cloud KMS specificata.
Dopo aver impostato questo criterio, questo si applica solo ai nuovi repository del progetto. Tutti i repository esistenti senza chiavi Cloud KMS applicate continuano a esistere e sono accessibili senza problemi.
Console
Nella console Google Cloud , vai alla pagina Policy dell'organizzazione.
Utilizzando il filtro, cerca il seguente vincolo:
constraints/gcp.restrictNonCmekServices
Nella colonna Nome, fai clic su Limita i servizi che possono creare risorse senza CMEK.
Fai clic su
Gestisci criterio.Nella pagina Modifica policy, in Origine policy, seleziona Esegui override della policy dell'unità organizzativa principale.
In Regole, fai clic su Aggiungi una regola.
Nell'elenco Valori policy, seleziona Personalizzato.
Nell'elenco Tipo di criterio, seleziona Rifiuta.
Nel campo Valori personalizzati, inserisci quanto segue:
is:dataform.googleapis.com
Fai clic su Fine, quindi su Imposta policy.
gcloud
Crea un file temporaneo
/tmp/policy.yaml
per archiviare il criterio:name: projects/PROJECT_ID/policies/gcp.restrictNonCmekServices spec: rules: - values: deniedValues: - is:dataform.googleapis.com
Sostituisci
PROJECT_ID
con l'ID del progetto in cui stai applicando questo vincolo.Esegui il comando
org-policies set-policy
:gcloud org-policies set-policy /tmp/policy.yaml
Per verificare che la policy sia stata applicata correttamente, puoi provare a creare un repository Dataform nel progetto. Il processo non va a buon fine a meno che tu non specifichi una chiave Cloud KMS.
Limitare le chiavi Cloud KMS per un progetto Dataform
Puoi utilizzare il vincolo constraints/gcp.restrictCmekCryptoKeyProjects
per limitare le chiavi Cloud KMS che puoi utilizzare per proteggere un repository in un progetto Dataform.
Ad esempio, puoi specificare una regola simile alla seguente: "Per tutti i repository Dataform in projects/my-company-data-project
, le chiavi Cloud KMS utilizzate in questo progetto devono provenire da projects/my-company-central-keys
O projects/team-specific-keys
".
Console
Nella console Google Cloud , vai alla pagina Policy dell'organizzazione.
Utilizzando il filtro, cerca il seguente vincolo:
constraints/gcp.restrictCmekCryptoKeyProjects
Nella colonna Nome, fai clic su Limita i progetti che possono fornire CryptoKey KMS per CMEK.
Fai clic su
Gestisci criterio.Nella pagina Modifica policy, in Origine policy, seleziona Esegui override della policy dell'unità organizzativa principale.
In Regole, fai clic su Aggiungi una regola.
Nell'elenco Valori policy, seleziona Personalizzato.
Nell'elenco Tipo di policy, seleziona Consenti.
Nel campo Valori personalizzati, inserisci quanto segue:
under:projects/KMS_PROJECT_ID
Sostituisci
KMS_PROJECT_ID
con l'ID del progetto in cui si trovano le chiavi Cloud KMS che vuoi utilizzare.Ad esempio,
under:projects/my-kms-project
.Fai clic su Fine, quindi su Imposta policy.
gcloud
Crea un file temporaneo
/tmp/policy.yaml
per archiviare il criterio:name: projects/PROJECT_ID/policies/gcp.restrictCmekCryptoKeyProjects spec: rules: - values: allowedValues: - under:projects/KMS_PROJECT_ID
Sostituisci quanto segue
PROJECT_ID
: l'ID del progetto in cui stai applicando questo vincolo.KMS_PROJECT_ID
: l'ID del progetto in cui si trovano le chiavi Cloud KMS che vuoi utilizzare.
Esegui il comando
org-policies set-policy
:gcloud org-policies set-policy /tmp/policy.yaml
Per verificare che il criterio sia stato applicato correttamente, puoi provare a creare un repository Dataform utilizzando una chiave Cloud KMS di un progetto diverso. Il processo non andrà a buon fine.
Impostare una chiave CMEK Dataform predefinita
L'impostazione di una chiave CMEK Dataform predefinita per il tuo progetto Google Cloud ti consente di criptare più repository con la stessa chiave CMEK. Per ulteriori informazioni, vedi Utilizzare una chiave predefinita per i repository Dataform.
Per impostare o modificare una chiave CMEK predefinita, chiama l'API Dataform nella seguente richiesta:
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":"projects/PROJECT_ID/locations/PROJECT_LOCATION/keyRings/KMS_KEY_RING/cryptoKeys/KMS_KEY"}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Sostituisci quanto segue:
- KMS_KEY_RING: il nome del key ring della chiave Cloud KMS.
- KMS_KEY: il nome della chiave Cloud KMS.
- PROJECT_ID: l'ID del tuo Google Cloud progetto.
- PROJECT_LOCATION: il nome della località del tuo Google Cloud progetto.
Rimuovere una chiave CMEK Dataform predefinita
Per rimuovere una chiave CMEK Dataform predefinita dal tuo progetto Google Cloud , chiama l'API Dataform nella seguente richiesta:
curl -X PATCH \
-H "Content-Type: application/json" \
-d '{"defaultKmsKeyName":""}' \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Sostituisci quanto segue:
- PROJECT_ID: l'ID del tuo Google Cloud progetto.
- PROJECT_LOCATION: il nome della località del tuo progetto Google Cloud in cui vuoi annullare l'impostazione di CMEK predefinita.
Controlla se è impostata una chiave CMEK Dataform predefinita
Per verificare se è impostata una chiave CMEK Dataform predefinita per il tuo progetto Google Cloud , chiama l'API Dataform nella seguente richiesta:
curl -X GET \
-H "Content-Type: application/json" \
https://dataform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/PROJECT_LOCATION/config
Sostituisci quanto segue:
- PROJECT_ID: l'ID del tuo Google Cloud progetto.
- PROJECT_LOCATION: il nome della località del tuo Google Cloud progetto.
Applicare CMEK a un repository
Puoi applicare la protezione CMEK a un repository Dataform durante la creazione del repository.
Per applicare la crittografia CMEK a un repository Dataform, seleziona la crittografia con la chiave CMEK Dataform predefinita o specifica una chiave Cloud KMS univoca quando crei il repository. Per le istruzioni, vedi Creare un repository.
Non puoi modificare il meccanismo di crittografia di un repository Dataform dopo la creazione del repository.
Per ulteriori informazioni, vedi Limitazioni.
Passaggi successivi
- Per scoprire di più su CMEK, consulta la panoramica di CMEK.
- Per saperne di più sulle quote di Cloud KMS, consulta Quote di Cloud KMS.
- Per saperne di più sui prezzi di Cloud KMS, consulta la pagina Prezzi di Cloud KMS.
- Per scoprire di più sui repository Dataform, consulta Creare un repository.