Utilizzo delle chiavi di crittografia gestite dal cliente

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:
  • 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 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:

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:

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

  1. Apri la pagina Key Management 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 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.
  6. Fai clic sull'elenco a discesa Seleziona un ruolo, fai clic su Cloud KMS e poi 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 tuo progetto Google Cloud che esegue Cloud KMS
  • SERVICE_ACCOUNT: l'indirizzo email del account di servizio Dataform predefinito
  • KMS_KEY_LOCATION: il nome della località della chiave Cloud KMS
  • KMS_KEY_RING: il nome del portachiavi della tua chiave Cloud KMS
  • KMS_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.
Google Cloud

Questa integrazione ti consente di specificare i seguenti requisiti di conformità alla crittografia per i repository Dataform nella tua organizzazione:

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

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

    Vai a Policy dell'organizzazione

  2. Utilizzando il filtro, 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 criterio.

  5. Nella pagina Modifica policy, in Origine policy, seleziona Esegui override della policy dell'unità organizzativa principale.

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

  7. Nell'elenco Valori policy, 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 policy.

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 questo vincolo.

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

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

    Vai a Policy dell'organizzazione

  2. Utilizzando il filtro, 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 criterio.

  5. Nella pagina Modifica policy, in Origine policy, seleziona Esegui override della policy dell'unità organizzativa principale.

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

  7. Nell'elenco Valori policy, seleziona Personalizzato.

  8. Nell'elenco Tipo di policy, 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 policy.

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