数据平面身份
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 虚拟机服务账号:
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
沙特阿拉伯(运行 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