Utilizzo delle chiavi di crittografia gestite dal cliente

Per impostazione predefinita, Dataflow cripta i contenuti dei clienti at-rest. Dataflow 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 Dataflow. 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 Dataflow è simile all'utilizzo della crittografia predefinita di Google. Per saperne di più sulle opzioni di crittografia, consulta Chiavi di crittografia gestite dal cliente (CMEK).

Puoi creare una pipeline in modalità batch o flusso protetta con una CMEK o accedere a dati protetti tramite CMEK in sorgenti e sink.

Quote di Cloud KMS e Dataflow

Quando utilizzi CMEK in Dataflow, i tuoi progetti possono consumare le quote per le richieste crittografiche di Cloud KMS. Ad esempio, le pipeline Dataflow possono consumare queste quote quando la pipeline accede a dati protetti tramite CMEK in origini e sink o quando viene recuperato lo stato di una pipeline criptata con CMEK. Per ulteriori informazioni, consulta la sezione Crittografia delle posizioni degli stati della pipeline di questa pagina.

Le operazioni di crittografia e decrittografia che utilizzano le chiavi CMEK influiscono sulle quote di Cloud KMS nei seguenti modi:

  • Per le chiavi CMEK software generate in Cloud KMS, non viene consumata alcuna quota Cloud KMS.
  • Per le chiavi CMEK hardware, a volte chiamate chiavi Cloud HSM, le operazioni di crittografia e decrittografia vengono conteggiate ai fini delle quote Cloud HSM nel progetto che contiene la chiave.
  • Per le chiavi CMEK esterne, a volte chiamate chiavi Cloud EKM, le operazioni di crittografia e decrittografia vengono conteggiate ai fini delle quote Cloud EKM nel progetto che contiene la chiave.

Per ulteriori informazioni, consulta Quote di Cloud KMS.

Supporto e limitazioni

  • Cloud KMS è supportato nelle seguenti versioni dell'SDK Apache Beam:

    • SDK Java 2.13.0 e versioni successive
    • Versioni dell'SDK Python 2.13.0 e successive
    • Versioni dell'SDK Go 2.40.0 e successive
  • Cloud KMS con Dataflow supporta le chiavi regionali. Se sostitui la regione o la zona del worker della pipeline per utilizzare una regione diversa da quella associata alle tue chiavi, le chiavi regionali non funzionano.

  • La regione del CMEK e la regione del job Dataflow devono essere uguali.

  • Le località multiregionali e globali non sono supportate. Non puoi utilizzare chiavi globali e multiregionali con le pipeline Dataflow.

Crittografia degli artefatti dello stato della pipeline

I dati letti da una pipeline Dataflow dalle origini dati specificate dall'utente sono criptati, ad eccezione delle chiavi di dati specificate per le trasformazioni basate su chiavi nei job di streaming.

Per i job batch, tutti i dati, incluse le chiavi di dati specificate per le trasformazioni basate su chiavi, sono sempre protetti dalla crittografia CMEK.

Per i job di streaming creati dopo il 7 marzo 2024, tutti i dati utente vengono criptati con CMEK.

Per i job di streaming creati prima del 7 marzo 2024, le chiavi di dati utilizzate nelle operazioni basate su chiavi, come finestre, raggruppamenti e unioni, non sono protette dalla crittografia CMEK. Per attivare questa crittografia per i tuoi job, svuotalo o annullalo, quindi riavvialo.

I metadati dei job non sono criptati con le chiavi Cloud KMS. I metadati job include quanto segue:

  • Dati forniti dall'utente, ad esempio nomi dei job, valori dei parametri dei job e grafico della pipeline
  • Dati generati dal sistema, come ID job e indirizzi IP dei lavoratori

Crittografia delle posizioni dello stato della pipeline

Le seguenti posizioni di archiviazione sono protette con le chiavi Cloud KMS:

  • Dischi permanenti collegati ai worker di Dataflow e utilizzati per lo shuffling e lo stato di streaming basati su Persistent Disk.
  • Stato Shuffle di Dataflow per le pipeline batch.
  • Bucket Cloud Storage che archiviano dati temporanei di esportazione o importazione. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di separato.
  • Bucket Cloud Storage utilizzati per archiviare file binari contenenti codice della pipeline. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di bucket.
  • Bucket Cloud Storage utilizzati per archiviare i dati della pipeline campionati, quando è attivato il campionamento dei dati.
  • Stato di Streaming Engine di Dataflow per le pipeline in modalità flusso.

