Dataflow の権限のトラブルシューティング

このページでは、Dataflow の権限に関する問題を調査して解決する方法について説明します。

Dataflow ジョブを正常に実行するには、ユーザー アカウントと Dataflow サービス アカウントに、リソースに対する適切なアクセス権が付与されている必要があります。必要なロールのリストと、それらのロールを付与する手順については、Dataflow のセキュリティと権限のページの Google Cloud 上のパイプラインのセキュリティと権限をご覧ください。

また、Apache Beam パイプラインが Google Cloud リソースにアクセスする場合、Dataflow プロジェクトのワーカー サービス アカウントがリソースにアクセスする必要があります。ワーカー サービス アカウントに必要なロールのリストについては、ロールの割り当て例をご覧ください。

ジョブの実行に必要な 1 つ以上のロールがない場合、ジョブログまたはワーカーログにエラーが表示されることがあります。ジョブの失敗時にエラーを検出する方法については、パイプラインの障害に関する情報を見つけるをご覧ください。

権限の問題を解決するには、不足している権限と、その権限が必要なアカウントを把握する必要があります。どの権限が不足しているかを確認するには、エラー メッセージに記載されている権限を確認し、その権限を含むロールを見つけます。常に必要になるわけではありませんが、多くの場合、関連するロールを Dataflow ワーカー サービス アカウントに割り当てる必要があります。

権限を追加するには、ユーザー アカウントにアクセスの管理が許可されている必要があります。詳細については、サービス アカウントに対するアクセス権の管理他のリソースへのアクセス権の管理をご覧ください。

ユーザーにプロジェクトへの書き込みアクセス権がない

Dataflow ジョブを実行しようとすると、ジョブが失敗し、次のようなエラーが表示されます。

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'

このエラーは、ユーザー アカウントに roles/dataflow.developer ロールがない場合に発生します。

この問題を解決するには、ユーザー アカウントに roles/dataflow.developer ロールを付与します。また、ユーザー アカウントに roles/iam.serviceAccountUser ロールがあることを確認します。詳細については、Identity and Access Management のドキュメントの単一ロールの付与をご覧ください。

ユーザーにプロジェクトに対する十分な権限がない

Dataflow ジョブをキャンセルしようとすると、次のようなエラーが表示されます。

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

ジョブをドレインまたは更新しようとすると、同様のエラーが発生することがあります。

このエラーは、次のいずれかの原因で発生します。

  • ユーザー アカウントに roles/dataflow.developer ロールがない。この問題を解決するには、ユーザー アカウントに roles/dataflow.developer ロールを付与します。また、ユーザー アカウントに roles/iam.serviceAccountUser ロールがあることを確認します。詳細については、Identity and Access Management のドキュメントの単一ロールの付与をご覧ください。
  • ジョブ ID が正しくない。入力ミスがある可能性があります。また、ジョブ ID ではなく、ジョブ名を使用してジョブをキャンセルしている可能性もあります。

ワーカー サービス アカウントの権限を確認できない

Dataflow ジョブを実行しようとすると、次のようなエラーが表示されます。

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.

このエラーは、ワーカー サービス アカウントに roles/dataflow.worker ロールがない場合に発生します。

この問題を解決するには、ワーカー サービス アカウントに roles/dataflow.worker ロールを付与します。詳細については、Identity and Access Management のドキュメントの単一ロールの付与をご覧ください。

パイプラインを検証できない

新しい Dataflow ジョブが起動する前に、Dataflow はパイプラインに対して検証チェックを実行します。検証でパイプラインの問題が検出されると、時間とコンピューティング リソースを節約するため、Dataflow は早い段階でジョブの送信に失敗します。Dataflow は、ジョブログに検証結果と問題の解決手順を含むログメッセージを記録します。

パイプライン検証チェックで権限の問題が検出されると、ジョブログに次のエラーが表示されることがあります。

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

複数のリソースに権限がない場合、ジョブログに複数の権限エラー メッセージが記録されます。

Dataflow ジョブを再送信する前に、権限の問題を修正してください。ロールと権限の変更については、次のリソースをご覧ください。

パイプライン検証をオーバーライドし、検証エラーのあるジョブを起動する場合は、次のパイプライン オプションを使用します。

--experiment=enable_ppv_effect=false

認証情報の更新中に問題が発生した

Dataflow ジョブを実行しようとすると、次のようなエラーが表示されます。

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

このエラーは、ワーカー サービス アカウントに roles/dataflow.worker ロールがない場合、または Dataflow API が有効になっていない場合に発生します。

まず、ワーカー サービス アカウントに roles/dataflow.worker ロールが付与されていることを確認します。必要に応じて、roles/dataflow.worker をワーカー サービス アカウントに付与します。詳細については、Identity and Access Management のドキュメントの単一ロールの付与をご覧ください。

