Identidad del plano de datos
Managed Service para Apache Spark en GKE usa Workload Identity de GKE para permitir que los pods dentro del clúster de Managed Service para Apache Spark en GKE actúen con la autoridad de la cuenta de servicio de VM predeterminada de Managed Service para Apache Spark (identidad del plano de datos). Workload Identity requiere los siguientes permisos para actualizar las políticas de IAM en la GSA que usa tu clúster virtual de Managed Service para Apache Spark en GKE:
compute.projects.getiam.serviceAccounts.getIamPolicyiam.serviceAccounts.setIamPolicy
La identidad de carga de trabajo de GKE vincula las siguientes cuentas de servicio de GKE (KSA) a la cuenta de servicio de VM de Managed Service para Apache Spark:
agentKSA (interactúa con el plano de control de Managed Service para Apache Spark):
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
Otorga permisos a la cuenta de servicio de VM de Managed Service para Apache Spark 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 requiera tu carga de trabajo.
Ejemplo:
El siguiente comando asigna roles a la cuenta de servicio predeterminada de la VM de Managed Service para Apache Spark para permitir que las cargas de trabajo de Spark que se ejecutan en las VMs del clúster de Managed Service para Apache Spark en GKE accedan a los buckets de Cloud Storage y a los conjuntos de datos de BigQuery en el 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 personalizada de IAM
Managed Service para Apache Spark en GKE usa la identidad de carga de trabajo de GKE para vincular la cuenta de servicio de VM predeterminada de Managed Service para Apache Spark (identidad del plano de datos) a las tres cuentas de servicio de GKE (KSA).
Para crear y usar una cuenta de servicio de Google (GSA) diferente para vincularla a las KSA, haz lo siguiente:
Crea la GSA (consulta Crea y administra cuentas de servicio).
Ejemplo de gcloud CLI:
Notas:gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Managed Service for Apache Spark on GKE workloads."- En el ejemplo, se establece el nombre de la ASA como "dataproc-${USER}", pero puedes usar un nombre diferente.
Establece las variables de entorno:
Notas:PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespaceDPGKE_GSA: Los ejemplos establecen y usanDPGKE_GSAcomo el nombre de la variable que contiene la dirección de correo electrónico de tu GSA. Puedes establecer y usar un nombre de variable diferente.DPGKE_NAMESPACE: El espacio de nombres predeterminado de GKE es el nombre de tu clúster de Managed Service para Apache Spark en GKE.
Cuando crees el clúster de Managed Service para Apache Spark en GKE, agrega las siguientes propiedades para que Managed Service para Apache Spark use tu GSA 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 permitir que actúe como agente:gcloud projects add-iam-policy-binding \ --role=roles/dataproc.worker \ --member="serviceAccount:${DPGKE_GSA}" \ "${PROJECT}" Asigna a la KSA
agentel roliam.workloadIdentityUserpara permitir que actúe 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}"Otorga a la KSA
spark-driverel roliam.workloadIdentityUserpara permitir que actúe como tu 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}"Otorga a la KSA
spark-executorel roliam.workloadIdentityUserpara permitir que actúe como tu 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}"
- Asigna a tu GSA el rol