Solucionar problemas de permisos de Dataflow

En esta página se explica cómo investigar y resolver problemas con los permisos de Dataflow.

Para ejecutar correctamente los trabajos de Dataflow, tu cuenta de usuario y las cuentas de servicio de Dataflow deben tener el acceso necesario a los recursos. Para ver una lista de los roles necesarios y los pasos para concederlos, consulta el artículo Seguridad y permisos de las canalizaciones en Google Cloud de la página Seguridad y permisos de Dataflow.

Además, cuando tus flujos de procesamiento de Apache Beam acceden a Google Cloud recursos, la cuenta de servicio de trabajador de tu proyecto de Dataflow necesita acceder a los recursos. Para ver una lista de los roles que puede necesitar tu cuenta de servicio de trabajador, consulta Ejemplo de asignación de roles.

Si faltan uno o varios roles necesarios para ejecutar un trabajo, puede que aparezca un error en los registros del trabajo o en los registros del trabajador. Para obtener instrucciones sobre cómo encontrar errores cuando falla un trabajo, consulta Buscar información sobre fallos de canalizaciones.

Para solucionar problemas de permisos, debe saber qué permiso falta y qué cuenta debe tenerlo. Para saber qué permiso falta, consulta el permiso que se indica en el mensaje de error y busca el rol que lo contiene. A menudo, aunque no siempre, debes asignar el rol correspondiente a la cuenta de servicio de trabajador de Dataflow.

Para añadir permisos, tu cuenta de usuario debe tener permiso para gestionar el acceso. Para obtener más información, consulta Gestionar el acceso a cuentas de servicio y Gestionar el acceso a otros recursos.

El usuario no tiene acceso de escritura al proyecto

Cuando intentas ejecutar una tarea de Dataflow, la tarea falla y aparece un error similar al siguiente:

