資料層身分
Dataproc on GKE 會使用 GKE 工作負載身分,允許 Dataproc on GKE 叢集中的 Pod 以預設 Dataproc VM 服務帳戶 (資料層身分) 的授權執行動作。如要更新 Dataproc on GKE 虛擬叢集所用 GSA 的 IAM 政策,Workload Identity 必須具備下列權限:
compute.projects.get
iam.serviceAccounts.getIamPolicy
iam.serviceAccounts.setIamPolicy
GKE Workload Identity 會將下列 GKE 服務帳戶 (KSA) 連結至 Dataproc VM 服務帳戶:
agent
KSA (與 Dataproc 控制平面互動):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
spark-driver
沙烏地阿拉伯 (適用 Spark 駕駛人):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
spark-executor
KSA (執行 Spark 執行器):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
指派角色
授予Dataproc VM 服務帳戶權限,允許 spark-driver
和 spark-executor
存取專案資源、資料來源、資料接收器,以及工作負載所需的任何其他服務。
範例:
下列指令會將角色指派給預設 Dataproc VM 服務帳戶,允許在 Dataproc on GKE 叢集 VM 上執行的 Spark 工作負載存取專案中的 Cloud Storage 值區和 BigQuery 資料集。
gcloud projects add-iam-policy-binding \ --role=roles/storage.objectAdmin \ --role=roles/bigquery.dataEditor \ --member="project-number-compute@developer.gserviceaccount.com" \ "${PROJECT}"
自訂 IAM 設定
Dataproc on GKE 會使用 GKE 工作負載身分,將預設的 Dataproc VM 服務帳戶 (資料層身分) 連結至三個 GKE 服務帳戶 (KSA)。
如要建立及使用其他 Google 服務帳戶 (GSA) 連結至 KSA,請按照下列步驟操作:
建立 GSA (請參閱「建立及管理服務帳戶」)。
gcloud CLI 範例:
注意事項:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Dataproc on GKE workloads."
- 範例將 GSA 名稱設為「dataproc-${USER}」,但您可以使用其他名稱。
設定環境變數:
注意事項:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespace
DPGKE_GSA
:範例會將DPGKE_GSA
設為變數名稱,其中包含 GSA 的電子郵件地址。您可以設定及使用其他變數名稱。DPGKE_NAMESPACE
:預設的 GKE 命名空間是 Dataproc on GKE 叢集的名稱。
建立 Dataproc on GKE 叢集時,請新增下列屬性,讓 Dataproc 使用您的 GSA,而非預設 GSA:
--properties "dataproc:dataproc.gke.agent.google-service-account=${DPGKE_GSA}" \ --properties "dataproc:dataproc.gke.spark.driver.google-service-account=${DPGKE_GSA}" \ --properties "dataproc:dataproc.gke.spark.executor.google-service-account=${DPGKE_GSA}" \
Run the following commands to assign necessary Workload Identity permissions to the service accounts:
- Assign your GSA the
dataproc.worker
role to allow it to act as agent:gcloud projects add-iam-policy-binding \ --role=roles/dataproc.worker \ --member="serviceAccount:${DPGKE_GSA}" \ "${PROJECT}"
將
agent
角色指派給 KSA,允許 KSA 擔任 GSA:iam.workloadIdentityUser
gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \ "${DPGKE_GSA}"
將
iam.workloadIdentityUser
角色授予spark-driver
KSA,允許該 KSA 擔任 GSA:gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]" \ "${DPGKE_GSA}"
將
iam.workloadIdentityUser
角色授予spark-executor
KSA,允許該 KSA 擔任 GSA:gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]" \ "${DPGKE_GSA}"
- Assign your GSA the