Utilizzo delle chiavi di crittografia gestite dal cliente

Questa guida descrive l'utilizzo di CMEK per Dataform e illustra come attivare 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, tra cui Dataform. L'utilizzo delle chiavi Cloud KMS ti consente di controllare il loro livello di protezione, la posizione, la pianificazione della rotazione, le autorizzazioni di utilizzo e di accesso e i confini di crittografia. L'utilizzo di Cloud KMS ti consente inoltre di monitorare l'utilizzo delle chiavi, visualizzare i log di controllo e controllare i cicli di vita delle chiavi. Invece che essere di proprietà e gestite da Google, le chiavi di crittografia della chiave (KEK) simmetriche che proteggono i tuoi dati sono sotto il tuo controllo e vengono gestite 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 la chiave di protezione CMEK impostata per il repository. Questi dati includono:

  • Contenuti del repository Git del repository Dataform e delle relative aree di lavoro
  • Query SQL compilate ed errori di compilazione
  • Query SQL memorizzate delle azioni del flusso di lavoro
  • Dettagli degli errori delle azioni del flusso di lavoro eseguite

Dataform utilizza le chiavi di protezione CMEK nei seguenti scenari:

  • Durante ogni operazione che richiede la decrittografia dei dati dei clienti archiviati at-rest. Queste operazioni includono, a titolo esemplificativo:
  • Durante ogni operazione che richiede l'archiviazione dei dati dei clienti inattivi. Queste operazioni includono, a titolo esemplificativo:

Dataform gestisce la crittografia dei dati dei clienti associati solo alle risorse Dataform. Dataform non gestisce la crittografia degli dati dei clienti creati in BigQuery tramite l'esecuzione degli flussi di lavoro di Dataform. Per criptare i dati creati e archiviati in BigQuery, configura CMEK per BigQuery.

Chiavi supportate

Dataform supporta i seguenti tipi di chiavi CMEK:

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 con crittografia CMEK è 512 MB.
  • La dimensione massima di uno spazio di lavoro in un repository con crittografia 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 di Dataform predefinita per il tuo progetto Google Cloud, tutti i nuovi repository creati nella posizione del progetto Google Cloud 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 un'altra chiave CMEK, ma non puoi applicare la crittografia at rest predefinita.
  • Se modifichi il valore di una chiave CMEK predefinita di Dataform, il valore precedente si applica ai repository esistenti e il valore aggiornato si applica ai repository creati dopo la modifica.
  • Puoi impostare una sola chiave CMEK predefinita di Dataform per ogni posizione dei repository del progetto Google Cloud.
  • Le policy dell'organizzazione CMEK non sono disponibili.
  • L'utilizzo delle chiavi Cloud HSM e Cloud EKM è soggetto alla disponibilità. Per ulteriori informazioni sulla disponibilità delle chiavi nelle varie località, consulta Località Cloud KMS.

Quote di 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 con crittografia CMEK possono utilizzare queste quote per ogni modifica ai contenuti del repository. Le operazioni di crittografia e decrittografia che utilizzano le 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 applicare modifiche alle chiavi finché non vengono propagate da Cloud KMS. Per alcune operazioni, come la disattivazione o l'eliminazione di una chiave, la propagazione può richiedere fino a tre ore. Le modifiche alle autorizzazioni in genere si propagano molto più rapidamente.

Dopo aver creato il 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 distrutta, tutti i dati archiviati nel repository corrispondente diventano inaccessibili.

Se le chiamate di Dataform a Cloud KMS rilevano che una chiave precedentemente disattivata è stata riattivata, Dataform ripristina automaticamente l'accesso.

Utilizzare le chiavi esterne con Cloud EKM

In alternativa all'utilizzo di chiavi che si trovano su Cloud KMS, puoi utilizzare le chiavi che si trovano in un partner di gestione delle chiavi esterne supportato. A tale scopo, utilizza Cloud External Key Manager (Cloud EKM) per creare e gestire le chiavi esterne, che sono puntatori a chiavi al di fuori di Google Cloud. Per ulteriori informazioni, consulta 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 al momento della creazione del repository. Questa procedura è uguale 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 predefinita di Dataform. Puoi impostare una sola chiave CMEK predefinita per progetto Google Cloud.

Dopo aver impostato una chiave CMEK predefinita di Dataform, Dataform applica la chiave a tutti i nuovi repository creati nella posizione del progetto Google Cloud per impostazione predefinita. Quando crei un repository, puoi utilizzare la chiave predefinita o selezionare un'altra chiave CMEK.

Come viene gestito lo stato di una chiave non disponibile

In rari casi, 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 attivata 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 ricollegarsi a Cloud KMS e Cloud KMS non risponde che la chiave è attiva.

Al contrario, se il repository Dataform è protetto da una chiave disabilitata nel momento in cui Dataform non riesce per la prima volta a comunicare con Cloud KMS, i dati del repository criptati rimangono inaccessibili finché non riesce a riconnettersi a Cloud KMS e non hai riattivato la chiave.

Logging

Puoi eseguire il controllo delle richieste inviate da Dataform a Cloud KMS per tuo conto in Cloud Logging, se hai abilitato la registrazione degli audit per l'API Cloud KMS nel tuo progetto. Queste entrate dei log di Cloud KMS sono visibili in Cloud Logging. Per ulteriori informazioni, consulta la pagina relativa alla visualizzazione dei 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:

    1. Abilita l'API Cloud Key Management Service.
    2. Crea un keyring e una chiave come descritto in Creazione di chiavi automatizzate e chiavi. Crea il portachiavi in una posizione 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 situato in asia-northeast3.
      • La regione global non può essere utilizzata con Dataform.
      Per ulteriori informazioni sulle località supportate per Dataform e Cloud KMS, consulta Località Cloud.