Chiavi esterne

Puoi utilizzare Cloud External Key Manager (Cloud EKM) per criptare i dati in Google Cloud utilizzando chiavi esterne che gestisci.

Quando utilizzi una chiave Cloud EKM, Google non ha alcun controllo sulla disponibilità della chiave con gestione esterna. Se la chiave non è disponibile durante il periodo di creazione del job o della pipeline, il job o la pipeline vengono annullati.

Per ulteriori considerazioni sull'utilizzo delle chiavi esterne, consulta Cloud External Key Manager.

Prima di iniziare

  1. Verifica di disporre dell'SDK Apache Beam per Java 2.13.0 o versioni successive, dell'SDK Apache Beam per Python 2.13.0 o versioni successive o dell'SDK Apache Beam per Go 2.40.0 o versioni successive.

    Per ulteriori informazioni, consulta Installazione dell'SDK Apache Beam.

  2. Decidi se eseguire Dataflow e Cloud KMS nello stesso progetto Google Cloud o in progetti diversi. Questa pagina utilizza la seguente convenzione:

    • PROJECT_ID è l'ID del progetto che esegue Dataflow.
    • PROJECT_NUMBER è il numero del progetto in cui è in esecuzione Dataflow.
    • KMS_PROJECT_ID è l'ID del progetto su cui è in esecuzione Cloud KMS.

    Per informazioni sugli ID progetto e sui numeri di progetto Google Cloud, consulta Identificazione dei progetti.

  3. Nel progetto Google Cloud in cui vuoi eseguire Cloud KMS:

    1. Abilita l'API Cloud KMS.
    2. Crea un keyring e una chiave come descritto in Creazione di chiavi simmetriche. Cloud KMS e Dataflow sono entrambi servizi regionali. La regione del CMEK e la regione del job Dataflow devono essere uguali. Non utilizzare chiavi globali o multiregionali con le pipeline Dataflow. Utilizza invece le chiavi regionali.

Concedi le autorizzazioni di autore crittografia/decrittografia

  1. Assegna il Cloud KMS CryptoKey Encrypter/Decrypter ruolo all'account di servizio Dataflow. Questa autorizzazione concede all'account di servizio Dataflow l'autorizzazione per criptare e decriptare con la chiave CMEK specificata. Se utilizzi la console Google Cloud e la pagina Crea job da modello, questa autorizzazione viene concessa automaticamente e puoi saltare questo passaggio.

    Utilizza Google Cloud CLI per assegnare il ruolo:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@dataflow-service-producer-prod.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Sostituisci KMS_PROJECT_ID con l'ID del progetto Google Cloud su cui è in esecuzione Cloud KMS e PROJECT_NUMBER con il numero di progetto (non l'ID progetto) del progetto Google Cloud su cui sono in esecuzione le risorse Dataflow.

  2. Assegna il ruolo all'account di servizio Compute Engine.Cloud KMS CryptoKey Encrypter/Decrypter Questa autorizzazione concede all'account di servizio Compute Engine l'autorizzazione per criptare e decriptare con la chiave CMEK specificata.

    Utilizza Google Cloud CLI per assegnare il ruolo:

    gcloud projects add-iam-policy-binding KMS_PROJECT_ID \
    --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
    --role roles/cloudkms.cryptoKeyEncrypterDecrypter

    Sostituisci KMS_PROJECT_ID con l'ID del progetto Google Cloud su cui è in esecuzione Cloud KMS e PROJECT_NUMBER con il numero di progetto (non l'ID progetto) del progetto Google Cloud su cui sono in esecuzione le risorse Compute Engine.

Creare una pipeline protetta da Cloud KMS

Quando crei una pipeline in batch o in streaming, puoi selezionare una chiave Cloud KMS per criptare lo stato della pipeline. Lo stato della pipeline è costituito dai dati archiviati da Dataflow in uno spazio di archiviazione temporaneo.

