Identité du plan de données
Dataproc sur GKE utilise GKE Workload Identity pour permettre aux pods du cluster Dataproc sur GKE d'agir avec l'autorité du compte de service de VM Dataproc par défaut (identité du plan de données). Workload Identity nécessite les autorisations suivantes pour mettre à jour les stratégies IAM sur le CSA utilisé par votre cluster virtuel Dataproc sur GKE :
compute.projects.get
iam.serviceAccounts.getIamPolicy
iam.serviceAccounts.setIamPolicy
GKE Workload Identity associe les comptes de service GKE (KSA) suivants au compte de service de VM Dataproc :
agent
KSA (interagit avec le plan de contrôle Dataproc) :
serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
spark-driver
KSA (exécute les pilotes Spark) :serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
spark-executor
KSA (exécute les exécuteurs Spark) :serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]
Attribuer des rôles
Accordez des autorisations au compte de service de VM Dataproc pour permettre à spark-driver
et spark-executor
d'accéder aux ressources du projet, aux sources et récepteurs de données, ainsi qu'à tous les autres services requis par votre charge de travail.
Exemple :
La commande suivante attribue des rôles au compte de service de VM Dataproc par défaut pour permettre aux charges de travail Spark exécutées sur les VM de cluster Dataproc sur GKE d'accéder aux buckets Cloud Storage et aux ensembles de données BigQuery du projet.
gcloud projects add-iam-policy-binding \ --role=roles/storage.objectAdmin \ --role=roles/bigquery.dataEditor \ --member="project-number-compute@developer.gserviceaccount.com" \ "${PROJECT}"
Configuration IAM personnalisée
Dataproc sur GKE utilise GKE Workload Identity pour associer le compte de service de VM Dataproc par défaut (identité du plan de données) aux trois comptes de service GKE (KSA).
Pour créer et utiliser un autre compte de service Google (GSA) à associer aux KSA :
Créez le compte de service Google (consultez Créer et gérer des comptes de service).
Exemple de gcloud CLI :
Remarques :gcloud iam service-accounts create "dataproc-${USER}" \ --description "Used by Dataproc on GKE workloads."
- L'exemple définit le nom du compte de service en tant que "dataproc-${USER}", mais vous pouvez utiliser un autre nom.
Définissez les variables d'environnement :
Remarques :PROJECT=project-id \ DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com" DPGKE_NAMESPACE=GKE namespace
DPGKE_GSA
: les exemples définissent et utilisentDPGKE_GSA
comme nom de la variable contenant l'adresse e-mail de votre GSA. Vous pouvez définir et utiliser un autre nom de variable.DPGKE_NAMESPACE
: l'espace de noms GKE par défaut correspond au nom de votre cluster Dataproc sur GKE.
Lorsque vous créez le cluster Dataproc sur GKE, ajoutez les propriétés suivantes pour que Dataproc utilise votre CSA au lieu du CSA par défaut :
--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}"
Attribuez le rôle
iam.workloadIdentityUser
au KSAagent
pour lui permettre d'agir en tant que GSA :gcloud iam service-accounts add-iam-policy-binding \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \ "${DPGKE_GSA}"
Attribuez le rôle
iam.workloadIdentityUser
au KSAspark-driver
pour lui permettre d'agir en tant que 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}"
Attribuez le rôle
iam.workloadIdentityUser
au KSAspark-executor
pour lui permettre d'agir en tant que 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