De forma predeterminada, Dataflow cifra el contenido del cliente en reposo. Dataflow se encarga del cifrado sin que tengas que hacer nada más. Esta opción se llama Cifrado predeterminado de Google.
Si quieres controlar tus claves de cifrado, puedes usar claves de cifrado gestionadas por el cliente (CMEKs) en Cloud KMS con servicios integrados con CMEKs, como Dataflow. Si usas claves de Cloud KMS, tendrás control sobre su nivel de protección, ubicación, calendario de rotación, permisos de uso y acceso, y límites criptográficos. Cloud KMS también te permite monitorizar el uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y el gestor de las claves de cifrado de claves (KEKs) simétricas que protegen tus datos, tú controlas y gestionas estas claves en Cloud KMS.
Una vez que hayas configurado tus recursos con CMEKs, la experiencia de acceder a tus recursos de Dataflow será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta Claves de encriptado gestionadas por el cliente (CMEK).
Puedes crear flujos de procesamiento por lotes o de streaming y protegerlos con claves de encriptado gestionadas por el cliente (CMEK), así como acceder a datos de fuentes y de sumideros que estén protegidos con ese tipo de claves.
CMEK con Autokey de Cloud KMS
Puedes crear CMEKs manualmente para proteger tus recursos de Dataflow o usar Autokey de Cloud KMS. Con Autokey, los conjuntos de claves y las claves se generan a petición como parte de la creación o actualización de recursos en Dataflow. Los agentes de servicio que usan las claves para las operaciones de cifrado y descifrado se crean si aún no existen y se les asignan los roles de gestión de identidades y accesos (IAM) necesarios. Para obtener más información, consulta la descripción general de Autokey.
Para saber cómo usar las claves CMEK creadas manualmente para proteger tus recursos de Dataflow, consulta Crear una canalización protegida por Cloud KMS.
Para usar las CMEKs creadas por Autokey de Cloud KMS para proteger tus recursos de Dataflow, sigue los pasos que se indican en Usar Autokey con recursos de Dataflow para generar una clave y, a continuación, consulta Crear una canalización protegida por Cloud KMS.
Cuotas de Cloud KMS y Dataflow
Cuando usas CMEK en Dataflow, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS. Por ejemplo, los flujos de procesamiento de Dataflow pueden consumir estas cuotas cuando tu flujo de procesamiento accede a datos protegidos con CMEK en fuentes y sumideros, o cuando se recupera el estado de un flujo de procesamiento cifrado con CMEK. Para obtener más información, consulta la sección Cifrado de ubicaciones de estado de la canalización de esta página.
Las operaciones de encriptado y desencriptado con claves CMEK afectan a las cuotas de Cloud KMS de las siguientes formas:
- En el caso de las claves de CMEK de software generadas en Cloud KMS, no se consume ninguna cuota de Cloud KMS.
- En el caso de las claves CMEK de hardware (a veces denominadas claves de Cloud HSM), las operaciones de cifrado y descifrado se contabilizan en las cuotas de Cloud HSM del proyecto que contiene la clave.
- En el caso de las claves CMEK externas (a veces denominadas claves de Cloud EKM), las operaciones de cifrado y descifrado se contabilizan en las cuotas de Cloud EKM del proyecto que contiene la clave.
Para obtener más información, consulta las cuotas de Cloud KMS.
Compatibilidad y limitaciones
Cloud KMS es compatible con las siguientes versiones del SDK de Apache Beam:
- Versiones 2.13.0 y posteriores del SDK de Java
- Versiones 2.13.0 y posteriores del SDK de Python
- Versiones 2.40.0 y posteriores del SDK de Go
Cloud KMS con Dataflow admite claves regionales. Si anulas la región o la zona del trabajador de la canalización para usar una región distinta de la asociada a tus claves, las claves regionales no funcionarán.
La región de tu CMEK y la región de tu trabajo de Dataflow deben ser las mismas.
No se admiten las ubicaciones globales ni las de varias regiones. No puedes usar claves globales ni multirregionales con las canalizaciones de Dataflow.
Cifrado de artefactos de estado de la canalización
Los datos que lee una canalización de Dataflow de las fuentes de datos especificadas por el usuario se cifran, excepto las claves de datos que especifique para las transformaciones basadas en claves en las tareas de streaming.
En el caso de las tareas por lotes, todos los datos, incluidas las claves de datos que especifiques para las transformaciones basadas en claves, siempre están protegidos mediante el cifrado con CMEK.
En el caso de las tareas de streaming creadas después del 7 de marzo del 2024, todos los datos de usuario se cifran con CMEK.
En los trabajos de streaming creados antes del 7 de marzo del 2024, las claves de datos que se usan en operaciones basadas en claves, como las de ventana, agrupación y unión, no están protegidas con el cifrado CMEK. Para habilitar este cifrado en tus tareas, desvía o cancela la tarea y, a continuación, reiníciala.
Los metadatos de los trabajos no se cifran con claves de Cloud KMS. Los metadatos de tareas incluyen lo siguiente:
- Datos proporcionados por el usuario, como nombres de trabajos, valores de parámetros de trabajos y gráficos de canalizaciones
- Datos generados por el sistema, como los IDs de los trabajos y las direcciones IP de los trabajadores
Cifrado de las ubicaciones de estado de la canalización
Las siguientes ubicaciones de almacenamiento están protegidas con claves de Cloud KMS:
- Discos persistentes conectados a los trabajadores de Dataflow y utilizados para el almacenamiento de estado de streaming y de la operación de mezcla basada en discos persistentes.
- Estado de Shuffle de Dataflow para flujos de procesamiento por lotes.
- Segmentos de Cloud Storage que almacenan datos temporales de exportación o importación. Dataflow solo admite las claves predeterminadas definidas por el usuario a nivel de contenedor.
- Segmentos de Cloud Storage que se usan para almacenar archivos binarios que contienen código de la canalización. Dataflow solo admite las claves predeterminadas definidas por el usuario a nivel de contenedor.
- Segmentos de Cloud Storage que se usan para almacenar datos de canalización muestreados cuando la muestra de datos está habilitada.
- Estado de Streaming Engine de Dataflow para flujos de procesamiento de streaming.
Claves externas
Puedes usar Cloud External Key Manager (Cloud EKM) para cifrar datos en Google Cloud Platform con claves externas que tú gestionas.
Cuando usas una clave de Cloud EKM, Google no tiene control sobre la disponibilidad de tu clave gestionada de forma externa. Si la clave deja de estar disponible durante el trabajo o el periodo de creación de la canalización, el trabajo o la canalización se cancelarán.
Para obtener más información sobre las consideraciones que debes tener en cuenta al usar claves externas, consulta Cloud External Key Manager.
Antes de empezar
Comprueba que tengas el SDK de Apache Beam para Java 2.13.0 o una versión posterior, el SDK de Apache Beam para Python 2.13.0 o una versión posterior, o el SDK de Apache Beam para Go 2.40.0 o una versión posterior.
Para obtener más información, consulta Instalar el SDK de Apache Beam.
Decide si vas a ejecutar Dataflow y Cloud KMS en el mismo proyecto de Google Cloud Platform o en proyectos diferentes. En esta página se utiliza la siguiente convención:
PROJECT_ID
es el ID del proyecto que ejecuta Dataflow.PROJECT_NUMBER
es el número del proyecto que ejecuta Dataflow.KMS_PROJECT_ID
es el ID del proyecto que ejecuta Cloud KMS.
Para obtener información sobre los IDs y los números de proyecto, consulta el artículo sobre cómo identificar proyectos. Google Cloud
En el Google Cloud proyecto en el que quieras ejecutar Cloud KMS, haz lo siguiente:
- Habilita la API Cloud KMS.
- Crea un conjunto de claves y una clave como se describe en Crear claves simétricas. Cloud KMS y Dataflow son servicios regionalizados. La región de tu CMEK y la región de tu tarea de Dataflow deben ser las mismas. No uses claves globales ni multirregionales con tus canalizaciones de Dataflow. En su lugar, usa las teclas regionales.
Conceder permisos de Encrypter/Decrypter
Asigna el
Cloud KMS CryptoKey Encrypter/Decrypter
rol a la cuenta de servicio de Dataflow. Este permiso concede a tu cuenta de servicio de Dataflow el permiso para cifrar y descifrar con la CMEK que especifiques. Si usas la consola y la página Crear trabajo a partir de plantilla, este permiso se concede automáticamente y puedes saltarte este paso.Google CloudUsa Google Cloud CLI para asignar el rol:
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
Sustituye
KMS_PROJECT_ID
por el ID del proyecto Google Cloud que ejecuta Cloud KMS yPROJECT_NUMBER
por el número de proyecto (no el ID del proyecto) del proyecto Google Cloud que ejecuta los recursos de Dataflow.Asigna el
Cloud KMS CryptoKey Encrypter/Decrypter
rol a la cuenta de servicio de Compute Engine. Este permiso otorga a tu cuenta de servicio de Compute Engine el permiso para cifrar y descifrar con la CMEK que especifiques.Usa Google Cloud CLI para asignar el rol:
gcloud projects add-iam-policy-binding KMS_PROJECT_ID \ --member serviceAccount:service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Sustituye
KMS_PROJECT_ID
por el ID del proyecto Google Cloud que ejecuta Cloud KMS yPROJECT_NUMBER
por el número de proyecto (no el ID del proyecto) del proyecto Google Cloud que ejecuta los recursos de Compute Engine.
Crear una canalización protegida por Cloud KMS
Cuando creas una canalización por lotes o de streaming, puedes seleccionar una clave de Cloud KMS para cifrar el estado de la canalización. El estado de la canalización son los datos que Dataflow almacena en el almacenamiento temporal.
Interfaz de línea de comandos
Para crear una canalización con un estado protegido por una clave de Cloud KMS, añade la marca correspondiente a los parámetros de la canalización. En el siguiente ejemplo se muestra cómo ejecutar una canalización de recuento de palabras con Cloud KMS.
Usar Autokey
Si aún no lo has hecho, habilita Autokey de Cloud KMS.
Para usar Autokey con las canalizaciones creadas desde la línea de comandos, siga las instrucciones de la sección Usar Autokey con recursos de Dataflow para aprovisionar una clave y, a continuación, úsela en lugar de KMS_KEY
.
Java
Dataflow no admite la creación de rutas de Cloud Storage predeterminadas para archivos temporales cuando se usa una clave de Cloud KMS. Es obligatorio especificar 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 no admite la creación de rutas de Cloud Storage predeterminadas para archivos temporales cuando se usa una clave de Cloud KMS. Es obligatorio especificar 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 no admite la creación de rutas de Cloud Storage predeterminadas para archivos temporales cuando se usa una clave de Cloud KMS. Es obligatorio especificar 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 consola
- Abre la interfaz de monitorización de Dataflow.
Ir a la interfaz web de Dataflow - Selecciona Crear tarea a partir de plantilla.
- En la sección Cifrado, selecciona Clave gestionada por el cliente.

