Seguridad y permisos de Cloud Dataflow

Las canalizaciones de Dataflow se pueden ejecutar de forma local (para hacer pruebas en conjuntos de datos pequeños) o en recursos administrados de Google Cloud con el servicio administrado de Dataflow. Tanto si se ejecuta de forma local como en la nube, la canalización y sus trabajadores usan un sistema de permisos para mantener un acceso seguro a los archivos y recursos de la canalización. Los permisos de Dataflow se asignan de acuerdo con la función que se usó para acceder a los recursos de la canalización. En las siguientes secciones, se explican las funciones y los permisos asociados con las canalizaciones locales y en la nube, la configuración predeterminada y cómo verificar los permisos del proyecto.

Antes de comenzar

Obtén información sobre los identificadores de proyectos de Google Cloud en la descripción general de la plataforma. Estos identificadores incluyen el nombre, ID y número del proyecto.

Seguridad y permisos para canalizaciones locales

Cuenta de Google Cloud Platform

De forma local, la canalización de Apache Beam se ejecuta con la cuenta de Google Cloud que configuraste con el archivo ejecutable de la herramienta de línea de comandos de gcloud. Por lo tanto, las operaciones del SDK de Apache Beam que se ejecutan de forma local tienen acceso a los mismos archivos y recursos que tu cuenta de Google Cloud.

Para mostrar la cuenta de Google Cloud que seleccionaste como predeterminada, ejecuta el comando gcloud config list.

Nota: Las canalizaciones locales pueden enviar datos a destinos locales, como archivos locales, o a destinos de la nube, como Cloud Storage o BigQuery. Si una canalización ejecutada localmente escribe archivos en recursos basados en la nube, como Cloud Storage, esta utiliza las credenciales de tu cuenta de Google Cloud y el proyecto de Google Cloud que configuraste como opción predeterminada para la herramienta de línea de comandos de gcloud. Consulta la guía de inicio rápido del lenguaje que usas a fin de obtener instrucciones para autenticar con las credenciales de tu cuenta de Google Cloud.

Seguridad y permisos de las canalizaciones de Google Cloud Platform

Cuando ejecutas la canalización, Dataflow usa dos cuentas de servicio para administrar la seguridad y los permisos: una de Dataflow y otra del controlador. El servicio de Dataflow usa su cuenta de servicio como parte de la solicitud de creación de trabajo (por ejemplo, para verificar la cuota del proyecto y crear instancias de trabajadores en tu nombre) y durante la ejecución de trabajos con el fin de administrarlos. Las instancias de trabajadores usan la cuenta de servicio del controlador para acceder a los recursos de entrada y salida después de que envías el trabajo.

Cuenta de servicio de Cloud Dataflow

Como parte de la ejecución de canalizaciones de Dataflow, este servicio manipula los recursos en tu nombre (por ejemplo, cuando crea VM adicionales). Cuando ejecutas la canalización en el servicio de Dataflow, se usa una cuenta de servicio (service-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com). Esta cuenta se crea automáticamente cuando se crea un proyecto de Dataflow. Además, se le asigna la función Agente de servicios de Cloud Dataflow en el proyecto y tiene los permisos necesarios para ejecutar un trabajo que pertenezca al proyecto, como la capacidad de iniciar trabajadores de Compute Engine. El servicio de Dataflow usa la cuenta de forma exclusiva, la cual es específica para el proyecto.

Puedes revisar los permisos de las cuentas de servicio de Dataflow mediante la herramienta de línea de comandos de gcloud. Para ello, escribe el siguiente comando en el shell o la terminal:

gcloud iam roles describe roles/dataflow.serviceAgent

Debido a que los servicios de Google Cloud esperan tener acceso de lectura y escritura al proyecto y a sus recursos, te recomendamos que no cambies los permisos predeterminados que se establecieron automáticamente en el proyecto. Si quitas los permisos para la cuenta de servicio de la política de IAM, las cuentas seguirán presentes debido a que son propiedad del servicio de Dataflow. Si una cuenta de servicio de Dataflow pierde los permisos de un proyecto, no podrá iniciar las VM ni realizar otras tareas de administración.

