Identidad del plano de datos
Dataproc en GKE usa Workload Identity de GKE para permitir que los pods dentro del clúster de Dataproc en GKE actúen con la autoridad de la cuenta de servicio predeterminada de VM de Dataproc (identidad del plano de datos). Workload Identity requiere los siguientes permisos para actualizar las políticas de IAM en el GSA que usa tu clúster virtual de Dataproc en GKE:
compute.projects.get
iam.serviceAccounts.getIamPolicy
iam.serviceAccounts.setIamPolicy
La identidad de la carga de trabajo de GKE vincula las siguientes cuentas de servicio de GKE (KSA) a la cuenta de servicio de VM de Dataproc:
agent
KSA (interactúa con el plano de control de Dataproc):
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
spark-driver
KSA (ejecuta controladores de Spark):serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
spark-executor
KSA (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 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 requiera 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 Dataproc en las VMs del clúster de 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
Dataproc en GKE usa Workload Identity de GKE para vincular la cuenta de servicio predeterminada de la VM de Dataproc (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 que vincule a las KSA, sigue estos pasos:
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 Dataproc on GKE workloads."
- En el ejemplo, se establece el nombre de GSA 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 namespace
DPGKE_GSA
: Los ejemplos establecen y usanDPGKE_GSA
como 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 de GKE predeterminado es el nombre de tu clúster de Dataproc en GKE.
Cuando crees el clúster de Dataproc en GKE, agrega las siguientes propiedades para que Dataproc use tu GSA en lugar de la GSA 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}" \
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}"
Asigna el rol
iam.workloadIdentityUser
a la KSA deagent
para 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 el rol
iam.workloadIdentityUser
a la KSA despark-driver
para 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 el rol
iam.workloadIdentityUser
a la KSA despark-executor
para 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}"
- Assign your GSA the