Solução de problemas de permissões do Dataflow

Esta página mostra como investigar e resolver problemas com as permissões do Dataflow.

Para executar jobs do Dataflow, sua conta de usuário e as contas de serviço do Dataflow precisam ter o acesso necessário aos recursos. Veja uma lista de papéis e etapas necessários para conceder esses papéis em Segurança e permissões para pipelines no Google Cloud na página de segurança e permissões do Dataflow.

Além disso, quando os pipelines do Apache Beam acessam recursos do Google Cloud, a conta de serviço do worker do projeto do Dataflow precisa acessar os recursos. Para uma lista de papéis que sua conta de serviço de worker pode precisar, consulte Exemplo de atribuição de papel.

Quando um ou mais papéis necessários para executar um job estão ausentes, um erro pode aparecer nos registros do job ou nos registros do worker. Para instruções sobre como encontrar erros quando um job falha, consulte Encontrar informações sobre falhas de pipeline.

Para resolver problemas de permissões, é necessário entender qual permissão está ausente e qual conta precisa ter essa permissão. Para entender qual permissão está ausente, veja a permissão listada na mensagem de erro e encontre o papel que a contém. Muitas vezes, mas nem sempre, você precisa atribuir o papel relevante à conta de serviço do worker do Dataflow.

Para adicionar permissões, sua conta de usuário precisa ter permissão para gerenciar o acesso. Para mais informações, consulte Gerenciar o acesso a contas de serviço e Gerenciar o acesso a outros recursos.

O usuário não tem acesso de gravação ao projeto

Ao tentar executar um job do Dataflow, ele falha e aparece um erro semelhante ao seguinte:

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'

Esse erro ocorre quando sua conta de usuário não tem o papel roles/dataflow.developer.

Para resolver esse problema, conceda à sua conta de usuário o papel roles/dataflow.developer. Além disso, verifique se a sua conta de usuário tem o papel roles/iam.serviceAccountUser. Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.

O usuário não tem permissões suficientes no projeto

Ao tentar cancelar um job do Dataflow, aparece um erro semelhante ao seguinte:

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

Erros semelhantes podem ocorrer ao tentar drenar ou atualizar um job.

Esse erro ocorre por um dos seguintes motivos:

  • Sua conta de usuário não tem o papel roles/dataflow.developer. Para resolver esse problema, conceda à sua conta de usuário o papel roles/dataflow.developer. Além disso, verifique se a sua conta de usuário tem o papel roles/iam.serviceAccountUser. Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.
  • O ID do job está incorreto. Ele pode conter um erro de digitação ou talvez você usou o nome do job para cancelar o job, em vez do ID.

Falha na verificação de permissões da conta de serviço do worker

Ao tentar executar um job do Dataflow, aparece um erro semelhante ao seguinte:

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.

Esse erro ocorre quando a conta de serviço do worker não tem o papel roles/dataflow.worker.

Para resolver esse problema, conceda à conta de serviço do worker o papel roles/dataflow.worker. Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.

Falha na validação do pipeline

Antes do lançamento de um novo job do Dataflow, ele realiza verificações de validação no pipeline. Quando as verificações de validação encontram problemas com o pipeline, para economizar tempo e calcular recursos, o Dataflow falha no envio do job antecipadamente. Nos registros do job, o Dataflow inclui mensagens de registro que contêm as descobertas de validação e instruções para resolver os problemas.

Quando a verificação de validação do pipeline encontra problemas de permissão, você pode ver o seguinte erro nos registros do job:

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

Se não houver permissões para mais de um recurso, os registros do job conterão várias mensagens de erro de permissão.

Antes de tentar reenviar o job do Dataflow, corrija os problemas de permissão. Os recursos a seguir fornecem informações sobre como modificar papéis e permissões.

Se você quiser substituir a validação do pipeline e iniciar seu job com erros de validação, use a seguinte opção de pipeline:

--experiment=enable_ppv_effect=false

Ocorreu um problema ao atualizar as credenciais

Ao tentar executar um job do Dataflow, aparece um erro semelhante ao seguinte:

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

Esse erro ocorre quando a conta de serviço do worker não tem o papel roles/dataflow.worker ou quando a API Dataflow não está ativada.

Primeiro, verifique se a conta de serviço do worker tem o papel roles/dataflow.worker. Se necessário, conceda o roles/dataflow.worker à conta de serviço do worker. Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.

