Identidad del plano de datos
Dataproc en GKE usa Identidad de carga de trabajo de GKE para permitir que los pods del clúster de Dataproc en GKE actúen con la autoridad de la cuenta de servicio de VM de Dataproc predeterminada (identidad del plano de datos). Identidad de carga de trabajo requiere los siguientes permisos para actualizar las políticas de gestión de identidades y accesos en la cuenta de servicio de Google que usa tu clúster virtual de Dataproc en GKE:
compute.projects.getiam.serviceAccounts.getIamPolicyiam.serviceAccounts.setIamPolicy
Workload Identity de GKE vincula las siguientes cuentas de servicio de GKE (KSAs) a la cuenta de servicio de la VM de Dataproc:
agentKSA (interactúa con el plano de control de Dataproc):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]spark-driverKSA (ejecuta controladores de Spark):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]spark-executorKSA (ejecuta ejecutores de Spark):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
Asignar roles
Concede permisos a la cuenta de servicio de la VM de Dataproc para permitir que spark-driver y spark-executor accedan a los recursos del proyecto, las fuentes de datos, los receptores de datos y cualquier otro servicio que necesite tu carga de trabajo.
Ejemplo:
El siguiente comando asigna roles a la cuenta de servicio predeterminada de la VM de Dataproc para permitir que las cargas de trabajo de Spark que se ejecutan en las VMs del clúster de Dataproc en GKE accedan a los cubos de Cloud Storage y a los conjuntos de datos de BigQuery del proyecto.
gcloud projects add-iam-policy-binding \
--role=roles/storage.objectAdmin \
--role=roles/bigquery.dataEditor \
--member="project-number-compute@developer.gserviceaccount.com" \
"${PROJECT}"
Configuración de gestión de identidades y accesos personalizada
Dataproc en GKE usa la identidad de carga de trabajo de GKE para vincular la cuenta de servicio de VM de Dataproc predeterminada (identidad del plano de datos) a las tres cuentas de servicio de GKE (KSA).
Para crear y usar otra cuenta de servicio de Google (GSA) para vincularla a las KSAs, sigue estos pasos:
Crea la cuenta de servicio de Google (consulta el artículo Crear y gestionar cuentas de servicio).
Ejemplo de la CLI gcloud:
Notas:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Dataproc on GKE workloads."- En el ejemplo, se asigna el nombre "dataproc-${USER}" a la cuenta de servicio de Google, pero puedes usar otro nombre.
Define las variables de entorno:
Notas:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespaceDPGKE_GSA: en los ejemplos se define y se usaDPGKE_GSAcomo nombre de la variable que contiene la dirección de correo de tu GSA. Puedes definir y usar otro nombre de variable.DPGKE_NAMESPACE: El espacio de nombres de GKE predeterminado es el nombre de tu clúster de Dataproc en GKE.
Cuando cree el clúster de Dataproc en GKE, añada las siguientes propiedades para que Dataproc use su cuenta de servicio de Google en lugar de la predeterminada:
--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}" \Ejecuta los siguientes comandos para asignar los permisos necesarios de Workload Identity a las cuentas de servicio:
- Asigna a tu GSA el rol
dataproc.workerpara que pueda actuar como agente:gcloud projects add-iam-policy-binding \ --role=roles/dataproc.worker \ --member="serviceAccount:${DPGKE_GSA}" \ "${PROJECT}" Asigna el rol
agentiam.workloadIdentityUsera la KSA para que pueda actuar como tu GSA:gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \ "${DPGKE_GSA}"Concede a
spark-driverde Arabia Saudí el roliam.workloadIdentityUserpara que pueda actuar como tu agente de servicios de Google:gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]" \ "${DPGKE_GSA}"Concede a
spark-executorde Arabia Saudí el roliam.workloadIdentityUserpara que pueda actuar como tu agente de servicios de Google:gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]" \ "${DPGKE_GSA}"
- Asigna a tu GSA el rol