Solución de problemas de permisos de Dataflow

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

Para ejecutar trabajos de Dataflow de forma correcta, la cuenta de usuario y las cuentas de servicio de Dataflow deben tener el acceso necesario a los recursos. Si deseas obtener una lista de las roles necesarias y los pasos para otorgar estos roles, consulta Seguridad y permisos para canalizaciones en Google Cloud en la página de seguridad y permisos de Dataflow.

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

Cuando faltan una o más roles necesarias para ejecutar un trabajo, puede aparecer un error en los registros del trabajo o en los registros del trabajador. Para obtener instrucciones que expliquen cómo encontrar errores cuando falla un trabajo, consulta Encuentra información sobre las fallas de la canalización.

Para resolver los problemas de permisos, debes comprender qué permiso falta y qué cuenta debe tener ese permiso. Para comprender qué permiso falta, consulta el permiso que se muestra en el mensaje de error y busca el rol que contiene ese permiso. A menudo, pero no siempre, debes asignar el rol relevante a la cuenta de servicio de trabajador de Dataflow.

Para agregar permisos, tu cuenta de usuario debe tener permiso para administrar el acceso. Para obtener más información, consulta Administra el acceso a las cuentas de servicio y Administra el acceso a otros recursos.

El usuario no tiene acceso de escritura al proyecto

Cuando intentas ejecutar un trabajo de Dataflow, este falla y ves 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 la cuenta de usuario no tiene el rol roles/dataflow.developer.

Para resolver este problema, otorga a tu cuenta de usuario el rol roles/dataflow.developer. Además, asegúrate de que tu cuenta de usuario tenga el rol roles/iam.serviceAccountUser. Para obtener más información, consulta Otorga un solo rol en la documentación de Identity and Access Management.

El usuario no tiene permisos suficientes en el proyecto

Cuando intentas cancelar un trabajo de Dataflow, verás 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 cuando se intenta desviar o actualizar un trabajo.

Este error ocurre por uno de los siguientes motivos:

  • Tu cuenta de usuario no tiene el rol roles/dataflow.developer. Para resolver este problema, otorga a tu cuenta de usuario el rol roles/dataflow.developer. Además, asegúrate de que tu cuenta de usuario tenga el rol roles/iam.serviceAccountUser. Para obtener más información, consulta Otorga un solo rol en la documentación de Identity and Access Management.
  • El ID de trabajo es incorrecto. Es posible que contenga un error tipográfico o que uses el nombre del trabajo para cancelarlo en lugar del ID.

No se pudo verificar la autorización de la cuenta de servicio del trabajador

Cuando intentas ejecutar un trabajo de Dataflow, ves 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 resolver este problema, otorga a la cuenta de servicio de trabajador el rol roles/dataflow.worker. Para obtener más información, consulta Otorga un solo rol en la documentación de Identity and Access Management.

No se pudo validar la canalización

Antes de que se inicie un trabajo de Dataflow nuevo, Dataflow realiza verificaciones de validación en la canalización. Cuando las verificaciones de validación encuentran problemas con la canalización, para ahorrar tiempo y calcular los recursos, Dataflow hace que falle el envío del trabajo de manera anticipada. En los registros del trabajo, Dataflow incluye mensajes de registro que contienen los resultados de la validación y las instrucciones para resolver los problemas.

Cuando la verificación de validación de la canalización encuentra problemas de permisos, es posible que veas el siguiente error en los registros del trabajo:

[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 contienen varios mensajes de error de permiso.

Antes de volver a enviar el trabajo de Dataflow, soluciona los problemas de permisos. Los siguientes recursos proporcionan información sobre la modificación de roles y permisos.

Si deseas anular la validación de la canalización y, luego, iniciar tu trabajo con errores de validación, usa la siguiente opción de canalización:

--experiment=enable_ppv_effect=false

No se pudieron actualizar tus credenciales

Cuando intentas ejecutar un trabajo de Dataflow, ves 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 del trabajador no tiene el rol roles/dataflow.worker o cuando la API de Dataflow no está habilitada.

Primero, verifica que la cuenta de servicio de trabajador tenga el rol roles/dataflow.worker. Si es necesario, otorga roles/dataflow.worker a la cuenta de servicio de trabajador. Para obtener más información, consulta Otorga un solo rol en la documentación de Identity and Access Management.

Para habilitar la API de Dataflow, consulta Habilita una API en tu proyecto de Google Cloud.

Se requiere el permiso “compute.subnetworks.get”.

Cuando intentas ejecutar un trabajo de Dataflow en una red de VPC compartida, verás un error similar al siguiente:

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

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

Para resolver este problema, primero verifica que el proyecto de servicio esté vinculado al proyecto host. Para obtener más información, consulta Conecta proyectos de servicio en la página VPC aprovisionada.

A continuación, otorga 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 Otorga un solo rol en la documentación de Identity and Access Management.

El ejecutor de Dataflow no tiene acceso al bucket

Cuando intentas enumerar objetos en un bucket de Cloud Storage, el trabajo de Dataflow falla y ves 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 resolver este problema, otorga a tu cuenta de usuario el rol roles/storage.objectViewer. Para obtener más información, consulta Otorga un solo rol en la documentación de Identity and Access Management.

Permiso de clave de Cloud KMS denegado en el recurso

Cuando usas claves de encriptación administradas por el cliente y tratas de crear un trabajo de Dataflow, este falla y ves 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 rol roles/cloudkms.cryptoKeyEncrypterDecrypter.

Para resolver este problema, otorga 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 página sobre cómo otorgar permisos de encriptador/desencriptador en la página Usa claves de encriptación administradas por el cliente.

Permiso denegado en el recurso

Cuando intentas crear una canalización, esta falla con el siguiente error:

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 del trabajador de tu proyecto no tiene acceso a los archivos y a otros recursos asociados con la canalización.

Para resolver 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 Cuenta de servicio de trabajador en “Seguridad y permisos de Dataflow”.

Error en el flujo de trabajo

Cuando usas claves de encriptación administradas por el cliente y tratas de crear un trabajo de Dataflow, este falla con el siguiente error:

Workflow failed

Este error puede ocurrir 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. Las claves globales y multirregionales no son compatibles. La región de tu CMEK y la región de tu trabajo de Dataflow deben ser iguales.
  • El nombre de clave no se especificó de forma correcta. Es posible que la clave no exista o que el nombre tenga un error tipográfico.

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

Cuando ejecutas un trabajo de Dataflow e intentas habilitar una clave de encriptación administrada por el cliente, el trabajo falla y ves 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 ocurrir 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. Las claves globales y multirregionales no son compatibles. La región de tu CMEK y la región de tu trabajo de Dataflow deben ser iguales.
  • No se especificó de forma correcta el parámetro dataflowKMSKey.

El ajuste de escala automático vertical no funciona

Cuando usas el Ajuste de escala automático vertical, el trabajo no escala verticalmente de forma automática y el siguiente error aparece 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 del trabajador no tiene el rol de Trabajador de Dataflow (roles/dataflow.worker).

Para resolver este problema, otorga a la cuenta de servicio de trabajador el rol roles/dataflow.worker. Para obtener más información, consulta Otorga un solo rol en la documentación de Identity and Access Management.

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

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