Utilizzo delle chiavi di crittografia gestite dal cliente

Questa pagina descrive come utilizzare una chiave di crittografia di Cloud Key Management Service (Cloud KMS) con Dataflow. Una chiave di crittografia gestita dal cliente (CMEK) consente la crittografia dei dati at-rest con una chiave che puoi controllare tramite Cloud KMS. Puoi creare una pipeline in modalità batch o flusso protetta con una CMEK o accedere a dati protetti da CMEK in origini e sink.

Puoi anche utilizzare le chiavi Cloud EKM o Cloud HSM. Quando utilizzi CMEK in Dataflow, i tuoi progetti possono utilizzare le quote per le richieste di crittografia di Cloud KMS. Ad esempio, le pipeline Dataflow possono consumare queste quote quando la pipeline accede a dati protetti da 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 località degli stati della pipeline in questa pagina. Le operazioni di crittografia e decriptazione che utilizzano le chiavi CMEK influiscono sulle quote di Cloud KMS solo se utilizzi chiavi hardware (Cloud HSM) o esterne (Cloud EKM). Per maggiori informazioni, consulta Quote di Cloud KMS.

Con Cloud External Key Manager (Cloud EKM) puoi utilizzare le chiavi che gestisci all'interno di un partner di gestione delle chiavi esterno supportato per proteggere i dati all'interno di Google Cloud. Puoi proteggere i dati at-rest nei servizi di integrazione CMEK supportati o chiamando direttamente l'API Dataflow.

Per ulteriori informazioni, consulta le opzioni di crittografia su Google Cloud.

Supporto e limitazioni

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

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

  • La regione per la CMEK e la regione per il job Dataflow deve essere la stessa.

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

Crittografia degli artefatti dello stato della pipeline

I dati che una pipeline Dataflow legge da origini dati specificate dall'utente vengono criptati, ad eccezione delle chiavi di dati specificate per le trasformazioni basate su chiave in job di flussi.

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

Per i job di flussi di dati creati dopo il 7 marzo 2024, tutti i dati degli utenti vengono criptati con CMEK.

Per i job di flussi di dati creati prima del 7 marzo 2024, le chiavi dei dati utilizzate nelle operazioni basate su chiavi, come windowing, raggruppamento e join, non sono protette dalla crittografia CMEK. Per abilitare questa crittografia per i tuoi job, scarica o annulla il job, quindi riavvialo.

I metadati del job non sono criptati con chiavi Cloud KMS. I metadati del job includono 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 gli ID job e gli indirizzi IP dei worker

Crittografia delle località degli stati delle pipeline

Le seguenti località di archiviazione sono protette con chiavi Cloud KMS:

  • Dischi permanenti collegati ai worker Dataflow e utilizzati per l'archiviazione dello stato di flussi e shuffling basato su Persistent Disk di dati.
  • Stato di Dataflow Shuffle per pipeline batch.
  • Bucket Cloud Storage in cui vengono archiviati dati di esportazione o importazione temporanei. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di bucket.
  • Bucket Cloud Storage usati per archiviare file binari contenenti il 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 è abilitato il campionamento dei dati.
  • Stato di Dataflow Streaming Engine per 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 gestita esternamente. 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'uso di chiavi esterne, consulta Cloud External Key Manager.

Prima di iniziare

  1. Verifica di avere l'SDK Apache Beam per Java 2.13.0 o versioni successive, l'SDK Apache Beam per Python 2.13.0 o versioni successive oppure l'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. In questa pagina viene utilizzata la seguente convenzione:

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

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

  3. Nel progetto Google Cloud su 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 regionalizzati. La regione per la CMEK e la regione del job Dataflow deve essere la stessa. Non utilizzare chiavi globali o multiregionali con le tue pipeline Dataflow. Utilizza invece le chiavi regionali.

