Utilizzo delle chiavi di crittografia gestite dal cliente

Questa pagina descrive come utilizzare una chiave di crittografia 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 protetti con CMEK o accedi 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 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 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 partner esterno per la gestione delle chiavi supportato e proteggere i dati in Google Cloud. Puoi proteggere i dati at-rest nei servizi di integrazione CMEK supportati o chiamando direttamente l'API Dataflow.

Per ulteriori informazioni, vedi 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
    • Versioni dell'SDK Python 2.13.0 e successive
    • SDK Go 2.40.0 e versioni successive
  • Cloud KMS con Dataflow supporta 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 per la tua CMEK e region [regione] per il job Dataflow deve essere lo stesso.

  • 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

Dati che una pipeline Dataflow legge da dati specificati dall'utente le origini dati sono criptate, ad eccezione delle chiavi dei dati specificate da te. trasformazioni basate su chiavi in job di flussi di dati.

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 flussi di dati creati prima del 7 marzo 2024, le chiavi dei dati vengono utilizzate nelle come windowing, raggruppamento e unione, non sono protette da CMEK la crittografia. 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 Dataflow e utilizzati per archiviazione dello stato di shuffling e flussi di dati.
  • Dataflow: Riproduzione casuale per le pipeline in modalità batch.
  • Bucket Cloud Storage in cui vengono archiviati dati di esportazione o importazione temporanei. Dataflow supporta solo le chiavi predefinite impostate dall'utente nella a livello di bucket.
  • Bucket Cloud Storage utilizzati per archiviare file binari contenenti codice della pipeline. Dataflow supporta solo le chiavi predefinite impostate dal a livello di bucket.
  • I bucket Cloud Storage utilizzati per archiviare i dati della pipeline campionati, quando il campionamento dei dati sia abilitato.
  • Stato di Dataflow Streaming Engine per pipeline in modalità flusso.

Chiavi esterne

Puoi utilizzare Cloud External Key Manager (Cloud EKM) per criptare i dati all'interno di a 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 è più 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 Gestore di chiavi esterne Cloud.

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, vedi 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 che esegue 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 regionalizzati. La regione per la tua CMEK e la regione del job Dataflow deve essere lo stesso. 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 Cloud KMS CryptoKey Encrypter/Decrypter role al Account di servizio Compute Engine. 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 tuo progetto Google Cloud che che esegue Cloud KMS e sostituisca PROJECT_NUMBER con numero di progetto (non l'ID progetto) del tuo progetto Google Cloud che che eseguono le risorse Compute Engine.

Creare una pipeline protetta da Cloud KMS

Quando crei una pipeline in modalità flusso o batch, puoi selezionare 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. È 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

Vai

Dataflow non supporta la creazione di valori predefiniti i percorsi Cloud Storage per i file temporanei quando si utilizza un 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 da utilizzare
              una chiave di proprietà 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.

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. Per visualizzare il tipo di chiave, nel riquadro laterale Informazioni job, controlla 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 è 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 è elencato nel campo Tipo di crittografia.

Interfaccia a riga di comando

Esegui il comando describe utilizzando l'interfaccia a riga di comando gcloud:

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 della chiave Cloud KMS tramite la visualizzazione Audit log di Cloud KMS.

Disabilita o elimina la chiave

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

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

Se utilizzi l'opzione Streaming Engine, snapshot dello è consigliabile eseguire il 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 Cloud KMS CryptoKey Encrypter/Decrypter ruolo all'account di servizio Dataflow utilizzando la console Google Cloud o l'interfaccia a riga di comando gcloud.
  2. Revoca Cloud KMS CryptoKey Encrypter/Decrypter role al Account di servizio Compute Engine utilizzando Console Google Cloud o gcloud CLI.
  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 sia possibile eliminare il materiale della versione della chiave, non può eliminare chiavi e 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 Chiave Cloud KMS. 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 la pulizia delle risorse Google Cloud collegati al tuo job.

Utilizza origini e sink protetti con 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 le tue La pipeline Dataflow potrebbe creare nuovi oggetti in un sink, devi per definire i parametri della pipeline. Questi parametri specificano le chiavi Cloud KMS corrispondenti sink e passa questa chiave Cloud KMS ai metodi del 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 chiavi Cloud KMS, verifica che hai assegnato a Cloud KMS CryptoKey Encrypter/Decrypter role completamente gestito di Google Cloud. 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() 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 nella Repository GitHub di Apache Beam.

Vai

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 il tuo configurazione CMEK per 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 della chiave Cloud KMS

Dataflow consente a Cloud KMS di utilizzare gli audit log di Cloud 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 per un job Dataflow viene usata una chiave Cloud KMS specifica.

Cloud Audit Logs gestisce gli audit log per ogni progetto, cartella e organizzazione Google Cloud. Hai a disposizione diverse opzioni per visualizzare 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 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. Audit log degli accessi 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 dall'utente. Per istruzioni su come abilitare alcuni o tutti gli audit log di accesso ai dati, consulta la pagina 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 oltre alle operazioni chiave, che vengono fatturate al tuo account Google Cloud progetto. Ogni volta che il service account 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 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 indicato 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 come job Dataflow.