Práctica recomendada: Crea un depósito que sea propiedad del proyecto para usarlo como depósito de etapa de pruebas de Dataflow. Esto garantizará que se configuren automáticamente y de forma correcta los permisos para la etapa de pruebas de los archivos ejecutables de la canalización.

Cuenta de servicio del controlador

Las instancias de Compute Engine ejecutan las operaciones del SDK de Apache Beam en la nube. Estos trabajadores usan la cuenta de servicio del controlador del proyecto para acceder a los archivos y a otros recursos de la canalización. Dataflow también usa la cuenta de servicio del controlador para realizar operaciones de “metadatos”, que no se ejecutan en clientes locales ni en trabajadores de Compute Engine. Estas operaciones realizan tareas como determinar los tamaños de las entradas y acceder a los archivos de Cloud Storage.

Cuenta de servicio del controlador predeterminada

De forma predeterminada, los trabajadores usan la cuenta de servicio de Compute Engine del proyecto como la cuenta de servicio del controlador. Esta cuenta de servicio (<project-number>-compute@developer.gserviceaccount.com) se crea automáticamente cuando habilitas la API de Compute Engine en el proyecto desde la página de API de Google Cloud Console.

Además, la cuenta de servicio de Compute Engine asociada con un proyecto tiene acceso a los depósitos y recursos de Cloud Storage que son propiedad del proyecto de forma predeterminada. Debido a que la mayoría de los trabajadores de Compute Engine esperan tener acceso de lectura/escritura a los recursos del proyecto, se recomienda no cambiar los permisos predeterminados que se establecen automáticamente para el proyecto.

Puedes consultar una lista de las cuentas de servicio del proyecto en la página de permisos de Cloud Console.

Especifica una cuenta de servicio del controlador administrada por el usuario

Si quieres crear y usar recursos con acceso y control precisos, puedes usar una cuenta de servicio del proyecto de tu trabajo como la cuenta de servicio del controlador administrada por el usuario.

Si no tienes este tipo de cuenta, debes crear una que esté en el mismo proyecto que tu trabajo y configurar las funciones de IAM necesarias de la cuenta. Como mínimo, la cuenta de servicio debe tener la función Trabajador de Dataflow. Además, es posible que esta cuenta de servicio necesite funciones adicionales para usar los recursos de Cloud Platform que solicita tu trabajo (como BigQuery, Pub/Sub o escribir en Cloud Storage). Por ejemplo, si un trabajo lee datos de BigQuery, la cuenta de servicio también debe tener por lo menos la función bigquery.dataViewer.

Java

Usa la opción --serviceAccount y especifica tu cuenta de servicio cuando ejecutes el trabajo de canalización: --serviceAccount=my-service-account-name@<project-id>.iam.gserviceaccount.com

Python

Usa la opción --service_account_email y especifica tu cuenta de servicio cuando ejecutes el trabajo de canalización: --service_account_email=my-service-account-name@<project-id>.iam.gserviceaccount.com

Accede a los recursos de Google Cloud Platform alojados en varios proyectos de la plataforma

Las canalizaciones de Apache Beam pueden acceder a los siguientes tipos de recursos de Google Cloud alojados en otros proyectos de Google Cloud:

Java

  • Depósitos de Cloud Storage
  • Conjuntos de datos de BigQuery
  • Temas y suscripciones de Pub/Sub
  • Conjuntos de datos de Datastore

Python

  • Depósitos de Cloud Storage
  • Conjuntos de datos de BigQuery
  • Conjuntos de datos de Datastore

Para garantizar que la canalización de Apache Beam pueda acceder a estos recursos de varios proyectos, deberás usar los mecanismos de control de acceso de cada recurso a fin de otorgar acceso explícito a la cuenta de servicio del controlador del proyecto de Dataflow.

Accede a los depósitos de Cloud Storage alojados en otros proyectos de Google Cloud Platform

Para que el proyecto de Dataflow tenga acceso a un depósito de Cloud Storage que es propiedad de otro proyecto de Google Cloud, la cuenta de servicio del controlador del proyecto de Dataflow deberá tener acceso al depósito. Puedes usar los controles de acceso de Cloud Storage para otorgar el acceso necesario.

