数据平面身份
Dataproc on GKE 使用 GKE Workload Identity 来允许 Dataproc on GKE 集群中的 Pod 使用默认 Dataproc 虚拟机服务账号(数据平面身份)的权限执行操作。Workload Identity 需要具有以下权限,才能更新 Dataproc on GKE 虚拟集群使用的 GSA 上的 IAM 政策:
compute.projects.get
iam.serviceAccounts.getIamPolicy
iam.serviceAccounts.setIamPolicy
GKE 工作负载身份会将以下 GKE 服务账号 (KSA) 与 Dataproc 虚拟机服务账号相关联:
agent
KSA(与 Dataproc 控制平面交互):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
spark-driver
KSA(运行 Spark 驱动程序):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
spark-executor
KSA(运行 Spark 执行器):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
分配角色
向 Dataproc 虚拟机服务账号授予权限,以允许 spark-driver
和 spark-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,请执行以下操作:
创建 GSA(请参阅创建和管理服务账号)。
gcloud CLI 示例:
注意:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Dataproc on GKE workloads."
- 该示例将 GSA 名称设置为“dataproc-${USER}”,但您也可以使用其他名称。
设置环境变量:
注意: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 集群的名称。
创建 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}" \
Run the following commands to assign necessary Workload Identity permissions to the service accounts:
- 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}"
向
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}"
向
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}"
向
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}"
- Assign your GSA the