Google Kubernetes Engine Identity and Access Management 角色和身份

数据平面身份

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

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

GKE 工作负载身份将以下 GKE 服务账号 (KSA) 与 Managed Service for Apache Spark 虚拟机服务账号相关联:

  1. agent KSA(与 Managed Service for Apache Spark 控制平面进行交互):
    serviceAccount:${PROJECT}.[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA(运行 Spark 驱动程序):
    serviceAccount:${PROJECT}.[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA(运行 Spark 执行器):
    serviceAccount:${PROJECT}.[${DPGKE_NAMESPACE}/spark-executor]

分配角色

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

示例:

以下命令会向 默认 Managed Service for Apache Spark 虚拟机服务账号 分配角色,以允许在 GKE 上的 Managed Service for Apache Spark 集群虚拟机上运行的 Spark 工作负载访问 Cloud Storage 存储分区和 BigQuery 数据集。

gcloud projects add-iam-policy-binding \
    --role=roles/storage.objectAdmin \
    --role=roles/bigquery.dataEditor \
    --member="project-number-compute@" \
    "${PROJECT}"

自定义 IAM 配置

GKE 上的 Managed Service for Apache Spark 使用 GKE 工作负载身份 将默认 Managed Service for Apache Spark 虚拟机服务帐号(数据平面身份) 与三个 GKE 服务账号 (KSA)相关联。

如需创建并使用其他 Google 服务帐号 (GSA) 来关联 KSA,请执行以下操作:

  1. 创建 GSA(请参阅创建和管理服务账号)。

    gcloud CLI 示例:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Managed Service for Apache Spark on GKE workloads."
    
    注意:

    • 此示例将 GSA 名称设置为“dataproc-${USER}”,但您可以使用其他名称。
  2. 设置环境变量:

    PROJECT=project-id \
      DPGKE_GSA="dataproc-${USER}@${PROJECT}."
      DPGKE_NAMESPACE=GKE namespace
    
    注意:

    • DPGKE_GSA:示例设置并使用 DPGKE_GSA 作为包含 GSA 电子邮件地址的变量的名称。您可以设置和使用其他变量名称。
    • DPGKE_NAMESPACE:默认 GKE 命名空间是您的 GKE 上的 Managed Service for Apache Spark 集群的 名称。
  3. 在 GKE 集群上创建 Managed Service for Apache Spark 时,请为 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}" \
    

  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}.[${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}.[${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}.[${DPGKE_NAMESPACE}/spark-executor]" \
          "${DPGKE_GSA}"