Nota: Si no estás usando las cuentas de servicio predeterminadas, asegúrate de que los permisos sean coherentes con la configuración de IAM.

Para obtener una lista de las cuentas de servicio del proyecto de Dataflow, revisa la página de IAM y administración de Cloud Console. Una vez que tengas los nombres de las cuentas, puedes ejecutar comandos de gsutil para otorgar la propiedad de las cuentas de servicio del proyecto (permisos de lectura y escritura) al depósito y sus contenidos.

Ingresa el siguiente comando en la ventana del shell o la terminal para otorgar a las cuentas de servicio del proyecto de Dataflow acceso a un depósito de Cloud Storage ubicado en otro proyecto: gsutil acl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Ingresa el siguiente comando en la ventana del shell o la terminal para otorgar a las cuentas de servicio del proyecto de Dataflow acceso a los contenidos existentes de un depósito de Cloud Storage ubicado en otro proyecto: gsutil -m acl ch -r -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Nota: La opción -m ejecuta el comando en paralelo para acelerar el procesamiento, y la opción -r ejecuta el comando de manera recurrente en los recursos del depósito.

Ten en cuenta que el comando anterior solo otorga acceso a los recursos existentes. Si otorgas a las cuentas de servicio del proyecto de Dataflow permiso predeterminado al depósito, estas podrán acceder a los recursos futuros que se agreguen al depósito: gsutil defacl ch -u <project-number>-compute@developer.gserviceaccount.com:OWNER gs://<bucket>

Accede a los conjuntos de datos de BigQuery alojados en otros proyectos de Google Cloud Platform

Puedes usar la API de BigQueryIO para acceder a los conjuntos de datos de BigQuery que son propiedad de otro proyecto de Google Cloud (es decir, que no pertenecen al proyecto en el que usas Dataflow). Para que la fuente y el receptor de BigQuery funcionen correctamente, las siguientes dos cuentas deben tener acceso a todos los conjuntos de datos de BigQuery en los que lee o escribe datos el trabajo de Dataflow:

Podrías necesitar configurar BigQuery para otorgar acceso explícito a estas cuentas. Consulta el artículo sobre el control de acceso de BigQuery para obtener más información sobre cómo otorgar acceso a los conjuntos de datos de BigQuery con la IU web o la API de BigQuery.

Por ejemplo, si tu cuenta de Google Cloud es abcde@gmail.com y el número del proyecto en el que ejecutas el trabajo de Dataflow es 123456789, estas dos cuentas deben tener acceso a los conjuntos de datos de BigQuery utilizados: y 123456789-compute@developer.gserviceaccount.com.

Accede a las suscripciones y los temas de Cloud Pub/Sub alojados en otros proyectos de Google Cloud Platform

Si deseas acceder a un tema o una suscripción de Pub/Sub que pertenece a otro proyecto de Google Cloud, usa las funciones de administración de identidades y accesos de Pub/Sub a fin de configurar permisos para varios proyectos. Dataflow usa la cuenta de servicio del controlador con el fin de ejecutar los trabajos. Debes otorgarle a esta cuenta acceso a los recursos de Pub/Sub alojados en el otro proyecto.

Se requieren los permisos de las siguientes funciones de Pub/Sub:

  • roles/pubsub.subscriber
  • roles/pubsub.viewer

Consulta el caso práctico de muestra sobre comunicación entre proyectos para obtener más información y ver algunos ejemplos de código en los que se demuestra cómo usar las funciones de administración de identidades y accesos de Pub/Sub.

Accede a las instancias de Cloud Datastore alojadas en otros proyectos de Google Cloud Platform

Para acceder a una instancia de Datastore que pertenece a otro proyecto de Google Cloud, deberás agregar la cuenta de servicio de Compute Engine (<project-number>-compute@developer.gserviceaccount.com) del proyecto de Dataflow como editor del proyecto al que pertenezca la instancia de Datastore. También deberás habilitar la API de Datastore en ambos proyectos ingresando en https://console.cloud.google.com/project/<project-id>/apiui/apiview/datastore/overview.