Interfaccia a riga di comando

Per creare una nuova pipeline con stato protetto da una chiave Cloud KMS, aggiungi il flag pertinente ai parametri della pipeline. L'esempio seguente mostra l'esecuzione di una pipeline di conteggio delle parole con Cloud KMS.

Java

Dataflow non supporta la creazione di percorsi Cloud Storage predefiniti per i file temporanei quando si utilizza una chiave Cloud KMS. È obbligatoria la specifica di gcpTempLocation.

mvn compile exec:java -Dexec.mainClass=org.apache.beam.examples.WordCount \
  -Dexec.args="--inputFile=gs://dataflow-samples/shakespeare/kinglear.txt \
               --output=gs://STORAGE_BUCKET/counts \
               --runner=DataflowRunner --project=PROJECT_ID \
               --gcpTempLocation=gs://STORAGE_BUCKET/tmp \
               --dataflowKmsKey=KMS_KEY"
  -Pdataflow-runner

Python

Dataflow non supporta la creazione di percorsi Cloud Storage predefiniti per i file temporanei quando si utilizza una chiave Cloud KMS. È obbligatoria la specifica di gcpTempLocation.

python -m apache_beam.examples.wordcount \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/counts \
  --runner DataflowRunner \
  --region HOST_GCP_REGION \
  --project PROJECT_ID \
  --temp_location gs://STORAGE_BUCKET/tmp/ \
  --dataflow_kms_key=KMS_KEY

Vai

Dataflow non supporta la creazione di percorsi Cloud Storage predefiniti per i file temporanei quando si utilizza una chiave Cloud KMS. È obbligatoria la specifica di gcpTempLocation.

wordcount
  --project HOST_PROJECT_ID \
  --region HOST_GCP_REGION \
  --runner dataflow \
  --staging_location gs://STORAGE_BUCKET/staging \
  --temp_location gs://STORAGE_BUCKET/temp \
  --input gs://dataflow-samples/shakespeare/kinglear.txt \
  --output gs://STORAGE_BUCKET/output \
  --dataflow_kms_key=KMS_KEY

Console Google Cloud

  1. Apri l'interfaccia di monitoraggio di Dataflow.
    Vai all'interfaccia web di Dataflow
  2. Seleziona Crea job da modello.
  3. Nella sezione Crittografia, seleziona Chiave gestita dal cliente.
Le opzioni di crittografia nella pagina Crea job da modello per utilizzare
              una chiave di proprietà di Google e gestita da Google o chiavi gestite dal cliente.

La prima volta che provi a eseguire un job con una determinata chiave Cloud KMS, all'account di servizio Compute Engine o all'account di servizio Dataflow potrebbero non essere state concesse le autorizzazioni per criptare e decriptare utilizzando questa chiave. In questo caso, viene visualizzato un messaggio di avviso che ti chiede di concedere l'autorizzazione al tuo account di servizio.

Ti chiede di concedere le autorizzazioni per la crittografia e la decrittografia sui tuoi account di servizio Compute Engine e Dataflow utilizzando una determinata chiave CMEK.

Verificare l'utilizzo delle chiavi Cloud KMS

Puoi verificare se la pipeline utilizza una chiave Cloud KMS utilizzando la console Google Cloud o Google Cloud CLI.

Console

  1. Apri l'interfaccia di monitoraggio di Dataflow.
    Vai all'interfaccia web di Dataflow
  2. Per visualizzare i dettagli del job, seleziona il job Dataflow.
  3. Nel riquadro laterale Informazioni job, per visualizzare il tipo di chiave, controlla il campo Tipo di crittografia.

    • Per Tipo di crittografia: "Chiave gestita da Google"
      Riquadro laterale delle informazioni sul job che elenca i dettagli di un job Dataflow.
      Il tipo di chiave utilizzato dal job è indicato nel campo Tipo di crittografia.
    • Per Tipo di crittografia: "Chiave gestita dal cliente"
      Riquadro laterale delle informazioni sul job che elenca i dettagli di un job Dataflow.
      Il tipo di chiave utilizzato dal job è indicato nel campo Tipo di crittografia.

