排解 Dataflow 權限問題

本頁面說明如何調查及解決 Dataflow 權限問題。

如要順利執行 Dataflow 工作,使用者帳戶和 Dataflow 服務帳戶必須具備資源的必要存取權。如需必要角色清單和授予這些角色的步驟,請參閱 Dataflow 安全性與權限頁面的「Google Cloud 管道的安全性與權限」。

此外,當 Apache Beam 管道存取 Google Cloud 資源時,Dataflow 專案工作站服務帳戶需要存取資源。如需工作者服務帳戶可能需要的角色清單,請參閱角色指派範例

如果缺少執行工作所需的一或多個角色,工作記錄或工作站記錄中可能會顯示錯誤。 如需工作失敗時如何找出錯誤的操作說明,請參閱「尋找管道失敗的相關資訊」。

如要解決權限問題,請瞭解缺少哪些權限,以及哪個帳戶需要這些權限。如要瞭解缺少哪些權限,請查看錯誤訊息中列出的權限,並找出包含該權限的角色。您通常需要將相關角色指派給 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」權限

嘗試在共用虛擬私有雲端網路上執行 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

共用虛擬私有雲可讓您將「主專案」虛擬私有雲網路的子網路匯出至同一個機構中的其他服務專案。服務專案中的執行個體可以使用主專案共用子網路中的網路連線。詳情請參閱「共用虛擬私有雲總覽」。

如要解決這個問題,請先確認服務專案已附加到主專案。詳情請參閱「佈建共用虛擬私有雲」頁面的「附加服務專案」。

接著,將下列角色授予主專案的 Compute Engine 服務帳戶、服務專案的 Dataflow 工作者服務帳戶,以及用於提交工作的服務帳戶:

詳情請參閱 Identity and Access Management 說明文件中的「指定共用 VPC 的子網路參數指南」和「授予單一角色」。

Dataflow 執行器無法存取 bucket

嘗試列出 Cloud Storage bucket 中的物件時,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 角色,就會發生這項錯誤。

如要解決這個問題,請將 roles/cloudkms.cryptoKeyEncrypterDecrypter 角色授予工作站服務帳戶和 Dataflow 服務帳戶。詳情請參閱「使用客戶自行管理的加密金鑰」頁面中的「授予加密者/解密者權限」。

資源權限遭拒

嘗試建立管道時,管道會失敗並顯示下列錯誤:

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

您沒有權限建立 Pub/Sub 追蹤訂閱項目

當 Dataflow 工作使用自訂事件時間戳記從 Pub/Sub 讀取資料時,工作記錄中會顯示下列錯誤:

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

您可以設定 Dataflow,從 Pub/Sub 訊息的屬性讀取事件時間戳記。在這種情況下,Dataflow 會建立第二個 Pub/Sub 訂閱項目,稱為「追蹤訂閱項目」

如果 Dataflow 沒有建立追蹤訂閱項目的權限,就會發生這項錯誤。詳情請參閱「時間戳記和浮水印」。