Seguridad y acceso de datos

Para mantener la seguridad y la privacidad de los datos, el servicio de Dataflow usa varios mecanismos de seguridad, que se aplican en las siguientes situaciones:

  • Cuando envías una canalización al servicio
  • Cuando el servicio evalúa tu canalización
  • Cuando solicitas acceso a métricas y datos de telemetría durante la ejecución de la canalización y después de ella

Envío de canalizaciones

Los permisos del proyecto de Google Cloud controlan el acceso al servicio de Dataflow. Cualquier miembro del proyecto que tenga derechos de propiedad o edición puede enviar canalizaciones al servicio. Para enviar canalizaciones, debes autenticarte con la herramienta de línea de comandos de gcloud. Cuando lo hagas, se enviarán las canalizaciones mediante el protocolo HTTPS. Consulta la guía de inicio rápido del lenguaje que usas a fin de obtener instrucciones para autenticarte con las credenciales de la cuenta de Google Cloud.

Evaluación de canalizaciones

Datos temporales

Como parte de la evaluación de la canalización, los datos temporales se podrían generar y almacenar localmente en los trabajadores o en Cloud Storage. Los datos temporales se encriptan en reposo y no se conservan después de que la evaluación de una canalización concluye.

Java

De forma predeterminada, se borran las VM de Compute Engine cuando finaliza el trabajo de Dataflow, sin importar si se realizó correctamente o falló. Esto significa que se borra el disco persistente asociado junto con todos los datos intermedios que podrían estar almacenados en él. Los datos intermedios almacenados en Cloud Storage se pueden encontrar en sububicaciones de la ruta de Cloud Storage que proporcionas como --stagingLocation o --tempLocation. Si escribes datos de salida en un archivo de Cloud Storage, es posible que se creen archivos temporales en la ubicación de salida antes de que finalice la operación de escritura.

Python

De forma predeterminada, se borran las VM de Compute Engine cuando finaliza el trabajo de Dataflow, sin importar si se realizó correctamente o falló. Esto significa que se borra el disco persistente asociado junto con todos los datos intermedios que podrían estar almacenados en él. Los datos intermedios almacenados en Cloud Storage se pueden encontrar en sububicaciones de la ruta de Cloud Storage que proporcionas como --staging_location o --temp_location. Si escribes datos de salida en un archivo de Cloud Storage, es posible que se creen archivos temporales en la ubicación de salida antes de que finalice la operación de escritura.

Datos registrados

El código del programa de Dataflow genera casi toda la información que se almacena en Cloud Logging. El servicio de Dataflow también podría generar datos de advertencia y error en Cloud Logging. Sin embargo, estos son los únicos datos intermedios que agrega el servicio a los registros.

Datos en tránsito

Existen dos modos para transmitir los datos durante una evaluación de la canalización:

  • Cuando se leen y escriben datos desde fuentes y receptores
  • Entre instancias de trabajadores mientras se procesan los datos de la misma canalización

Se encripta toda la comunicación con las fuentes y receptores de Google Cloud y se transfiere mediante HTTPS. Toda la comunicación entre trabajadores se realiza en una red privada y está sujeta a los permisos y las reglas de firewall del proyecto.

Localidad de datos

La lógica de una canalización se evalúa en instancias individuales de Compute Engine. Puedes especificar la zona donde se ubican esas instancias y las redes privadas a través de las cuales se comunican. Los cálculos complementarios que tienen lugar en la infraestructura de Google se basan en los metadatos (como las ubicaciones de Cloud Storage o los tamaños del archivo). Los datos nunca dejan la zona o traspasan tus límites de seguridad.

Métricas y telemetría

Los datos de telemetría y las métricas asociadas se encriptan en reposo, y el acceso a estos datos se controla mediante los permisos de lectura del proyecto de Google Cloud.

Te recomendamos que uses los mecanismos de seguridad disponibles en los recursos subyacentes de la nube de la canalización. Estos mecanismos incluyen las capacidades de seguridad de los datos de las fuentes y los receptores de datos, como BigQuery y Cloud Storage. Además, te recomendamos que no mezcles niveles de confianza distintos en un solo proyecto.