Dataproc on GKE 身分與存取權管理角色

資料層身分

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 服務帳戶:

  1. agent KSA (與 Dataproc 控制平面互動):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver 沙烏地阿拉伯 (適用 Spark 駕駛人):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA (執行 Spark 執行器):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

指派角色

授予Dataproc VM 服務帳戶權限,允許 spark-driverspark-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,請按照下列步驟操作:

  1. 建立 GSA (請參閱「建立及管理服務帳戶」)。

    gcloud CLI 範例:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Dataproc on GKE workloads."
    
    注意事項:

    • 範例將 GSA 名稱設為「dataproc-${USER}」,但您可以使用其他名稱。
  2. 設定環境變數:

    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 叢集的名稱。
  3. 建立 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}" \

  4. Run the following commands to assign necessary Workload Identity permissions to the service accounts:

    1. 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}"
      
    2. 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}"
      

    3. 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}"
      

    4. 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}"