Para ativar a API Dataflow, consulte Como ativar uma API no projeto do Google Cloud.

Permissão "compute.subnetworks.get" necessária

Ao tentar executar um job do Dataflow em uma rede VPC compartilhada, aparece um erro semelhante ao seguinte:

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

A VPC compartilhada permite exportar sub-redes de uma rede VPC em um projeto host para outros projetos de serviço na mesma organização. As instâncias nos projetos de serviço podem ter conexões de rede nas sub-redes compartilhadas do projeto host. Para mais informações, consulte Visão geral da VPC compartilhada.

Para resolver esse problema, primeiro verifique se o projeto de serviço está anexado ao projeto host. Para mais informações, consulte Anexar projetos de serviço na página "Como provisionar a VPC compartilhada".

Em seguida, conceda os papéis a seguir à conta de serviço do Compute Engine do projeto host, à conta de serviço do worker do Dataflow do projeto de serviço e à conta de serviço usada para enviar o job:

Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.

O executor do Dataflow não tem acesso ao bucket

Ao tentar listar objetos em um bucket do Cloud Storage, o job do Dataflow falha e aparece um erro semelhante ao seguinte:

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

Esse erro ocorre quando a conta de serviço do worker não tem o papel roles/storage.objectViewer.

Para resolver esse problema, conceda o papel roles/storage.objectViewer à sua conta de usuário. Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.

Permissão de chave do Cloud KMS negada no recurso

Quando você usa chaves de criptografia gerenciadas pelo cliente e tenta criar um job do Dataflow, ocorre uma falha e aparece um erro semelhante ao seguinte:

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.

Esse erro ocorre quando a conta de serviço do worker e a conta de serviço do Dataflow não têm o papel roles/cloudkms.cryptoKeyEncrypterDecrypter.

Para resolver esse problema, conceda o papel roles/cloudkms.cryptoKeyEncrypterDecrypter à conta de serviço do worker e à conta de serviço do Dataflow. Para mais informações, consulte Como conceder permissões de criptografia/descriptografia na página "Como usar chaves de criptografia gerenciadas pelo cliente".

Permissão negada no recurso

Quando você tenta criar um pipeline, ele falha com o seguinte erro:

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

Esse erro ocorrerá se a conta de serviço do worker do projeto não tiver acesso aos arquivos e outros recursos associados ao pipeline.

Para resolver esse problema, atribua os seguintes papéis à conta de serviço do worker:

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

Para mais informações, consulte Conta de serviço do worker em "Permissões e segurança do Dataflow".

O fluxo de trabalho falhou

Quando você usa chaves de criptografia gerenciadas pelo cliente e tenta criar um job do Dataflow, o job falha com o seguinte erro:

Workflow failed

Esse problema pode ocorrer pelos seguintes motivos:

  • A chave e o job do Dataflow não estão na mesma região ou uma chave multirregional é usada. Chaves globais e multirregionais não são compatíveis. A região da CMEK e a região do job do Dataflow precisam ser as mesmas.
  • O nome da chave não foi especificado corretamente. Talvez a chave não exista ou o nome tenha um erro de digitação.

A chave do Cloud KMS não pode proteger recursos para este job

Quando você está executando um job do Dataflow e tenta ativar uma chave de criptografia gerenciada pelo cliente, o job falha e aparece um erro semelhante ao seguinte:

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

Esse problema pode ocorrer pelos seguintes motivos:

  • A chave e o job do Dataflow não estão na mesma região ou uma chave multirregional é usada. Chaves globais e multirregionais não são compatíveis. A região da CMEK e a região do job do Dataflow precisam ser as mesmas.
  • O parâmetro dataflowKMSKey não foi especificado corretamente.

O escalonamento automático vertical não está funcionando

Quando você usa o escalonamento automático vertical, o job não é escalonado automaticamente, e o seguinte erro aparece nos registros dele:

{"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"}

Esse erro ocorre quando a conta de serviço do worker não tem o papel de worker do Dataflow (roles/dataflow.worker).

Para resolver esse problema, conceda à conta de serviço do worker o papel roles/dataflow.worker. Para mais informações, consulte Conceder um único papel na documentação do Identity and Access Management.

Se você estiver usando um papel personalizado para a conta de serviço do worker, adicione as seguintes permissões a ele:

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