資料層身分
GKE 上的 Managed Service for Apache Spark 會使用 GKE 工作負載身分,允許 GKE 上的 Managed Service for Apache Spark 叢集中的 Pod,以預設 Managed Service for Apache Spark VM 服務帳戶 (資料層身分) 的授權執行動作。如要更新 Managed Service for Apache Spark on GKE 虛擬叢集所用 GSA 的 IAM 政策,工作負載身分必須具備下列權限:
compute.projects.getiam.serviceAccounts.getIamPolicyiam.serviceAccounts.setIamPolicy
GKE Workload Identity 會將下列 GKE 服務帳戶 (KSA) 連結至 Managed Service for Apache Spark VM 服務帳戶:
agentKSA (與 Managed Service for Apache Spark 控制層互動):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]spark-driverKSA (執行 Spark 驅動程式):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]spark-executorKSA (執行 Spark 執行器):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
指派角色
授予 Managed Service for Apache Spark VM 服務帳戶權限,允許 spark-driver 和 spark-executor 存取專案資源、資料來源、資料接收器,以及工作負載所需的任何其他服務。
範例:
下列指令會將角色指派給預設 Managed Service for Apache Spark VM 服務帳戶,允許在 Managed Service for Apache Spark 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 設定
GKE 上的 Managed Service for Apache Spark 會使用 GKE 工作負載身分,將預設的 Managed Service for Apache Spark VM 服務帳戶 (資料層身分) 連結至三個 GKE 服務帳戶 (KSA)。
如要建立及使用其他 Google 服務帳戶 (GSA) 連結至 KSA,請按照下列步驟操作:
建立 GSA (請參閱「建立和管理服務帳戶」)。
gcloud CLI 範例:
附註:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Managed Service for Apache Spark on GKE workloads."- 範例將 GSA 名稱設為「dataproc-${USER}」,但您可以使用其他名稱。
設定環境變數:
附註:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespaceDPGKE_GSA:範例會設定並使用DPGKE_GSA做為變數名稱,其中包含 GSA 的電子郵件地址。您可以設定和使用其他變數名稱。DPGKE_NAMESPACE:預設的 GKE 命名空間是 Managed Service for Apache Spark on GKE 叢集的名稱。
建立 Managed Service for Apache Spark on GKE 叢集時,請新增下列屬性,讓 Managed Service for Apache Spark 使用您的 GSA,而非預設 GSA:
--properties "dataproc:dataproc.gke.agent.google-service-account=${DPGKE_GSA}" \ --properties "dataproc:dataproc.gke.nodepool.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}" \執行下列指令,將必要的Workload Identity權限指派給服務帳戶:
- 將
dataproc.worker角色指派給 GSA,允許 GSA 擔任代理程式:gcloud projects add-iam-policy-binding \ --role=roles/dataproc.worker \ --member="serviceAccount:${DPGKE_GSA}" \ "${PROJECT}" 將
iam.workloadIdentityUser角色指派給agentKSA,允許 KSA 擔任 GSA: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-driverKSA,允許 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-executorKSA,允許 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}"
- 將