Attivare CMEK

Dataform può accedere alla chiave per tuo conto dopo che hai assegnato il ruolo Cloud KMS Autore crittografia/decrittografia CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) all'account di servizio Dataform predefinito.

L'ID del tuo 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 all'account di servizio Dataform predefinito:

Console

  1. Apri la pagina Gestione delle chiavi nella console Google Cloud.

    Apri la pagina Gestione delle chiavi

  2. Fai clic sul nome della chiave automatizzata che contiene la chiave.

  3. Fai clic sulla casella di controllo della chiave di crittografia a cui vuoi aggiungere il ruolo. Si apre la scheda Autorizzazioni.

  4. Fai clic su Aggiungi membro.

  5. Inserisci l'indirizzo email dell'account di servizio

    • Se l'account di servizio è già presente nell'elenco dei membri, ha ruoli esistenti. Fai clic sull'elenco a discesa del ruolo corrente per l'account servizio.
  6. Fai clic sull'elenco a discesa Seleziona un ruolo, poi su Cloud KMS e infine sul ruolo Autore crittografia/decrittografia CryptoKey Cloud KMS.

  7. 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 progetto Google Cloud in cui è in esecuzione Cloud KMS
  • SERVICE_ACCOUNT: l'indirizzo email del tuo account servizio Dataform predefinito
  • KMS_KEY_LOCATION: il nome della posizione della chiave Cloud KMS
  • KMS_KEY_RING: il nome della raccolta di chiavi della chiave Cloud KMS
  • KMS_KEY: il nome della chiave Cloud KMS

Applicare una policy dell'organizzazione CMEK

Dataform è integrato con due limitazioni 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 della tua organizzazione:

Considerazioni sull'applicazione dei criteri dell'organizzazione

Prima di applicare i criteri dell'organizzazione CMEK, tieni presente quanto segue.

Prepararsi a un ritardo di propagazione

Dopo aver impostato o aggiornato un criterio dell'organizzazione, l'applicazione del nuovo criterio può richiedere fino a 15 minuti.

Prendi in considerazione le risorse esistenti

Le risorse esistenti non sono soggette ai criteri dell'organizzazione appena creati. Ad esempio, un criterio dell'organizzazione non viene applicato 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 un criterio dell'organizzazione

L'autorizzazione per impostare o aggiornare il criterio dell'organizzazione potrebbe essere difficile da acquisire per scopi di test. Devi disporre del ruolo Amministratore criteri 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 l'utilizzo delle chiavi CMEK per proteggere tutti i nuovi repository Dataform in un'organizzazione.

Se impostato, questo criterio dell'organizzazione fa sì che tutte le richieste di creazione di risorse senza una chiave Cloud KMS specificata non vadano a buon fine.

Una volta impostato, questo criterio 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

  1. Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Utilizzando Filtra, cerca il seguente vincolo:

    constraints/gcp.restrictNonCmekServices
    
  3. Nella colonna Nome, fai clic su Limita i servizi che possono creare risorse senza CMEK.

  4. Fai clic su Gestisci criteri.

  5. Nella pagina Modifica criterio, in Origine criterio, seleziona Sostituisci criterio della risorsa padre.

  6. In Regole, fai clic su Aggiungi una regola.

  7. Nell'elenco Valori criterio, seleziona Personalizzato.

  8. Nell'elenco Tipo di criterio, seleziona Rifiuta.

  9. Nel campo Valori personalizzati, inserisci quanto segue:

    is:dataform.googleapis.com
    
  10. Fai clic su Fine, quindi su Imposta criteri.

gcloud

  1. 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 questa limitazione.

  2. 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 nel progetto. Il processo non va a buon fine a meno che 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 OPPURE projects/team-specific-keys".

Console

  1. Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Utilizzando Filtra, cerca il seguente vincolo:

    constraints/gcp.restrictCmekCryptoKeyProjects
    
  3. Nella colonna Nome, fai clic su Limita i progetti che possono fornire CryptoKey KMS per CMEK.

  4. Fai clic su Gestisci criteri.

  5. Nella pagina Modifica criterio, in Origine criterio, seleziona Sostituisci criterio della risorsa padre.

  6. In Regole, fai clic su Aggiungi una regola.

  7. Nell'elenco Valori criterio, seleziona Personalizzato.

  8. Nell'elenco Tipo di criterio, seleziona Consenti.

  9. 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.

  10. Fai clic su Fine, quindi su Imposta criteri.

gcloud

  1. 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.
  2. 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 altro progetto. Il processo non andrà a buon fine.

Impostare una chiave CMEK predefinita di Dataform

L'impostazione di una chiave CMEK di Dataform predefinita per il tuo progetto Google Cloud ti consente di criptare più repository con la stessa chiave CMEK. Per ulteriori informazioni, consulta 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 della raccolta di chiavi della chiave Cloud KMS.
  • KMS_KEY: il nome della chiave Cloud KMS.
  • PROJECT_ID: l'ID del tuo progetto Google Cloud.
  • PROJECT_LOCATION: il nome della località del tuo progetto Google Cloud.

Rimuovere una chiave CMEK predefinita di Dataform

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 progetto Google Cloud.
  • PROJECT_LOCATION: il nome della località del progetto Google Cloud in cui vuoi annullare l'impostazione della chiave CMEK predefinita.

Verificare se è impostata una chiave CMEK predefinita di Dataform

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 progetto Google Cloud.
  • PROJECT_LOCATION: il nome della località del tuo progetto Google Cloud.

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 predefinita di Dataform 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 Restrizioni.

Passaggi successivi