Per impostazione predefinita, Dataflow cripta i contenuti inattivi dei clienti. 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 servizi integrati con CMEK, tra cui Dataflow. L'utilizzo delle chiavi Cloud KMS ti consente di controllare il livello di protezione, la località, la pianificazione della rotazione, le autorizzazioni di utilizzo e di accesso e i limiti crittografici. Con Cloud KMS puoi inoltre visualizzare gli audit log e controllare i cicli di vita delle chiavi. Invece di Google, sei tu ad avere la proprietà e la gestione delle chiavi di crittografia della chiave (KEK) simmetriche che proteggono i tuoi dati. Puoi controllare e gestire queste chiavi in Cloud KMS.
Dopo aver configurato le risorse con le 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 batch o di streaming protetta con una CMEK o accedere ai dati protetti da CMEK nelle origini e nei sink.
Quote di Cloud KMS e Dataflow
Quando utilizzi CMEK in Dataflow, i tuoi progetti possono consumare le quote di richieste di crittografia di Cloud KMS. Ad esempio, le pipeline Dataflow possono consumare queste quote quando la pipeline accede ai dati protetti da CMEK nelle origini e nei sink o quando viene recuperato lo stato di una pipeline criptata con CMEK. Per saperne di più, 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 di Cloud KMS.
- Per le chiavi CMEK esterne, a volte chiamate chiavi Cloud EKM, le operazioni di crittografia e decriptazione vengono conteggiate ai fini delle quote di Cloud EKM nel progetto che contiene la chiave.
Per saperne di più, consulta Quote di Cloud KMS.
Supporto e limitazioni
Cloud KMS è supportato nelle seguenti versioni dell'SDK Apache Beam:
- SDK Java versione 2.13.0 e successive
- SDK Python versione 2.13.0 e successive
- SDK Go versione 2.40.0 e successive
Cloud KMS con Dataflow supporta le chiavi regionali. Se esegui l'override della regione o della zona dei worker della pipeline per utilizzare una regione diversa da quella associata alle chiavi, le chiavi regionali non funzionano.
La regione della chiave CMEK e la regione del 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 che una pipeline Dataflow legge dalle origini dati specificate dall'utente sono criptati, ad eccezione delle chiavi dati specificate per le trasformazioni basate su chiavi nei job di flussi di dati.
Per i job batch, tutti i dati, incluse le chiavi dati specificate per le trasformazioni basate su chiavi, sono sempre protetti dalla crittografia CMEK.
Per i job di flussi di dati creati dopo il 7 marzo 2024, tutti i dati utente sono 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 attivare questa crittografia per i tuoi job, svuota o annulla il job, quindi riavvialo.
I metadati dei 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 parametro dei job e grafico della pipeline
- Dati generati dal sistema, come ID job e indirizzi IP dei worker
Crittografia delle posizioni dello stato della pipeline
Le seguenti località di archiviazione sono protette con le chiavi Cloud KMS:
- Dischi permanenti collegati ai worker Dataflow e utilizzati per l'archiviazione dello stato di shuffling e flussi di dati basata su Persistent Disk.
- Stato di Dataflow Shuffle per le pipeline batch.
- Bucket Cloud Storage che archiviano dati di esportazione o importazione temporanei. Dataflow supporta solo le chiavi predefinite impostate dall'utente a livello di bucket.
- Bucket Cloud Storage utilizzati per archiviare i 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 il campionamento dei dati è abilitato.
- Stato di Dataflow Streaming Engine per le pipeline di streaming.
Chiavi esterne
Puoi utilizzare Cloud External Key Manager (Cloud EKM) per criptare i dati all'interno diGoogle 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
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 o l'SDK Apache Beam per Go 2.40.0 o versioni successive.
Per saperne di più, consulta Installazione dell'SDK Apache Beam.
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 in cui è in esecuzione Dataflow.PROJECT_NUMBERè il numero di progetto 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.
Nel progetto Google Cloud in cui vuoi eseguire Cloud KMS:
- Abilita l'API Cloud KMS.
- Crea chiavi automatizzate e una chiave come descritto in Creazione di chiavi simmetriche. Cloud KMS e Dataflow sono entrambi servizi regionalizzati. La regione del CMEK e la regione del job Dataflow devono essere le stesse. Non utilizzare chiavi globali o multiregionali con le pipeline Dataflow. Utilizza invece le chiavi regionali.
Concedi le autorizzazioni di crittografia/decrittografia
Assegna il ruolo
Cloud KMS CryptoKey Encrypter/Decrypteral service account Dataflow. Questa autorizzazione concede al tuo account di servizio Dataflow l'autorizzazione per criptare e decriptare con la CMEK specificata. 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. \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Sostituisci
KMS_PROJECT_IDcon l'ID del tuo progetto Google Cloud in cui è in esecuzione Cloud KMS e sostituisciPROJECT_NUMBERcon il numero di progetto (non l'ID progetto) del tuo progetto Google Cloud in cui sono in esecuzione le risorse Dataflow.Assegna il ruolo
Cloud KMS CryptoKey Encrypter/Decrypteral service account 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. \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Sostituisci
KMS_PROJECT_IDcon l'ID del tuo progetto Google Cloud che esegue Cloud KMS e sostituisciPROJECT_NUMBERcon 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 è costituito dai dati archiviati da Dataflow nello spazio di archiviazione temporaneo.
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 mostra l'esecuzione di una pipeline di conteggio delle parole con Cloud KMS.
Utilizza Autokey
Se non l'hai ancora fatto, attiva Cloud KMS Autokey.
Per utilizzare Autokey con le pipeline create dalla riga di comando, segui
Utilizza 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 utilizzi una chiave Cloud KMS. È necessario 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 utilizzi una chiave Cloud KMS. È necessario 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 utilizzi una chiave Cloud KMS. È necessario 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
ConsoleGoogle Cloud
- Apri l'interfaccia di monitoraggio di Dataflow.
Vai all'interfaccia web di Dataflow - Seleziona Crea job da modello.
- Nella sezione Crittografia, seleziona Chiave gestita dal cliente.
La prima volta che tenti di eseguire un job con una determinata chiave Cloud KMS, è possibile che al tuo service account Compute Engine o service account Dataflow non siano 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 al account di servizio.
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
- Apri l'interfaccia di monitoraggio di Dataflow.
Vai all'interfaccia web di Dataflow - Per visualizzare i dettagli del job, seleziona il job Dataflow.
- 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"
- Per Tipo di crittografia: "Chiave gestita dal cliente"
- Per Tipo di crittografia: "Chiave gestita da Google"
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 la crittografia di origini e sink utilizzando le pagine e gli strumenti della console Google Cloud di queste origini e 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.
Disattiva o elimina la chiave
Se per qualsiasi motivo devi disabilitare o distruggere la chiave, puoi utilizzare la consoleGoogle Cloud . Entrambe le operazioni di disattivazione e distruzione annullano i job che utilizzano la chiave. Questa azione è permanente.
Se utilizzi Cloud EKM, disabilita o distruggi 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.
Rimuovi l'accesso di Dataflow alla chiave Cloud KMS
Puoi rimuovere l'accesso di Dataflow alla chiave Cloud KMS seguendo questi passaggi:
- Revoca il ruolo
Cloud KMS CryptoKey Encrypter/Decrypteral service account Dataflow utilizzando la consoleGoogle Cloud o gcloud CLI. - Revoca il ruolo
Cloud KMS CryptoKey Encrypter/Decrypteral service account Compute Engine utilizzando la consoleGoogle Cloud o gcloud CLI. - Facoltativamente, puoi anche distruggere il materiale della versione della chiave per impedire ulteriormente a Dataflow e ad altri servizi di accedere allo stato della pipeline. Puoi anche eliminare la chiave o la versione della chiave per rimuoverle dagli elenchi delle tue risorse Cloud KMS.
Non puoi eliminare le chiavi automatizzate, ma non hanno costi fatturabili o limitazioni di quota, quindi la loro esistenza continua non influisce sui costi o sui limiti di produzione.
I job Dataflow convalidano periodicamente se il service account 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 l'acquisizione e l'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 alle origini e alle destinazioni Google Cloud protette da chiavi Cloud KMS. Se non crei nuovi oggetti, non è necessario specificare la chiave Cloud KMS di queste origini e destinazioni. Se la tua 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 non sono rilevanti.
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. - BigQuery:
bq-{project_number}@bigquery-encryption. - Pub/Sub:
service-{project_number}@gcp-sa-pubsub.
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 Configura i 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
Gli I/O 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 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, ad esempio la crittografia e la decriptazione. 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 diverse opzioni per visualizzare gli audit log 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 disattivare 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 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'attivazione di 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 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 tua chiave Cloud KMS, l'operazione viene fatturata in base alle tariffe delle operazioni relative alle chiavi di Cloud KMS.
Per ulteriori informazioni, consulta i dettagli dei prezzi di Cloud KMS.
Risoluzione dei problemi
Utilizza i suggerimenti in questa sezione per risolvere i problemi.
Impossibile convalidare Cloud KMS
Il workflow 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 possibili errori di battitura nel percorso della chiave.
Autorizzazione per la chiave Cloud KMS negata
Il workflow 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 workflow 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.