De forma predeterminada, Dataflow encripta el contenido del cliente almacenado en reposo. Dataflow controla la encriptación por ti sin que debas realizar ninguna acción adicional. Esta opción se denomina Encriptación predeterminada de Google.
Si deseas controlar tus claves de encriptación, puedes usar las claves de encriptación administradas por el cliente (CMEK) en Cloud KMS con servicios integrados en CMEK, incluido Dataflow. El uso de claves de Cloud KMS te permite controlar su nivel de protección, ubicación, programa de rotación, permisos de uso y acceso, y límites criptográficos. El uso de Cloud KMS también te permite hacer un seguimiento del uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google posea y administre las claves de encriptación de claves (KEK) simétricas que protegen tus datos, tú las controlas y administras en Cloud KMS.
Después de configurar tus recursos con CMEK, la experiencia de acceso a tus recursos de Dataflow es similar a usar la encriptación predeterminada de Google. Para obtener más información sobre tus opciones de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).
Puedes crear una canalización por lotes o de transmisión que esté protegida con una CMEK o acceder a los datos protegidos por una CMEK en las fuentes y los receptores.
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, las canalizaciones de Dataflow pueden consumir estas cuotas cuando tu canalización accede a datos protegidos por CMEK en fuentes y receptores, o cuando se recupera el estado de una canalización encriptada con CMEK. Para obtener más información, consulta la sección Encriptación de ubicaciones del estado de las canalizaciones en esta página.
Las operaciones de encriptación y desencriptación con claves CMEK afectan las cuotas de Cloud KMS de las siguientes maneras:
- En el caso de las claves CMEK de software generadas en Cloud KMS, no se consume cuota de Cloud KMS.
- En el caso de las claves CMEK de hardware, a veces llamadas claves de Cloud HSM, las operaciones de encriptación y desencriptación se descuentan de las cuotas de Cloud HSM en el proyecto que contiene la clave.
- Para las claves CMEK externas, a veces llamadas claves de Cloud EKM, las operaciones de encriptación y desencriptación se descuentan de las cuotas de Cloud EKM del proyecto que contiene la clave.
Para obtener más información, consulta Cuotas de Cloud KMS.
Asistencia 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. Advertencia: Si anulas la región o la zona de trabajador de la canalización para usar una región distinta de la asociada con 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 iguales.
No se admiten ubicaciones multirregionales ni globales. No puedes usar claves globales y multirregionales con canalizaciones de Dataflow.
Encriptación de artefactos de estado de canalización
Los datos que una canalización de Dataflow lee de las fuentes de datos especificadas por el usuario se encriptan, excepto las claves de datos que especificas para las transformaciones basadas en claves en trabajos de transmisión.
En los trabajos por lotes, todos los datos, incluidas las claves de datos que especificas para las transformaciones basadas en claves, siempre están protegidos por la encriptación de CMEK.
Para los trabajos de transmisión creados después del 7 de marzo de 2024, todos los datos del usuario se encriptan con CMEK.
En los trabajos de transmisión creados antes del 7 de marzo de 2024, las claves de datos que se usan en las operaciones basadas en claves, como la renderización en ventanas, la agrupación y la unión, no están protegidas por la encriptación de CMEK. Para habilitar esta encriptación para tus trabajos, desvía o cancela el trabajo y, luego, reinícialo.
Los metadatos del trabajo no están encriptados con las claves de Cloud KMS. Los metadatos del trabajo incluyen lo siguiente:
- Datos proporcionados por el usuario, como nombres de trabajo, valores de parámetros de trabajo y gráfico de canalización
- Datos generados por el sistema, como los ID de trabajo y las direcciones IP de los trabajadores
Encriptación de ubicaciones de estado de canalización
Las siguientes ubicaciones de almacenamiento están protegidas con claves de Cloud KMS:
- Discos persistentes que se conectaron a trabajadores de Dataflow y se usaron para el almacenamiento de estado de transmisión y el shuffle basado en disco persistente
- Estado Shuffle de Dataflow para canalizaciones por lotes
- Depósitos de Cloud Storage que almacenan datos temporales de importación o exportación Dataflow solo admite las claves predeterminadas que establece el usuario en el nivel del bucket.
- Depósitos de Cloud Storage que se usan para almacenar archivos binarios que contienen código de canalización. Dataflow solo admite las claves predeterminadas que establece el usuario en el nivel del bucket.
- Buckets de Cloud Storage que se usan para almacenar datos de canalización de muestra, cuando el muestreo de datos está habilitado.
- Estado de Dataflow Streaming Engine para canalizaciones de transmisión.
Claves externas
Puedes usar Cloud External Key Manager (Cloud EKM) para encriptar datos en Google Cloud mediante claves externas que administras.
Cuando usas una clave de Cloud EKM, Google no tiene control sobre la disponibilidad de tu clave administrada de forma externa. Si la clave no está disponible durante el trabajo o el período de creación de la canalización, tu trabajo o canalización se cancela.
Para obtener más consideraciones sobre el uso de claves externas, consulta Cloud External Key Manager.
Antes de comenzar
Verifica que tienes 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 Instala el SDK de Apache Beam.
Decide si ejecutarás Dataflow y Cloud KMS en el mismo proyecto de Google Cloud o en proyectos diferentes. En esta página, se usa 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 números y los ID de los proyectos de Google Cloud, consulta la sección Identifica proyectos.
En el proyecto de Google Cloud en el que deseas ejecutar Cloud KMS, haz lo siguiente:
- Habilita la API de Cloud KMS.
- Crea un llavero de claves y una clave como se describe en Crea claves simétricas. Cloud KMS y Dataflow son servicios regionalizados. La región de tu CMEK y la región de tu trabajo de Dataflow deben ser iguales. No uses claves globales ni multirregionales con tus canalizaciones de Dataflow. En su lugar, usa las claves regionales.
Otorga permisos de encriptador/desencriptador
Asigna el rol
Cloud KMS CryptoKey Encrypter/Decrypter
a la cuenta de servicio de Dataflow. Este permiso le otorga a tu cuenta de servicio de Dataflow el permiso para encriptar y desencriptar contenido con la CMEK que especifiques. Si usas la consola de Google Cloud y la página Crea un trabajo a partir de una plantilla, este permiso se otorga de manera automática y puedes omitir este paso.Usa la 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
Reemplaza
KMS_PROJECT_ID
por el ID de tu proyecto de Google Cloud que ejecuta Cloud KMS y reemplazaPROJECT_NUMBER
por el número del proyecto (no el ID del proyecto) de Google Cloud que ejecuta los recursos de Dataflow.Asigna la función
Cloud KMS CryptoKey Encrypter/Decrypter
a la cuenta de servicio de Compute Engine. Esto le otorga a tu cuenta de servicio de Compute Engine el permiso para encriptar y desencriptar contenido con la CMEK que especifiques.Usa la 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
Reemplaza
KMS_PROJECT_ID
por el ID del proyecto de Google Cloud que ejecuta Cloud KMS y reemplazaPROJECT_NUMBER
por el número del proyecto (no el ID) de Google Cloud que ejecuta los recursos de Compute Engine.
Crea una canalización protegida por Cloud KMS
Cuando creas una canalización por lotes o de transmisión, puedes seleccionar una clave de Cloud KMS para encriptar 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 nueva con el estado de la canalización que esté protegida por una clave de Cloud KMS, agrega la marca correspondiente a los parámetros de la canalización. En el siguiente ejemplo, se demuestra cómo ejecutar una canalización de recuento de palabras con Cloud KMS.
Java
Dataflow no admite la creación de rutas de acceso predeterminadas de Cloud Storage para archivos temporales cuando se usa una clave de Cloud KMS. Debes 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 acceso predeterminadas de Cloud Storage para archivos temporales cuando se usa una clave de Cloud KMS. Debes 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 acceso predeterminadas de Cloud Storage para archivos temporales cuando se usa una clave de Cloud KMS. Debes 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
Consola de Google Cloud
- Abre la interfaz de supervisión de Dataflow.
Ir a la interfaz web de Dataflow - Selecciona Crear un trabajo a partir de una plantilla.
- En la sección Encryption (Encriptación), selecciona Customer-managed key (Clave administrada por el cliente).
La primera vez que intentes ejecutar un trabajo con una clave particular de Cloud KMS, tu cuenta de servicio de Compute Engine o tu cuenta de servicio de Dataflow podrían no tener los permisos para encriptar y desencriptar contenido con esa clave. En este caso, aparece un mensaje de advertencia que te solicita que otorgues el permiso a tu cuenta de servicio.
Verifica el uso de clave de Cloud KMS
Puedes verificar si la canalización usa una clave de Cloud KMS con la consola de Google Cloud o Google Cloud CLI.
Console
- Abre la interfaz de supervisión de Dataflow.
Ir a la interfaz web de Dataflow - Para ver los detalles del trabajo, selecciona tu trabajo de Dataflow.
- En el panel lateral Información del trabajo, marca el campo Tipo de encriptación para ver el tipo de clave.
- Para el tipo de encriptación: “Clave administrada por Google”
- Para el tipo de encriptación: “Clave administrada por el cliente”
CLI
Ejecuta el comando describe
con la CLI de gcloud:
gcloud dataflow jobs describe JOB_ID
Busca la línea que contiene serviceKmsKeyName
. En esta información, se muestra que se usó una clave de Cloud KMS para la encriptación del estado de la canalización de Dataflow.
Puedes verificar el uso de claves de Cloud KMS a fin de encriptar fuentes y receptores mediante las páginas y las herramientas de la consola de Google Cloud de esas fuentes y receptores, incluidos Pub/Sub, Cloud Storage y BigQuery. También puedes verificar el uso de las claves de Cloud KMS a través de los registros de auditoría de Cloud KMS.
Inhabilita o destruye la clave
Si, por algún motivo, necesitas inhabilitar o destruir la clave, puedes usar la consola de Google Cloud. Las operaciones de inhabilitación y 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 administrador de claves externo.
Si usas la opción Streaming Engine, se recomienda tomar una instantánea del trabajo antes de inhabilitar la clave.
Quita el acceso a Dataflow a la clave de Cloud KMS
Puedes quitar el acceso de Dataflow a la clave de Cloud KMS mediante los siguientes pasos:
- Revoca el rol
Cloud KMS CryptoKey Encrypter/Decrypter
de la cuenta de servicio de Dataflow mediante la consola de Google Cloud o la CLI de gcloud. - Revoca el rol
Cloud KMS CryptoKey Encrypter/Decrypter
de la cuenta de servicio de Compute Engine mediante la consola de Google Cloud o la CLI de gcloud. - Si lo deseas, también puedes destruir el material de la versión de 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 clave, no puedes borrar las claves ni los llaveros de claves. Las claves y los llaveros de claves no tienen costos facturables ni limitaciones de cuota, por lo que su existencia continua no afecta los límites de costo ni de producción.
Los trabajos de Dataflow validan de forma periódica si la cuenta de servicio de Dataflow puede usar la clave de Cloud KMS determinada de forma correcta. Si una solicitud de encriptación o desencriptación falla, el servicio de Dataflow detiene toda la transferencia y el procesamiento de datos lo antes posible. Dataflow comienza a limpiar de inmediato los recursos de Google Cloud conectados a tu trabajo.
Usa fuentes y receptores protegidos con claves de Cloud KMS
Dataflow puede acceder a las fuentes y los receptores de Google Cloud protegidos por las claves de Cloud KMS. Si no creas objetos nuevos, no necesitas especificar la clave de Cloud KMS de esas fuentes y receptores. Si tu canalización de Dataflow puede crear objetos nuevos en un receptor, debes definir parámetros de canalización. Estos parámetros especifican las claves de Cloud KMS de ese receptor y pasan esta clave de Cloud KMS a los métodos de conector de E/S adecuados.
Para las fuentes y los receptores de las canalizaciones de Dataflow que no admiten la CMEK administrada por Cloud KMS, la configuración de CMEK de Dataflow es irrelevante.
Permisos de clave de Cloud KMS
Cuando accedes a servicios que están protegidos con claves de Cloud KMS, verifica que hayas asignado la función Cloud KMS CryptoKey Encrypter/Decrypter
a ese servicio. Las cuentas son las siguientes:
- 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 depósitos temporales y de etapa de pruebas que especificaste con los parámetros de canalización TempLocation
/temp_location
y stagingLocation
/staging_location
, consulta cómo configurar depósitos de Cloud Storage protegidos por CMEK.
BigQuery
Java
Usa el método with_kms_key()
en los valores de retorno de BigQueryIO.readTableRows()
, BigQueryIO.read()
, BigQueryIO.writeTableRows()
y BigQueryIO.write()
.
Puedes encontrar un ejemplo en el repositorio de GitHub de Apache Beam.
Python
Usa el argumento kms_key
en BigQuerySource y BigQuerySink.
Puedes encontrar un ejemplo en el repositorio de GitHub de Apache Beam.
Go
Los IO de BigQuery no son compatibles con el uso de la clave KMS en Go.
Pub/Sub
Dataflow controla el acceso a los temas protegidos por CMEK mediante la configuración de CMEK de tu tema.
Para leer y escribir en temas de Pub/Sub protegidos por CMEK, consulta las instrucciones de Pub/Sub para usar CMEK.
Registros de auditoría para el uso de claves de Cloud KMS
Dataflow te permite a Cloud KMS usar los registros de auditoría de Cloud para registrar operaciones clave, como encriptar y desencriptar. Dataflow proporciona el ID de trabajo como contexto a un emisor de Cloud KMS. Este ID te permite hacer un seguimiento de cada instancia en la que se usa una clave de Cloud KMS específica para un trabajo de Dataflow.
Los registros de auditoría de Cloud mantienen registros de auditoría para cada proyecto, carpeta y organización de Google Cloud. Tienes varias opciones para ver los registros de auditoría de Cloud KMS.
Cloud KMS escribe los registros de auditoría de la actividad del administrador para tus trabajos de Dataflow con encriptación de CMEK. En estos registros, se asientan las operaciones que modifican la configuración o los metadatos de un recurso. No puedes inhabilitar los registros de auditoría de la actividad de administrador.
Si se habilita de forma explícita, Cloud KMS escribirá registros de auditoría de acceso a los datos para tus trabajos de Dataflow con encriptación de CMEK. Estos registros 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 que controla el usuario y que crean, modifican o leen los datos de los recursos que proporciona el usuario. Para obtener instrucciones acerca de cómo habilitar algunos, o todos, los registros de auditoría de acceso a los datos, consulta Configura registros de acceso a los datos.
Precios
Puedes usar las claves de encriptación de Cloud KMS con Dataflow en todas las regiones de Dataflow en las que está disponible Cloud KMS.
Esta integración no genera costos adicionales más allá de las operaciones de clave que se facturan en tu proyecto de Google Cloud. Cada vez que la cuenta de servicio de Dataflow usa tu clave de Cloud KMS, la operación se factura con la tarifa de las operaciones de clave de Cloud KMS.
Para obtener más información, consulta Detalles de precios de Cloud KMS.
Soluciona problemas
Usa las sugerencias de esta sección para solucionar errores.
No se puede validar Cloud KMS
Tu flujo de trabajo puede fallar con el siguiente error:
Workflow failed. Causes: Cloud KMS key <key-name> cannot be validated.
Para solucionarlo, verifica que hayas pasado la ruta completa de la clave. Se verá de esta forma projects/<project-id>/locations/<gcp-region>/keyRings/<key-ring-name>/cryptoKeys/<key-name>
. Busca posibles errores tipográficos en la ruta de la clave.
Se denegó el permiso para usar la clave de Cloud KMS
Tu flujo de trabajo puede fallar con 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 solucionarlo, verifica que el ID del proyecto mencionado en la ruta de la clave sea correcto. Además, verifica que tengas el permiso para usar la clave.
La ubicación de la clave de Cloud KMS no coincide con la ubicación del trabajo de Dataflow
Tu flujo de trabajo puede fallar con 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, verifica que la clave de Cloud KMS esté en la misma región que el trabajo de Dataflow.