Dataproc on GKE IAM 角色和身份

数据平面身份

Dataproc on GKE 使用 GKE 工作负载身份 让 Dataproc on GKE 集群内的 Pod 默认授权 Dataproc 虚拟机服务账号(数据平面身份)。 Workload Identity 需要具有以下权限,才能更新 Dataproc on GKE 虚拟集群使用的 GSA 上的 IAM 政策:

  • compute.projects.get
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

GKE Workload Identity 会将以下 将 GKE 服务账号 (KSA) 关联到 Dataproc 虚拟机服务账号:

  1. agent KSA(与 Dataproc 控制平面交互):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA(运行 Spark 驱动程序):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor 沙特阿拉伯(运行 Spark 执行器):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

分配角色

Dataproc 虚拟机服务账号 以允许 spark-driverspark-executor 访问项目资源, 数据源、数据接收器以及工作负载所需的任何其他服务。

示例:

以下命令会向默认 Dataproc 虚拟机服务账号分配角色,以允许在 GKE 集群虚拟机上 Dataproc 上运行的 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 Workload Identity 将默认的 Dataproc 虚拟机服务账号(数据平面身份)与三个 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 分配 iam.workloadIdentityUser 角色,以允许其充当 GSA:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \
          "${DPGKE_GSA}"
      

    3. spark-driver KSA 授予 iam.workloadIdentityUser 角色 允许它充当您的 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. spark-executor KSA 授予 iam.workloadIdentityUser 角色 允许它充当您的 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}"