PERMISSION_DENIED: (Could not create workflow; user does not have write access to project: $PROJECT_ID Causes: (...): Permission 'dataflow.jobs.create' denied on project: '$PROJECT_ID'

Este error se produce cuando tu cuenta de usuario no tiene el roles/dataflow.developer rol.

Para solucionar este problema, asigna el rol roles/dataflow.developer a tu cuenta de usuario. Además, asegúrate de que tu cuenta de usuario tenga el rol roles/iam.serviceAccountUser. Para obtener más información, consulta el artículo Asignar un solo rol de la documentación de gestión de identidades y accesos.

El usuario no tiene permisos suficientes en el proyecto

Cuando intentas cancelar un trabajo de Dataflow, aparece un error similar al siguiente:

Could not cancel workflow; user does not have sufficient permissions on project:PROJECT_ID, or the job does not exist in the project. Causes: (...): Permission 'dataflow.jobs.cancel' denied on project: 'PROJECT_ID' Please ensure you have permission to access the job

Pueden producirse errores similares al intentar purgar o actualizar un trabajo.

Este error se produce por uno de los siguientes motivos:

  • Tu cuenta de usuario no tiene el rol roles/dataflow.developer. Para solucionar este problema, asigna el rol roles/dataflow.developer a tu cuenta de usuario. Además, asegúrate de que tu cuenta de usuario tenga el rol roles/iam.serviceAccountUser. Para obtener más información, consulta el artículo Asignar un solo rol de la documentación de gestión de identidades y accesos.
  • El ID de tarea es incorrecto. Puede que contenga una errata o que estés usando el nombre del trabajo para cancelarlo en lugar del ID.

No se ha podido verificar los permisos de la cuenta de servicio de trabajador

Cuando intentas ejecutar una tarea de Dataflow, aparece un error similar al siguiente:

Workflow failed. Causes: Permissions verification for controller service account failed. All permissions in IAM role roles/dataflow.worker should be granted to controller service account PROJECT_NUMBER-compute@developer.gserviceaccount.com.

Este error se produce cuando la cuenta de servicio de trabajador no tiene el rol roles/dataflow.worker.

Para solucionar este problema, asigna el rol roles/dataflow.worker a la cuenta de servicio de trabajador. Para obtener más información, consulta el artículo Asignar un solo rol de la documentación de gestión de identidades y accesos.

No se ha podido validar la canalización

Antes de que se inicie un nuevo trabajo de Dataflow, Dataflow realiza comprobaciones de validación en la canalización. Cuando las comprobaciones de validación detectan problemas en la canalización, Dataflow rechaza el envío de la tarea de forma anticipada para ahorrar tiempo y recursos de computación. En los registros de trabajos, Dataflow incluye mensajes de registro que contienen los resultados de la validación e instrucciones para resolver los problemas.

Cuando la comprobación de validación de la canalización detecta problemas de permisos, es posible que veas el siguiente error en los registros de trabajos:

[The preflight pipeline validation failed for job JOB_ID.] Missing permissions
PERMISSION when accessing RESOURCE_PATH as Dataflow worker service account WORKER_SERVICE_ACCOUNT.

Si faltan permisos para más de un recurso, los registros de trabajos contendrán varios mensajes de error de permisos.

Antes de intentar volver a enviar el trabajo de Dataflow, soluciona los problemas de permisos. En los siguientes recursos se proporciona información sobre cómo modificar roles y permisos.

Si quieres anular la validación de la canalización e iniciar el trabajo con errores de validación, usa la siguiente opción de canalización:

--experiment=enable_ppv_effect=false

No se han podido actualizar tus credenciales

Cuando intentas ejecutar una tarea de Dataflow, aparece un error similar al siguiente:

Workflow failed. Causes: There was a problem refreshing your credentials.
Please check: 1. The Dataflow API is enabled for your project.
2. Make sure both the Dataflow service account and the controller service account have sufficient permissions.
If you are not specifying a controller service account, ensure the default Compute Engine service account PROJECT_NUMBER-compute@developer.gserviceaccount.com exists and has sufficient permissions.
If you have deleted the default Compute Engine service account, you must specify a controller service account

Este error se produce cuando la cuenta de servicio de trabajador no tiene el rol roles/dataflow.worker o cuando la API Dataflow no está habilitada.

Primero, verifica que la cuenta de servicio de trabajador tenga el rol roles/dataflow.worker. Si es necesario, concede el rol roles/dataflow.worker a la cuenta de servicio de trabajador. Para obtener más información, consulta el artículo Asignar un solo rol de la documentación de gestión de identidades y accesos.

Para habilitar la API Dataflow, consulta el artículo Habilitar una API en tu proyecto de Google Cloud Platform.

Permiso "compute.subnetworks.get" obligatorio

Cuando intentas ejecutar un trabajo de Dataflow en una red de VPC compartida, aparece un error similar a uno de los siguientes:

Required 'compute.subnetworks.get' permission for 'projects/project-id/regions/region/subnetworks/subnet-name' HTTP Code: 403
Required 'compute.subnetworks.use' permission for 'projects/project-id/regions/region/subnetworks/subnet-name' HTTP Code: 403

La VPC compartida te permite exportar subredes de una red de VPC de un proyecto host a otros proyectos de servicio de la misma organización. Las instancias de los proyectos de servicio pueden tener conexiones de red en las subredes compartidas del proyecto del host. Para obtener más información, consulta la descripción general de la VPC compartida.

Para resolver este problema, primero comprueba que el proyecto de servicio esté asociado al proyecto host. Para obtener más información, consulta Asociar proyectos de servicio en la página Aprovisionar VPC compartida.

A continuación, asigna los siguientes roles a la cuenta de servicio de Compute Engine del proyecto host, a la cuenta de servicio de trabajador de Dataflow del proyecto de servicio y a la cuenta de servicio que se usa para enviar el trabajo:

Para obtener más información, consulta las directrices para especificar un parámetro de subred en una VPC compartida y concede un solo rol en la documentación de Identity and Access Management.

El ejecutor de Dataflow no tiene acceso al segmento

Cuando intentas enumerar objetos en un segmento de Cloud Storage, el trabajo de Dataflow falla y aparece un error similar al siguiente:

"dataflow-runner@project-id.iam.gserviceaccount.com" does not have `storage.objects.list` access to the Google Cloud Storage Bucket

Este error se produce cuando la cuenta de servicio de trabajador no tiene el rol roles/storage.objectViewer.

Para solucionar este problema, asigna a tu cuenta de usuario el rol roles/storage.objectViewer. Para obtener más información, consulta el artículo Asignar un solo rol de la documentación de gestión de identidades y accesos.

Permiso de clave de Cloud KMS denegado en el recurso

Cuando usas claves de cifrado gestionadas por el cliente e intentas crear un trabajo de Dataflow, el trabajo falla y se muestra un error similar al siguiente:

Cloud KMS key permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource
'projects/project-id/locations/location/keyRings/keyRingName/cryptoKeys/keyname' (or it may not exist). cannot be validated.
Please confirm the full key path is used (starts with projects) and that there are no typos.

Este error se produce cuando la cuenta de servicio de trabajador y la cuenta de servicio de Dataflow no tienen el roles/cloudkms.cryptoKeyEncrypterDecrypter rol.

Para resolver este problema, asigna el rol roles/cloudkms.cryptoKeyEncrypterDecrypter a la cuenta de servicio de trabajador y a la cuenta de servicio de Dataflow. Para obtener más información, consulta la sección Conceder permisos de Encrypter/Decrypter de la página Usar claves de cifrado gestionadas por el cliente.

Permiso denegado en el recurso

Cuando intentas crear una canalización, se produce un error con el siguiente mensaje:

Permission 'datapipelines.pipelines.create' denied on resource '//datapipelines.googleapis.com/projects/PROJECT_ID/locations/REGION' (or it may not exist).

Este error se produce si la cuenta de servicio de trabajador de tu proyecto no tiene acceso a los archivos y otros recursos asociados a la canalización.

Para solucionar este problema, asigna los siguientes roles a la cuenta de servicio de trabajador:

  • roles/dataflow.admin
  • roles/dataflow.worker

Para obtener más información, consulta la sección Cuenta de servicio de trabajador del artículo "Seguridad y permisos de Dataflow".

Flujo de trabajo fallido

Cuando usas claves de encriptado gestionadas por el cliente e intentas crear un trabajo de Dataflow, se produce un error con el siguiente mensaje:

Workflow failed

Este error puede producirse por los siguientes motivos:

  • La clave y el trabajo de Dataflow no están en la misma región o se usa una clave multirregional. No se admiten las claves globales ni multirregionales. La región de tu CMEK y la región de tu trabajo de Dataflow deben ser las mismas.
  • El nombre de la clave no se ha especificado correctamente. Es posible que la clave no exista o que el nombre tenga una errata.

La clave de Cloud KMS no puede proteger los recursos de este trabajo

Cuando ejecutas una tarea de Dataflow e intentas habilitar una clave de cifrado gestionada por el cliente, la tarea falla y aparece un error similar al siguiente:

Cloud KMS key can't protect resources for this job. Please make sure the KMS key's region matches the Dataflow region

Este error puede producirse por los siguientes motivos:

  • La clave y el trabajo de Dataflow no están en la misma región o se usa una clave multirregional. No se admiten las claves globales ni multirregionales. La región de tu CMEK y la región de tu trabajo de Dataflow deben ser las mismas.
  • El parámetro dataflowKMSKey no se ha especificado correctamente.

El autoescalado vertical no funciona

Cuando usas el autoescalado vertical, el trabajo no se escala verticalmente de forma automática y aparece el siguiente error en los registros del trabajo:

{"level":"error","ts":1708815877.1246133,"caller":"exporter/exporter.go:232","msg":"failed to get response from UAS: %v","error":"rpc error: code = PermissionDenied desc = The caller does not have permission","stacktrace":"google3/autoscaler/vitor/external/go/exporter/exporter.receiver\n\tautoscaler/vitor/external/go/exporter/exporter.go:232"}

Este error se produce cuando la cuenta de servicio de trabajador no tiene el rol Trabajador de Dataflow (roles/dataflow.worker).

Para solucionar este problema, asigna el rol roles/dataflow.worker a la cuenta de servicio de trabajador. Para obtener más información, consulta el artículo Asignar un solo rol de la documentación de gestión de identidades y accesos.

Si usas un rol personalizado para la cuenta de servicio de trabajador, añade los siguientes permisos al rol personalizado:

  • autoscaling.sites.readRecommendations
  • autoscaling.sites.writeMetrics
  • autoscaling.sites.writeState

No tienes autorización para crear una suscripción de seguimiento de Pub/Sub

Cuando una tarea de Dataflow lee datos de Pub/Sub mediante marcas de tiempo de eventos personalizadas, aparece el siguiente error en los registros de la tarea:

Creating watermark tracking pubsub subscription projects/PROJECT_ID/subscriptions/SUBSCRIPTION __df_internal[16 HEX CHARACTERS] to topic projects/PROJECT_ID/topics/TOPIC failed with error: User not authorized to perform this action

Puedes configurar Dataflow para que lea las marcas de tiempo de los eventos de un atributo del mensaje de Pub/Sub. En ese caso, Dataflow crea una segunda suscripción de Pub/Sub, llamada suscripción de seguimiento.

Este error se produce cuando Dataflow no tiene permiso para crear la suscripción de seguimiento. Para obtener más información, consulta Marcas de tiempo y marcas de agua.