![](/img/trans.png)
[英]How can I increase the thread stack size on Apache Beam pipeline workers with Google Cloud Dataflow?
[英]Google Cloud Dataflow serviceaccount not propagated to workers?
我們有多個 Google Cloud Dataflow 作業(用 Java / Kotlin 編寫),它們可以以兩種不同的方式運行:
從用戶帳戶運行 Dataflow 作業時,Dataflow 會向工作人員提供默認控制器服務帳戶。 它不向工人提供授權用戶。
從 serviceaccount 運行 Dataflow 作業時,我想使用setGcpCredential設置的serviceaccount將傳播到 Dataflow 在后台使用的工作虛擬機。 JavaDocs沒有提到任何這些,但他們確實提到憑據用於對 GCP 服務進行身份驗證。
在 Dataflow 的大多數用例中,我們在項目 A 中運行 Dataflow 作業,而在項目 B 中從 BigQuery 中讀取數據。因此,我們為用戶提供了對項目 B 中 BigQuery 數據集的讀者訪問權限,以及使用的服務帳戶如上所述的第二種方式。 同一個 serviceaccount 還將在項目 A 中擁有BigQuery 的jobUser 和 dataViewer 角色。
現在,問題是,在這兩種情況下,我們似乎都需要為默認控制器服務帳戶提供對 Dataflow 作業中使用的 BigQuery 數據集的訪問權限。 如果我們不這樣做,當作業嘗試訪問項目 B 中的數據集時,我們將獲得 BigQuery 的權限被拒絕 (403)。對於所描述的第二種方式,我希望 Dataflow 獨立於默認值控制器服務帳戶。 我的預感是 Dataflow 不會將 PipelineOptions 中設置的 serviceaccount 傳播給工作人員。
通常,我們提供項目、區域、區域、臨時位置(gcpTempLocation、tempLocation、stagingLocation)、運行器類型(在本例中為 DataflowRunner)以及作為 PipelineOptions 的 gcpCredential。
那么,Google Cloud Dataflow 真的將提供的 serviceaccount 傳播給工作人員嗎?
更新
我們首先嘗試添加options.setServiceAccount
,如Magda 所示,而不添加 IAM 權限。 這會導致 Dataflow 日志中出現以下錯誤:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : " Current user cannot act as service account dataflow@project.iam.gserviceaccount.com. Causes: Current user cannot act as service account dataflow@project.iam.gserviceaccount.com..",
"reason" : "forbidden"
} ],
"message" : " Current user cannot act as service account dataflow@project.iam.gserviceaccount.com.. Causes: Current user cannot act as service account dataflow@project.iam.gserviceaccount.com.",
"status" : "PERMISSION_DENIED"
}
之后,我們嘗試將roles/iam.serviceAccountUser
添加到此服務帳戶。 不幸的是,這導致了同樣的錯誤。 此服務帳戶已具有 IAM 角色 Dataflow 工作器和 BigQuery 作業用戶。 默認的計算引擎控制器 serviceaccount 123456-compute@developer.gserviceaccount.com
只有 Editor 角色,我們沒有添加任何其他 IAM 角色/權限。
我認為您也需要設置控制器服務帳戶。 您可以在數據流管道選項中使用options.setServiceAccount("hereYourControllerServiceAccount@yourProject.iam.gserviceaccount.com")
。
您將需要添加一些額外的權限:
對於控制器:Dataflow Worker 和 Storage Object Admin。
對於執行者:服務帳戶用戶。
這就是我在 Google 的文檔中找到並自己嘗試的內容。
我認為這可能會給你一些見解:
為了讓 BigQuery 源和接收器正常運行,以下兩個帳號必須有權訪問您的 Cloud Dataflow 作業讀取或寫入的任何 BigQuery 數據集:
- 用於執行 Cloud Dataflow 作業的 GCP 帳戶
- 運行 Cloud Dataflow 作業的控制器服務帳號
例如,如果您的 GCP 帳戶是 abcde@gmail.com,並且您執行 Cloud Dataflow 作業的項目的項目編號是 123456789,則必須授予以下帳戶訪問所使用的 BigQuery 數據集的權限:abcde@gmail.com,和 123456789-compute@developer.gserviceaccount.com。
更多信息: https : //cloud.google.com/dataflow/docs/concepts/security-and-permissions#controller_service_account
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.