Utilizzo delle chiavi di crittografia gestite dal cliente

Per impostazione predefinita, Dataflow cripta i contenuti dei clienti at-rest. Dataflow gestisce la crittografia per tuo conto 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 servizi integrati con CMEK, tra cui Dataflow. 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 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 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 origini e sink.

CMEK con Autokey di Cloud KMS

Puoi creare CMEK manualmente per proteggere le risorse Dataflow o utilizzare Cloud KMS Autokey. Con Autokey, le chiavi normali e automatizzate vengono generate on demand durante la creazione o l'aggiornamento delle risorse in Dataflow. Gli agenti di servizio che utilizzano le chiavi per le operazioni di crittografia e decrittografia vengono creati se non esistono già e vengono concessi i ruoli IAM (Identity and Access Management) richiesti. Per ulteriori informazioni, consulta la panoramica di Autokey.

Per scoprire come utilizzare le chiavi CMEK create manualmente per proteggere le risorse Dataflow, consulta Crea una pipeline protetta da Cloud KMS.

Per utilizzare le chiavi CMEK create da Cloud KMS Autokey per proteggere le risorse Dataflow, segui i passaggi forniti per Dataflow in Utilizzo di Autokey con le risorse Dataflow per generare una chiave, quindi segui Creare una pipeline protetta da Cloud KMS.

Quote Cloud KMS e Dataflow

Quando utilizzi CMEK in Dataflow, i tuoi progetti possono utilizzare le quote per le richieste crittografiche di Cloud KMS. Ad esempio, le pipeline Dataflow possono utilizzare queste quote quando accedono 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 dello stato della pipeline in questa pagina.

Le operazioni di crittografia e decriptazione che utilizzano 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 in base alle 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 in base alle 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:

    • Versioni dell'SDK Java 2.13.0 e 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 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 tua CMEK e la regione per il tuo job Dataflow devono essere le stesse.

  • 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 vengono criptati, ad eccezione delle chiavi dei dati specificate per le trasformazioni basate su chiavi nei job di streaming.

Per i job batch, tutti i dati, incluse le chiavi dei dati che specifichi per le trasformazioni basate sulle 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 dei dati utilizzate nelle operazioni basate sulle chiavi, come la creazione di finestre, il raggruppamento e l'unione, non sono protette dalla crittografia CMEK. Per abilitare questa crittografia per i tuoi job, svuota o annulla il job e poi riavvialo.

I metadati del job non sono criptati con le chiavi Cloud KMS. I metadati del job includono quanto segue:

  • Dati forniti dall'utente, come 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 lo shuffle basato su Persistent Disk e l'archiviazione dello stato di streaming.
  • Stato di Shuffle di Dataflow per le pipeline batch.
  • Bucket Cloud Storage che archiviano i dati temporanei di esportazione o importazione. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di bucket.
  • Bucket Cloud Storage utilizzati 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 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 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'utilizzo di chiavi esterne, consulta Cloud External Key Manager.

Prima di iniziare

  1. Verifica di avere l'Apache Beam SDK per Java 2.13.0 o versioni successive, l'Apache Beam SDK per Python 2.13.0 o versioni successive oppure l'Apache Beam SDK per Go 2.40.0 o versioni successive.

    Per saperne di più, consulta la sezione 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 progetto del progetto che esegue Dataflow.
    • PROJECT_NUMBER è il numero del progetto che esegue Dataflow.
    • KMS_PROJECT_ID è l'ID progetto del progetto che esegue 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 chiavi automatizzate e una chiave come descritto in Creazione di chiavi simmetriche. Cloud KMS e Dataflow sono entrambi servizi regionalizzati. La regione per la tua chiave CMEK e la regione del tuo job Dataflow devono essere le stesse. Non utilizzare chiavi globali o multiregionali con le pipeline Dataflow. Utilizza invece tasti regionali.