Concedi le autorizzazioni di criptatore/decriptatore

  1. Assegna il ruolo Cloud KMS CryptoKey Encrypter/Decrypter all'account di servizio Dataflow. Questa autorizzazione concede al tuo account di servizio Dataflow l'autorizzazione per criptare e decriptare con la 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 che esegue Cloud KMS e PROJECT_NUMBER con il numero del progetto (non l'ID) del progetto Google Cloud che esegue le risorse Dataflow.

  2. Assegna il ruolo Cloud KMS CryptoKey Encrypter/Decrypter all'account di servizio Compute Engine. Questa autorizzazione concede al tuo account di servizio Compute Engine l'autorizzazione per criptare e decriptare con la 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 che esegue Cloud KMS e sostituisci PROJECT_NUMBER con il numero del progetto (non l'ID) del progetto Google Cloud che esegue le risorse Compute Engine.

Crea una pipeline protetta da Cloud KMS

Quando crei una pipeline in modalità flusso o batch, puoi selezionare una chiave Cloud KMS per criptare lo stato della pipeline. Lo stato della pipeline corrisponde ai dati archiviati da Dataflow in

Interfaccia a riga di comando

Per creare una nuova pipeline con stato della pipeline protetta 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. È obbligatorio specificare 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. È obbligatorio specificare 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

Go

Dataflow non supporta la creazione di percorsi Cloud Storage predefiniti per i file temporanei quando si utilizza una chiave Cloud KMS. È obbligatorio specificare 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 delle chiavi gestite dal cliente.

La prima volta che tenti di eseguire un job con una determinata chiave Cloud KMS, è possibile che al tuo account di servizio Compute Engine o account di servizio Dataflow non siano 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.

Richieste per concedere le autorizzazioni per criptare e decriptare i tuoi account di servizio Compute Engine e Dataflow utilizzando una determinata CMEK.

Verifica l'utilizzo della chiave 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 tuo job Dataflow.
  3. Nel riquadro laterale Informazioni job, per vedere il tipo di chiave, seleziona il campo Tipo di crittografia.

    • Per il 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 è elencato nel campo Tipo di crittografia.
    • Per il 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 è elencato nel campo Tipo di crittografia.

CLI

Esegui il comando describe utilizzando gcloud CLI:

gcloud dataflow jobs describe JOB_ID

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

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

Disabilita o elimina la chiave

Se per qualsiasi motivo potresti aver bisogno di disabilitare o eliminare la chiave, puoi utilizzare la console Google Cloud. Le operazioni di disabilitazione e di eliminazione annullano i job utilizzando la chiave. Questa operazione è definitiva.

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

Se utilizzi l'opzione Streaming Engine, ti consigliamo di eseguire uno snapshot del job prima di disabilitare la chiave.

Rimuovi l'accesso a Dataflow per la chiave Cloud KMS

Puoi rimuovere l'accesso di Dataflow alla chiave Cloud KMS seguendo questa procedura:

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

Anche se puoi eliminare il materiale della versione della chiave, non puoi eliminare chiavi e keyring. I keyring e le chiavi non hanno costi fatturabili o limiti di quota, pertanto la loro continua esistenza 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 decriptazione non va a buon fine, il servizio Dataflow interrompe tutte le operazioni di importazione ed elaborazione dei dati il prima possibile. Dataflow inizia immediatamente a eseguire la pulizia delle risorse Google Cloud collegate al job.

Utilizza origini e sink protetti con chiavi Cloud KMS

Dataflow può accedere a origini e sink di Google Cloud protetti da chiavi Cloud KMS. Se non stai creando nuovi oggetti, non devi specificare la chiave Cloud KMS di queste origini e sink. Se la tua pipeline Dataflow può creare nuovi oggetti in un sink, devi definire i parametri della pipeline. Questi parametri specificano le chiavi Cloud KMS per quel sink e passano la chiave Cloud KMS ai metodi del connettore I/O appropriati.

Per le origini e i sink di pipeline Dataflow che non supportano CMEK gestita da Cloud KMS, le impostazioni CMEK di Dataflow non sono pertinenti.

Autorizzazioni per le chiavi Cloud KMS

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

  • 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 gestione temporanea che hai specificato con i parametri della pipeline TempLocation/temp_location e stagingLocation/staging_location, consulta Configurazione dei bucket Cloud Storage protetti da CMEK.

BigQuery

Java

Utilizza il metodo with_kms_key() per i 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.

Go

Gli IO di BigQuery non supportano l'utilizzo della chiave kms in Go.

Pub/Sub

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

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

Audit logging per l'utilizzo della chiave Cloud KMS

Dataflow consente a Cloud KMS di utilizzare Cloud Audit Logs per il logging delle operazioni relative alle chiavi, come la crittografia e la decriptazione. Dataflow fornisce l'ID job come contesto a un chiamante Cloud KMS. Questo ID consente di tenere traccia di ogni istanza in cui una chiave Cloud KMS specifica viene usata 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 gli audit log di Cloud KMS.

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

Se abilitato esplicitamente, Cloud KMS scrive gli audit log di accesso ai dati per i job Dataflow con la 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 basate sugli utenti che creano, modificano o leggono i dati delle risorse forniti dagli utenti. Per istruzioni sull'abilitazione di alcuni o tutti gli audit log di accesso ai dati, vedi Configurare i log di accesso ai dati.

Prezzi

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

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

Per ulteriori informazioni, consulta i dettagli dei prezzi di Cloud KMS.

Risoluzione dei problemi

Utilizza i suggerimenti in questa sezione per risolvere gli errori.

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 trasmesso il percorso completo della chiave. Sembra projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Cerca possibili errori di battitura nel percorso della chiave.

Autorizzazione per la 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 menzionato nel percorso della chiave sia corretto. Inoltre, verifica di disporre dell'autorizzazione per utilizzare la chiave.

La località della chiave Cloud KMS non corrisponde alla località 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.