La primera vez que intentes ejecutar un trabajo con una clave de Cloud KMS concreta, es posible que tu cuenta de servicio de Compute Engine o tu cuenta de servicio de Dataflow no tengan los permisos para cifrar y descifrar con esa clave. En ese caso, aparecerá un mensaje de advertencia para pedirte que concedas el permiso a tu cuenta de servicio.

Verificar el uso de claves de Cloud KMS
Puedes verificar si tu canalización usa una clave de Cloud KMS mediante laGoogle Cloud consola o la CLI de Google Cloud.
Consola
- Abre la interfaz de monitorización de Dataflow.
Ir a la interfaz web de Dataflow - Para ver los detalles de un trabajo, selecciona el trabajo de Dataflow.
- En el panel lateral Información del trabajo, consulta el campo Tipo de cifrado para ver el tipo de clave.
- En Tipo de cifrado, selecciona "Clave gestionada por Google".
- En Tipo de cifrado, selecciona "Clave gestionada por el cliente".
- En Tipo de cifrado, selecciona "Clave gestionada por Google".
CLI
Ejecuta el comando describe
con la interfaz de línea de comandos de gcloud:
gcloud dataflow jobs describe JOB_ID
Busca la línea que contenga serviceKmsKeyName
. Esta información muestra que se ha usado una clave de Cloud KMS para cifrar el estado de la canalización de Dataflow.
Puedes verificar el uso de las claves de Cloud KMS para cifrar fuentes y receptores mediante las páginas de la consola y las herramientas de esas fuentes y receptores, como Pub/Sub, Cloud Storage y BigQuery. Google Cloud También puedes verificar el uso de las claves de Cloud KMS consultando los registros de auditoría de Cloud KMS.
Inhabilitar o destruir la clave
Si por algún motivo necesitas inhabilitar o destruir la clave, puedes usar la consolaGoogle Cloud . Tanto la inhabilitación como la destrucción cancelan los trabajos que usan esa clave. Esta operación es permanente.
Si usas Cloud EKM, inhabilita o destruye la clave en tu gestor de claves externo.
Si usas la opción Streaming Engine, te recomendamos que hagas una instantánea del trabajo antes de inhabilitar la clave.
Quitar el acceso de Dataflow a la clave de Cloud KMS
Para quitar el acceso de Dataflow a la clave de Cloud KMS, sigue estos pasos:
- Revoca el
Cloud KMS CryptoKey Encrypter/Decrypter
rol de la cuenta de servicio de Dataflow mediante la Google Cloud consola o gcloud CLI. - Revoca el
Cloud KMS CryptoKey Encrypter/Decrypter
rol de la cuenta de servicio de Compute Engine mediante la consolaGoogle Cloud o gcloud CLI. - También puedes destruir el material de la versión de la clave para evitar que Dataflow y otros servicios accedan al estado de la canalización.
Aunque puedes destruir el material de la versión de la clave, no puedes eliminar claves ni conjuntos de claves. Dado que ni los conjuntos de claves ni las claves tienen costes facturables ni limitaciones de cuota, su existencia no afectará a los costes ni a los límites de producción.
Las tareas de Dataflow validan periódicamente si la cuenta de servicio de Dataflow puede usar correctamente la clave de Cloud KMS proporcionada. Si falla una solicitud de cifrado o descifrado, el servicio Dataflow detendrá todas las operaciones de ingestión y procesamiento de datos lo antes posible. Dataflow empieza inmediatamente a limpiar los Google Cloud recursos asociados a tu tarea.
Usar fuentes y receptores protegidos con claves de Cloud KMS
Dataflow puede acceder a Google Cloud fuentes y sumideros protegidos por claves de Cloud KMS. Si no vas a crear objetos, no es necesario que especifiques la clave de Cloud KMS de esas fuentes y receptores. Si tu pipeline de Dataflow puede crear objetos nuevos en un receptor, debes definir parámetros de pipeline. Estos parámetros especifican las claves de Cloud KMS de ese receptor y transfieren esta clave de Cloud KMS a los métodos del conector de E/S correspondientes.
En el caso de las fuentes y los sumideros de las canalizaciones de Dataflow que no admiten CMEKs gestionadas por Cloud KMS, la configuración de CMEK de Dataflow no es relevante.
Permisos de clave de Cloud KMS
Cuando accedas a servicios protegidos con claves de Cloud KMS, comprueba que has asignado el Cloud KMS CryptoKey Encrypter/Decrypter
rol a ese servicio. Las cuentas tienen el siguiente 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
Si quieres proteger los segmentos de almacenamiento provisionales y de almacenamiento por fases que hayas especificado con los parámetros de canalización TempLocation
/temp_location
y stagingLocation
/staging_location
, consulta cómo configurar segmentos de Cloud Storage protegidos con CMEK.
BigQuery
Java
Usa el método with_kms_key()
en los valores devueltos de BigQueryIO.readTableRows()
, BigQueryIO.read()
, BigQueryIO.writeTableRows()
y BigQueryIO.write()
.
Puedes consultar un ejemplo en el repositorio de GitHub de Apache Beam.
Python
Usa el argumento kms_key
en BigQuerySource y BigQuerySink.
Puedes consultar un ejemplo en el repositorio de GitHub de Apache Beam.
Go
Las entradas y salidas de BigQuery no admiten el uso de la clave de KMS en Go.
Pub/Sub
Dataflow gestiona el acceso a los temas protegidos con CMEK mediante la configuración de CMEK de los temas.
Para leer y escribir en temas de Pub/Sub protegidos con CMEK, consulta las instrucciones de Pub/Sub para usar CMEK.
Registro de auditoría del uso de claves de Cloud KMS
Dataflow permite que Cloud KMS use Cloud Audit Logs para registrar las operaciones de claves, como las de encriptación y desencriptación. Dataflow proporciona el ID de la tarea como contexto a un llamador de Cloud KMS. Este ID te permite monitorizar cada instancia en la que se usa una clave de Cloud KMS específica en una tarea de Dataflow.
Los registros de auditoría de Cloud mantienen registros de auditoría de cada proyecto, carpeta y organización de Google Cloud Platform. Tiene varias opciones para ver sus registros de auditoría de Cloud KMS.
Cloud KMS escribe registros de auditoría de actividad de administración para tus trabajos de Dataflow con cifrado CMEK. Estos registros registran las operaciones que modifican la configuración o los metadatos de un recurso. No puedes inhabilitar los registros de auditoría de actividad administrativa.
Si se habilita explícitamente, Cloud KMS escribe registros de auditoría de acceso a datos para tus tareas de Dataflow con cifrado CMEK. Los registros de auditoría de acceso a los datos contienen llamadas a la API que leen la configuración o los metadatos de los recursos. Estos registros también contienen llamadas a la API iniciadas por el usuario que crean, modifican o leen datos de recursos proporcionados por el usuario. Para obtener instrucciones sobre cómo habilitar algunos registros de auditoría de acceso a datos o todos ellos, consulta el artículo sobre cómo configurar registros de acceso a datos.
Precios
Puedes usar claves de encriptado de Cloud KMS con Dataflow en todas las regiones de Dataflow en las que esté disponible Cloud KMS.
Esta integración no conlleva costes adicionales más allá de las operaciones clave, que se facturan a tu proyecto Google Cloud. Cada vez que la cuenta de servicio de Dataflow usa tu clave de Cloud KMS, la operación se factura según la tarifa de las operaciones con claves de Cloud KMS.
Para obtener más información, consulta los detalles de los precios de Cloud KMS.
Solución de problemas
Sigue las sugerencias de esta sección para solucionar los errores.
No se puede validar Cloud KMS
Es posible que el flujo de trabajo falle y se muestre el siguiente error:
Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.
Para solucionar este problema, comprueba que has introducido la ruta completa de la clave. Parece que projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
. Busca posibles errores ortográficos en la ruta de la clave.
Se ha denegado el permiso de clave de Cloud KMS
Es posible que el flujo de trabajo falle y se muestre el siguiente error:
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.
Para solucionar este problema, compruebe que el ID de proyecto mencionado en la ruta de la clave sea correcto. Además, comprueba que tienes el permiso para usar la clave.
La ubicación de la clave de Cloud KMS no coincide con la ubicación de la tarea de Dataflow
Es posible que el flujo de trabajo falle y se muestre el siguiente error:
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.
Para solucionar este problema, si usas una clave regional, comprueba que la clave de Cloud KMS esté en la misma región que el trabajo de Dataflow.