Concedere le autorizzazioni di crittografia/decrittografia

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

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

    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 esegue Cloud KMS e sostituisci PROJECT_NUMBER con il numero di progetto (non l'ID progetto) del tuo progetto Google Cloud che esegue le risorse Compute Engine.

Crea una pipeline protetta da Cloud KMS

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

Interfaccia a riga di comando

Per creare una nuova pipeline con uno 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.

Utilizzare Autokey

Se non l'hai ancora fatto, attiva Cloud KMS Autokey.

Per utilizzare Autokey con le pipeline create dalla riga di comando, segui le istruzioni riportate in Utilizzo di Autokey con le risorse Dataflow per eseguire il provisioning di una chiave, quindi utilizzala al posto di KMS_KEY.

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

Google Cloud console

  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 dal modello da utilizzare
              una chiave Google-owned and Google-managed encryption key o gestita dal cliente.

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

Ti chiede di concedere le autorizzazioni per criptare e decriptare sui tuoi service account 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 consoleGoogle 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 sul job, per visualizzare il tipo di chiave, controlla il campo Tipo di crittografia.

    • Per Tipo di crittografia: "Chiave gestita da Google"
      Il riquadro laterale Informazioni sul job elenca i dettagli di un job Dataflow.
      Il tipo di chiave utilizzato dal job è elencato nel campo Tipo di crittografia.
    • Per Tipo di crittografia: "Chiave gestita dal cliente"
      Il riquadro laterale Informazioni sul job 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 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 criptare origini e sink utilizzando le pagine e gli strumenti della console di queste origini e sink, tra cui Pub/Sub, Cloud Storage e BigQuery. Google Cloud Puoi anche verificare l'utilizzo delle chiavi Cloud KMS visualizzando i log di controllo di Cloud KMS.

Disattivare o eliminare la chiave

Se per qualsiasi motivo devi disattivare o eliminare la chiave, puoi utilizzare la consoleGoogle Cloud . Le operazioni di disattivazione ed eliminazione 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, ti consigliamo di acquisire uno snapshot del job prima di disattivare la chiave.

Rimuovere l'accesso di Dataflow alla chiave Cloud KMS

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

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

Sebbene tu possa eliminare il materiale della versione 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 verificano periodicamente se il service account 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 l'importazione e l'elaborazione di tutti i dati il prima possibile. Dataflow inizia immediatamente a ripulire le risorse Google Cloud associate al tuo job.

Utilizza origini e sink protetti con chiavi Cloud KMS

Dataflow può accedere a sorgenti e sink protetti da chiavi Cloud KMS. Google Cloud Se non crei nuovi oggetti, non devi specificare la chiave Cloud KMS di queste origini e destinazioni. 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 quel sink e passano questa chiave Cloud KMS ai metodi del connettore I/O appropriati.

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

Autorizzazioni per le chiavi Cloud KMS

Quando accedi a servizi protetti con chiavi Cloud KMS, verifica di aver assegnato il Cloud KMS CryptoKey Encrypter/Decrypter ruolo 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 staging che hai specificato con i parametri della pipeline TempLocation/temp_location e stagingLocation/staging_location, consulta Configurazione di 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

BigQuery IO non supporta 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 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 la registrazione delle 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 di una specifica chiave Cloud KMS utilizzata per un job Dataflow.

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

Cloud KMS scrive audit log delle attività di amministrazione per i tuoi 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 abilitato esplicitamente, Cloud KMS scrive 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 sull'abilitazione di alcuni o tutti gli audit log di accesso ai dati, consulta la pagina Configurazione dei log degli accessi ai dati.

Prezzi

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

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 relative alle chiavi di Cloud KMS.

Per maggiori informazioni, consulta Dettagli dei prezzi di Cloud KMS.

Risoluzione dei problemi

Utilizza i suggerimenti in questa sezione per risolvere gli errori.

Impossibile convalidare Cloud KMS

Il workflow potrebbe non riuscire a essere eseguito e restituire il seguente errore:

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

Per risolvere il problema, verifica di aver superato l'intero percorso della chiave. Sembra che projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>. Controlla che non ci siano errori di battitura nel percorso chiave.

Autorizzazione alla chiave Cloud KMS negata

Il workflow potrebbe non riuscire a essere eseguito e restituire 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 posizione della chiave Cloud KMS non corrisponde alla posizione del job Dataflow

Il workflow potrebbe non riuscire a essere eseguito e restituire 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.