Interfaccia a riga di comando

Esegui il comando describe utilizzando gcloud CLI:

gcloud dataflow jobs describe JOB_ID

Cerca la riga contenente serviceKmsKeyName. Queste informazioni mostrano che è stata utilizzata una chiave Cloud KMS per la crittografia dello stato della pipeline di Dataflow.

Puoi verificare l'utilizzo delle chiavi Cloud KMS per la crittografia delle origini e delle destinazioni utilizzando le pagine e gli strumenti della console Google Cloud di queste origini e destinazioni, tra cui Pub/Sub, Cloud Storage e BigQuery. Puoi anche verificare l'utilizzo delle chiavi Cloud KMS visualizzando gli audit log di Cloud KMS.

Disattivare o distruggere la chiave

Se per qualsiasi motivo dovessi disattivare o distruggere la chiave, puoi utilizzare la console Google Cloud. Entrambe le operazioni di disattivazione e distruzione annullano i job che utilizzano la chiave. Questa operazione è permanente.

Se utilizzi Cloud EKM, disabilita o elimina la chiave nel gestore di chiavi esterno.

Se utilizzi l'opzione Streaming Engine, ti consigliamo di acquisire un snapshot del job prima di disattivare la chiave.

Rimuovi l'accesso di Dataflow alla chiave Cloud KMS

Per rimuovere l'accesso di Dataflow alla chiave Cloud KMS, segui questi passaggi:

  1. Revoca il Cloud KMS CryptoKey Encrypter/Decrypter ruolo per l'account di servizio Dataflow utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.
  2. Revoca il Cloud KMS CryptoKey Encrypter/Decrypter ruolo all'account di servizio Compute Engine utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.
  3. Se vuoi, puoi anche distruggere il materiale della versione della chiave per impedire ulteriormente a Dataflow e ad altri servizi di accedere allo stato della pipeline.

Sebbene tu possa distruggere il materiale delle versioni della chiave, non puoi eliminare le chiavi e i keyring. I keyring e le chiavi non hanno costi fatturabili o limitazioni di quota, perciò il fatto che continuino a esistere non influisce sui costi o sui limiti di produzione.

I job Dataflow convalidano periodicamente se l'account di servizio Dataflow può utilizzare correttamente la chiave Cloud KMS specificata. Se una richiesta di crittografia o decrittografia non va a buon fine, il servizio Dataflow interrompe immediatamente tutte le operazioni di importazione ed elaborazione dei dati. Dataflow inizia immediatamente a ripulire le risorse Google Cloud collegate al tuo job.

Utilizza origini e destinazioni protette con le chiavi Cloud KMS

Dataflow può accedere alle origini e ai sink di Google Cloud protetti dalle chiavi Cloud KMS. Se non crei nuovi oggetti, non è necessario specificare la chiave Cloud KMS di queste origini e destinazioni. Se la pipeline Dataflow potrebbe creare nuovi oggetti in un'area di destinazione, devi definire i parametri della pipeline. Questi parametri specificano le chiavi Cloud KMS per l'accumulo e le passano ai metodi di connettore I/O appropriati.

Per le origini e gli sink della pipeline Dataflow che non supportano le CMEK gestite da Cloud KMS, le impostazioni CMEK di Dataflow sono irrilevanti.

Autorizzazioni delle chiavi Cloud KMS

Quando accedi ai servizi protetti con le chiavi Cloud KMS, verifica di aver assegnato il Cloud KMS CryptoKey Encrypter/Decrypter ruolo a quel servizio. Gli account sono del seguente tipo:

  • Cloud Storage: service-{project_number}@gs-project-accounts.iam.gserviceaccount.com
  • BigQuery: bq-{project_number}@bigquery-encryption.iam.gserviceaccount.com
  • Pub/Sub: service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com

Cloud Storage

Se vuoi proteggere i bucket temporanei e di staging specificati con i parametri della pipeline TempLocation/temp_location e stagingLocation/staging_location, consulta la sezione sulla configurazione dei bucket Cloud Storage protetti da CMEK.

