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 consumare quote per le richieste crittografiche di Cloud KMS. Ad esempio, le pipeline Dataflow possono consumare queste quote quando la tua 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 delle pipeline in questa pagina. Le operazioni di crittografia e decriptazione mediante 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.

Con Cloud External Key Manager (Cloud EKM), puoi utilizzare le chiavi che gestisci all'interno di un partner esterno supportato per la gestione delle chiavi 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 maggiori informazioni, consulta la pagina relativa alle opzioni di crittografia su Google Cloud.

Assistenza e limitazioni

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

    • SDK Java 2.13.0 e versioni 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 worker della pipeline per utilizzare una regione diversa da quella associata alle tue chiavi, le chiavi di regione non funzionano.

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

  • Non sono supportate località a livello globale e multiregionale. 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 che hai specificato per le trasformazioni basate su chiavi nei job di elaborazione in modalità flusso.

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

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

Per i job di flussi di dati creati prima del 7 marzo 2024, le chiavi dati utilizzate nelle operazioni basate sulle chiavi, come windowing, raggruppamento e unione, 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 vengono criptati con le chiavi Cloud KMS. I metadati del job includono quanto segue:

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

Crittografia delle località dello stato 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 flusso e shuffling basato su Persistent Disk.
  • Stato di Dataflow shuffling per le pipeline in modalità batch.
  • Bucket Cloud Storage in cui sono archiviati i dati temporanei di esportazione o importazione. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di bucket.
  • i bucket Cloud Storage utilizzati per archiviare file binari contenenti codice pipeline. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di bucket.
  • Bucket Cloud Storage utilizzati per archiviare dati della pipeline campionata, quando è abilitato il campionamento dei dati.
  • Stato di Dataflow Streaming Engine per le pipeline in modalità flusso.

Chiavi esterne

Puoi utilizzare Cloud External Key Manager (Cloud EKM) per criptare i dati all'interno di Google Cloud utilizzando chiavi esterne gestite da te.

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

Per ulteriori considerazioni sull'utilizzo 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 maggiori 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 convenzione seguente:

    • 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 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 regionalizzati. La regione per la CMEK e la regione del job Dataflow devono essere la stessa. Non utilizzare chiavi globali o multiregionali con le pipeline Dataflow. Utilizza invece le chiavi regionali.

Concedi le autorizzazioni di crittografia/decrittografia

  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 sostituisci PROJECT_NUMBER con il numero di 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 all'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 di 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à batch o flusso, puoi selezionare una chiave Cloud KMS per criptare lo stato della pipeline. Lo stato della pipeline è quello dei dati archiviati da Dataflow nell'archiviazione temporanea.

Interfaccia a riga di comando

Per creare una nuova pipeline con lo stato della pipeline protetto da una chiave Cloud KMS, aggiungi il flag pertinente ai parametri della pipeline. L'esempio seguente illustra 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 gestita da Google o una chiave gestita 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 all'account di servizio Dataflow non siano state concesse le autorizzazioni per criptare e decriptare con quella chiave. In questo caso, viene visualizzato un messaggio di avviso che ti chiede di concedere l'autorizzazione al tuo account di servizio.

Viene richiesto di concedere le autorizzazioni per criptare e decriptare gli account di servizio Compute Engine e Dataflow utilizzando una determinata CMEK.

Verificare l'utilizzo delle chiavi Cloud KMS

Puoi verificare se la tua 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. Per visualizzare il tipo di chiave, seleziona il campo Tipo di crittografia nel riquadro laterale Informazioni job.

    • Per il tipo di crittografia: "Chiave gestita da Google"
      Riquadro laterale delle informazioni del job in cui sono elencati 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 del job in cui sono elencati 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 e gli strumenti della console Google Cloud delle origini e dei sink, tra cui 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 dover disabilitare o eliminare la chiave, puoi utilizzare la console Google Cloud. Le operazioni di disabilitazione e eliminazione annullano i job utilizzando la chiave. Questa operazione è definitiva.

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

Se utilizzi l'opzione Streaming Engine, ti consigliamo di creare un'istantanea del job prima di disabilitare 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 ruolo Cloud KMS CryptoKey Encrypter/Decrypter all'account di servizio Dataflow utilizzando la console Google Cloud o gcloud CLI.
  2. Revoca Cloud KMS CryptoKey Encrypter/Decrypter ruolo 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 limitazioni di quota, quindi la loro esistenza non influisce sui costi o sui limiti di produzione.

I job Dataflow verificano 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 blocca tutte le operazioni di importazione ed elaborazione dei dati il prima possibile. Dataflow inizia immediatamente la pulizia delle risorse Google Cloud associate al job.

Utilizza origini e sink protetti con chiavi Cloud KMS

Dataflow può accedere a origini e sink Google Cloud protetti dalle chiavi Cloud KMS. Se non crei nuovi oggetti, non è necessario specificare la chiave Cloud KMS delle origini e dei sink. Se la pipeline Dataflow potrebbe creare nuovi oggetti in un sink, devi definire i parametri della pipeline. Questi parametri specificano le chiavi Cloud KMS per il sink e passano questa chiave Cloud KMS ai metodi appropriati del connettore I/O.

Per le origini e i sink delle 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 al servizio. Gli account sono nel 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 delle pipeline TempLocation/temp_location e stagingLocation/staging_location, consulta la pagina relativa alla configurazione dei bucket Cloud Storage protetti da CMEK.

BigQuery

Java

Utilizza il metodo with_kms_key() per restituire i valori 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'uso 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 in argomenti Pub/Sub protetti da CMEK, vedi Istruzioni 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 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. Una chiave Cloud KMS specifica viene utilizzata per un job Dataflow.

Cloud Audit Logs gestisce gli audit log per ogni progetto, cartella e organizzazione Google Cloud. Sono disponibili diverse opzioni per visualizzare gli audit log 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 delle attività di amministrazione.

Se questa opzione è abilitata in modo esplicito, 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 guidate dall'utente 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 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 chiave fatturate al tuo progetto Google Cloud. Ogni volta che l'account di servizio Dataflow utilizza la tua 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 superato il percorso completo della chiave. Sembra projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Cerca eventuali 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, assicurati 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 a livello di regione, verifica che la chiave Cloud KMS si trovi nella stessa regione del job Dataflow.