Resolva problemas com as autorizações do Dataflow

Esta página mostra-lhe como investigar e resolver problemas com as autorizações do Dataflow.

Para executar trabalhos do Dataflow com êxito, a sua conta de utilizador e as contas de serviço do Dataflow têm de ter o acesso necessário aos recursos. Para ver uma lista das funções necessárias e os passos para conceder estas funções, consulte o artigo Segurança e autorizações para pipelines no Google Cloud na página de segurança e autorizações do Dataflow.

Além disso, quando os pipelines do Apache Beam acedem a Google Cloud recursos, a conta de serviço do trabalhador do projeto do Dataflow precisa de aceder aos recursos. Para ver uma lista de funções de que a sua conta de serviço de trabalho pode precisar, consulte o Exemplo de atribuição de funções.

Quando faltam uma ou mais funções necessárias para executar uma tarefa, pode aparecer um erro nos registos de tarefas ou nos registos de trabalhadores. Para ver instruções que explicam como encontrar erros quando uma tarefa falha, consulte o artigo Encontre informações sobre falhas de pipelines.

Para resolver problemas de autorizações, tem de compreender que autorização está em falta e que conta precisa de ter essa autorização. Para saber que autorização está em falta, consulte a autorização indicada na mensagem de erro e encontre a função que contém essa autorização. Muitas vezes, mas nem sempre, tem de atribuir a função relevante à conta de serviço do trabalhador do Dataflow.

Para adicionar autorizações, a sua conta de utilizador tem de ter autorização para gerir o acesso. Para mais informações, consulte os artigos Faça a gestão do acesso às contas de serviço e Faça a gestão do acesso a outros recursos.

O utilizador não tem acesso de escrita ao projeto

Quando tenta executar uma tarefa do Dataflow, a tarefa falha e é apresentado 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'

Este erro ocorre quando a sua conta de utilizador não tem a função roles/dataflow.developer.

Para resolver este problema, conceda à sua conta de utilizador a função roles/dataflow.developer. Além disso, certifique-se de que a sua conta de utilizador tem a função roles/iam.serviceAccountUser. Para mais informações, consulte o artigo Conceda uma única função na documentação da gestão de identidades e acessos.

O utilizador não tem autorizações suficientes no projeto

Quando tenta cancelar uma tarefa do Dataflow, é apresentado 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

Podem ocorrer erros semelhantes ao tentar esgotar ou atualizar uma tarefa.

Este erro ocorre por um dos seguintes motivos:

  • A sua conta de utilizador não tem a função roles/dataflow.developer. Para resolver este problema, conceda à sua conta de utilizador a função roles/dataflow.developer. Além disso, certifique-se de que a sua conta de utilizador tem a função roles/iam.serviceAccountUser. Para mais informações, consulte o artigo Conceda uma única função na documentação da gestão de identidades e acessos.
  • O ID da tarefa está incorreto. Pode conter um erro ortográfico ou pode estar a usar o nome da tarefa para cancelar a tarefa em vez do ID da tarefa.

Falha na validação das autorizações da conta de serviço do trabalhador

Quando tenta executar uma tarefa do Dataflow, é apresentado 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.

Este erro ocorre quando a conta de serviço do trabalhador não tem a função roles/dataflow.worker.

Para resolver este problema, conceda à conta de serviço do trabalhador a função roles/dataflow.worker. Para mais informações, consulte o artigo Conceda uma única função na documentação da gestão de identidades e acessos.

Falha na validação do pipeline

Antes de iniciar uma nova tarefa do Dataflow, o Dataflow executa verificações de validação no pipeline. Quando as verificações de validação encontram problemas com o pipeline, para poupar tempo e recursos de computação, o Dataflow falha o envio da tarefa antecipadamente. Nos registos de tarefas, o Dataflow inclui mensagens de registo que contêm as conclusões da validação e instruções para resolver os problemas.

Quando a verificação de validação da pipeline encontra problemas de autorização, pode ver o seguinte erro nos registos de tarefas:

[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 faltarem autorizações para mais do que um recurso, os registos de tarefas contêm várias mensagens de erro de autorização.

Antes de tentar reenviar a tarefa do Dataflow, corrija os problemas de autorização. Os seguintes recursos fornecem informações sobre como modificar funções e autorizações.

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

--experiment=enable_ppv_effect=false

Ocorreu um problema ao atualizar as suas credenciais

Quando tenta executar uma tarefa do Dataflow, é apresentado 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

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

Primeiro, verifique se a conta de serviço do trabalhador tem a função roles/dataflow.worker. Se necessário, conceda o roles/dataflow.worker à conta de serviço do trabalhador. Para mais informações, consulte o artigo Conceda uma única função na documentação da gestão de identidades e acessos.

Para ativar a API Dataflow, consulte o artigo Ativar uma API no seu projeto da Google Cloud Platform.

Autorização "compute.subnetworks.get" necessária

Quando tenta executar uma tarefa do Dataflow numa rede de VPC partilhada, é apresentado um erro semelhante a um dos seguintes:

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

A VPC partilhada permite-lhe exportar sub-redes de uma rede VPC num projeto anfitrião para outros projetos de serviço na mesma organização. As instâncias nos projetos de serviço podem ter ligações de rede nas sub-redes partilhadas do projeto anfitrião. Para mais informações, consulte o artigo Vista geral da VPC partilhada.

Para resolver este problema, comece por verificar se o projeto de serviço está anexado ao projeto anfitrião. Para mais informações, consulte o artigo Anexe projetos de serviço na página Aprovisionamento da VPC partilhada.

Em seguida, conceda as seguintes funções à conta de serviço do Compute Engine do projeto anfitrião, à conta de serviço do trabalhador do Dataflow do projeto de serviço e à conta de serviço usada para enviar a tarefa:

Para mais informações, consulte as Diretrizes para especificar um parâmetro de sub-rede para a VPC partilhada e Conceda uma única função na documentação da gestão de identidades e acessos.

O executor do fluxo de dados não tem acesso ao contentor

Quando tenta listar objetos num contentor do Cloud Storage, a tarefa do Dataflow falha e é apresentado 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

Este erro ocorre quando a conta de serviço do trabalhador não tem a função roles/storage.objectViewer.

Para resolver este problema, conceda à sua conta de utilizador a função roles/storage.objectViewer. Para mais informações, consulte o artigo Conceda uma única função na documentação da gestão de identidades e acessos.

Autorização da chave do Cloud KMS negada no recurso

Quando usa chaves de encriptação geridas pelo cliente e tenta criar uma tarefa do Dataflow, a tarefa falha e é apresentado 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.

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

Para resolver este problema, conceda a função roles/cloudkms.cryptoKeyEncrypterDecrypter à conta de serviço do trabalhador e à conta de serviço do Dataflow. Para mais informações, consulte o artigo Conceder autorizações de encriptação/desencriptação na página Utilizar chaves de encriptação geridas pelo cliente.

Autorização negada no recurso

Quando tenta criar um pipeline, este 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).

Este erro ocorre se a conta de serviço do trabalhador do seu projeto não tiver acesso aos ficheiros e a outros recursos associados ao pipeline.

Para resolver este problema, atribua as seguintes funções à conta de serviço do trabalhador:

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

Para mais informações, consulte o artigo Conta de serviço do trabalhador em "Segurança e autorizações do Dataflow".

Falha no fluxo de trabalho

Quando usa chaves de encriptação geridas pelo cliente e tenta criar uma tarefa do Dataflow, a tarefa falha com o seguinte erro:

Workflow failed

Este erro pode ocorrer pelos seguintes motivos:

  • A chave e a tarefa do Dataflow não estão na mesma região ou é usada uma chave multirregional. As chaves globais e multirregionais não são suportadas. A região da CMEK e a região da tarefa do Dataflow têm de ser iguais.
  • O nome da chave não está especificado corretamente. A chave pode não existir ou o nome pode ter uma gralha.

Não é possível proteger os recursos para esta tarefa com a chave do Cloud KMS

Quando está a executar uma tarefa do Dataflow e a tentar ativar uma chave de encriptação gerida pelo cliente, a tarefa falha e é apresentado 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

Este erro pode ocorrer pelos seguintes motivos:

  • A chave e a tarefa do Dataflow não estão na mesma região ou é usada uma chave multirregional. As chaves globais e multirregionais não são suportadas. A região da CMEK e a região da tarefa do Dataflow têm de ser iguais.
  • O parâmetro dataflowKMSKey não está especificado corretamente.

A escala automática vertical não funciona

Quando usa a escala automática vertical, a tarefa não é dimensionada automaticamente na vertical, e o seguinte erro aparece nos registos da tarefa:

{"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 erro ocorre quando a conta de serviço do worker não tem a função Dataflow Worker (roles/dataflow.worker).

Para resolver este problema, conceda à conta de serviço do trabalhador a função roles/dataflow.worker. Para mais informações, consulte o artigo Conceda uma única função na documentação de gestão de identidades e acessos.

Se estiver a usar uma função personalizada para a conta de serviço do trabalhador, adicione as seguintes autorizações à função personalizada:

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

Não tem autorização para criar uma subscrição de acompanhamento do Pub/Sub

Quando uma tarefa do Dataflow lê a partir do Pub/Sub através de datas/horas personalizadas de eventos, é apresentado o seguinte erro nos registos de tarefas:

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

Pode configurar o Dataflow para ler as datas/horas dos eventos a partir de um atributo na mensagem do Pub/Sub. Nesse caso, o Dataflow cria uma segunda subscrição do Pub/Sub, denominada subscrição de acompanhamento.

Este erro ocorre quando o Dataflow não tem autorização para criar a subscrição de acompanhamento. Para mais informações, consulte o artigo Indicações de tempo e marcas de água.