BigQuery

Java

Utilizza il metodo with_kms_key() sui valori restituiti da BigQueryIO.readTableRows(), BigQueryIO.read(), BigQueryIO.writeTableRows() e BigQueryIO.write().

Puoi trovare un esempio nel repository GitHub di Apache Beam.

Python

Utilizza l'argomento kms_key in BigQuerySource e BigQuerySink.

Puoi trovare un esempio nel repository GitHub di Apache Beam.

Vai

Le operazioni di input/output di BigQuery non supportano l'utilizzo della chiave KMS in Go.

Pub/Sub

Dataflow gestisce l'accesso agli argomenti protetti tramite CMEK utilizzando la configurazione CMEK dell'argomento.

Per leggere e scrivere in argomenti Pub/Sub protetti da CMEK, consulta le istruzioni di Pub/Sub per l'utilizzo di CMEK.

Audit logging per l'utilizzo delle chiavi Cloud KMS

Dataflow consente a Cloud KMS di utilizzare Cloud Audit Logs per registrare le operazioni con le chiavi, come la crittografia e la decrittografia. Dataflow fornisce l'ID job come contesto a un chiamante Cloud KMS. Questo ID ti consente di monitorare ogni istanza in cui viene utilizzata una chiave Cloud KMS specifica per un job Dataflow.

Cloud Audit Logs gestisce gli audit log per ogni progetto, cartella e organizzazione Google Cloud. Hai a disposizione diverse opzioni per visualizzare i log di controllo di Cloud KMS.

Cloud KMS scrive audit log delle attività di amministrazione per i job Dataflow con crittografia CMEK. Questi log registrano le operazioni che modificano la configurazione o i metadati di una risorsa. Non puoi disabilitare gli audit log per le attività di amministrazione.

Se abilitato esplicitamente, Cloud KMS scrive gli audit log di accesso ai dati per i tuoi job Dataflow con crittografia CMEK. Gli audit log di accesso ai dati contengono chiamate API che leggono la configurazione o i metadati delle risorse. Questi log contengono anche chiamate API effettuate dagli utenti che creano, modificano o leggono i dati delle risorse forniti dall'utente. Per istruzioni su come abilitare alcuni o tutti gli audit log di accesso ai dati, consulta Configurazione dei log di accesso ai dati.

Prezzi

Puoi utilizzare le chiavi di crittografia Cloud KMS con Dataflow in tutte le regioni Dataflow dove Cloud KMS è disponibile.

Questa integrazione non comporta costi aggiuntivi oltre alle operazioni chiave, che vengono fatturate al tuo progetto Google Cloud. Ogni volta che il account di servizio Dataflow utilizza la chiave Cloud KMS, l'operazione viene fatturata in base alle tariffe delle operazioni con le chiavi Cloud KMS.

Per ulteriori informazioni, consulta la pagina Dettagli sui prezzi di Cloud KMS.

Risoluzione dei problemi

Utilizza i suggerimenti riportati in questa sezione per risolvere i problemi.

Impossibile convalidare Cloud KMS

Il flusso di lavoro potrebbe non riuscire con il seguente errore:

Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.

Per risolvere il problema, verifica di aver passato il percorso completo della chiave. Sembra projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Cerca eventuali errori ortografici nel percorso della chiave.

Autorizzazione alla chiave Cloud KMS negata

Il flusso di lavoro potrebbe non riuscire con il seguente errore:

Workflow failed. Causes: Cloud KMS key Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>' (or it may not exist). cannot be validated.

Per risolvere il problema, verifica che l'ID progetto indicato nel percorso della chiave sia corretto. Inoltre, verifica di disporre dell'autorizzazione per utilizzare la chiave.

La posizione della chiave Cloud KMS non corrisponde alla posizione del job Dataflow

Il flusso di lavoro potrebbe non riuscire con il seguente errore:

Workflow failed. Causes: Cloud KMS key projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
can't protect resources for this job. Make sure the region of the KMS key matches the Dataflow region.

Per risolvere il problema, se utilizzi una chiave regionale, verifica che la chiave Cloud KMS si trovi nella stessa regione del job Dataflow.