Dataflow API を有効にするには、Google Cloud プロジェクトでの API の有効化をご覧ください。

必要な compute.subnetworks.get 権限

共有 VPC ネットワークで Dataflow ジョブを実行しようとすると、次のいずれかのようなエラーが表示されます。

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

共有 VPC を使用すると、ホスト プロジェクトの VPC ネットワークから、同じ組織内の別のサービス プロジェクトにサブネットをエクスポートできます。サービス プロジェクトのインスタンスは、ホスト プロジェクトの共有サブネットでネットワーク接続を得ることができます。詳しくは、共有 VPC の概要 をご覧ください。

この問題を解決するには、まず、サービス プロジェクトがホスト プロジェクトに接続していることを確認します。詳細については、「共有 VPC をプロビジョニングする」ページのサービス プロジェクトの接続をご覧ください。

次に、ホスト プロジェクトの Compute Engine サービス アカウント、サービス プロジェクトの Dataflow ワーカー サービス アカウント、ジョブの送信に使用するサービス アカウントに次のロールを付与します。

詳細については、Identity and Access Management のドキュメントの共有 VPC のサブネットワーク パラメータを指定するためのガイドライン単一ロールの付与をご覧ください。

Dataflow ランナーがバケットにアクセスできない

Cloud Storage バケット内のオブジェクトを一覧表示しようとすると、Dataflow ジョブが失敗し、次のようなエラーが表示されます。

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

このエラーは、ワーカー サービス アカウントに roles/storage.objectViewer ロールがない場合に発生します。

この問題を解決するには、ユーザー アカウント アカウントに roles/storage.objectViewer ロールを付与します。詳細については、Identity and Access Management のドキュメントの単一ロールの付与をご覧ください。

リソースで Cloud KMS 鍵の権限が拒否された

顧客管理の暗号鍵を使用して Dataflow ジョブを作成しようとすると、ジョブが失敗し、次のようなエラーが表示されます。

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.

このエラーは、ワーカー サービス アカウントと Dataflow サービス アカウントに roles/cloudkms.cryptoKeyEncrypterDecrypter ロールがない場合に発生します。

この問題を解決するには、ワーカー サービス アカウントと Dataflow サービス アカウントに roles/cloudkms.cryptoKeyEncrypterDecrypter ロールを付与します。詳細については、「顧客管理の暗号鍵の使用」ページの暗号化権限と復号権限の付与をご覧ください。

リソースの権限が拒否された

パイプラインを作成しようとすると、パイプラインが失敗し、次のエラーが発生します。

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

このエラーは、プロジェクトのワーカー サービス アカウントに、パイプラインに関連付けられたファイルやその他のリソースへのアクセス権がない場合に発生します。

この問題を解決するには、ワーカー サービス アカウントに次のロールを割り当てます。

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

詳細については、「Dataflow のセキュリティと権限」のワーカー サービス アカウントをご覧ください

ワークフローが失敗した

顧客管理の暗号鍵を使用して Dataflow ジョブを作成しようとすると、ジョブが失敗し、次のエラーが返されます。

Workflow failed

エラーの理由としては、次のことが考えられます。

  • 鍵と Dataflow ジョブが同じリージョンにないか、マルチリージョン鍵が使用されています。グローバル鍵とマルチリージョン鍵はサポートされていません。CMEK のリージョンと Dataflow ジョブのリージョンは同じである必要があります。
  • 鍵名が正しく指定されていません。鍵が存在しないか、間違った名前を入力している可能性があります。

Cloud KMS 鍵でジョブのリソースを保護できない

Dataflow ジョブの実行中に顧客管理の暗号鍵を有効にしようとすると、ジョブが失敗し、次のようなエラーが表示されます。

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

エラーの理由としては、次のことが考えられます。

  • 鍵と Dataflow ジョブが同じリージョンにないか、マルチリージョン鍵が使用されています。グローバル鍵とマルチリージョン鍵はサポートされていません。CMEK のリージョンと Dataflow ジョブのリージョンは同じである必要があります。
  • dataflowKMSKey パラメータが正しく指定されていません。

垂直自動スケーリングが機能しない

垂直自動スケーリングを使用しているときに、ジョブが垂直方向に自動的にスケーリングされず、次のエラーがジョブログに表示されます。

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

このエラーは、ワーカー サービス アカウントに Dataflow ワーカー(roles/dataflow.worker)ロールがない場合に発生します。

この問題を解決するには、ワーカー サービス アカウントに roles/dataflow.worker ロールを付与します。詳細については、Identity and Access Management のドキュメントの単一ロールの付与をご覧ください。

ワーカー サービス アカウントにカスタムロールを使用している場合は、カスタムロールに次の権限を追加します。

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