Dataproc on GKE Identity and Access Management 角色和身份

数据平面身份

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

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

GKE 工作负载身份将以下 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 KSA(运行 Spark 执行器):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

分配角色

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

示例:

以下命令会向默认 Dataproc 虚拟机服务账号分配角色,以允许在 Dataproc on GKE 集群虚拟机上运行的 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 虚拟机服务账号(数据平面身份)与三个 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. 在 GKE 集群上创建 Dataproc 时,请为 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. 运行以下命令,向服务账号分配必要的 Workload Identity 权限:

    1. 为您的 GSA 分配 dataproc.worker 角色,以允许其充当代理:
      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}"