Rôles IAM et identité de Dataproc sur GKE

Identité du plan de données

Dataproc sur GKE utilise l'identité de charge de travail GKE pour permettre aux pods du cluster Dataproc sur GKE d'agir avec l'autorité du compte de service de la VM Dataproc (identité de plan de données) par défaut. Workload Identity nécessite les autorisations suivantes pour mettre à jour les stratégies IAM sur le système Google Search Appliance utilisé par votre instance Dataproc sur GKE cluster virtuel:

  • compute.projects.get
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

GKE Workload Identity associe les éléments suivants Comptes de service GKE (KSA) vers le compte de service de la VM Dataproc:

  1. agent KSA (interagit avec le plan de contrôle Dataproc):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA (exécute les pilotes Spark) :
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. 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 de données, aux récepteurs de données et à tout autre service 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 autoriser les charges de travail Spark exécutées sur Dataproc sur les VM de cluster GKE à 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 Identité de charge de travail GKE pour associer l'instance par défaut Compte de service de VM Dataproc (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 :

  1. Créez le compte de service (voir la section Créer et gérer des comptes de service).

    Exemple de CLI gcloud :

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Dataproc on GKE workloads."
    
    Remarques:

    • Dans cet exemple, le nom du système Google Search Appliance est "dataproc-${USER}", mais vous pouvez utiliser un un autre nom.
  2. Définissez les variables d'environnement :

    PROJECT=project-id \
      DPGKE_GSA="dataproc-${USER}@${PROJECT}.iam.gserviceaccount.com"
      DPGKE_NAMESPACE=GKE namespace
    
    Remarques:

    • DPGKE_GSA: les exemples définis et utilisent DPGKE_GSA comme nom de la variable contient l'adresse e-mail de votre système Google Search Appliance. Vous pouvez définir et utiliser un autre nom de variable.
    • DPGKE_NAMESPACE : l'espace de noms GKE par défaut est le nom de votre cluster Dataproc sur GKE.
  3. Lorsque vous créez le cluster Dataproc sur GKE, ajoutez les propriétés suivantes pour que Dataproc utilise votre GSA au lieu de la GSA 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}" \

  4. Run the following commands to assign necessary Workload Identity permissions to the service accounts:

    1. 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}"
      
    2. Attribuez le rôle iam.workloadIdentityUser au KSA agent. l'utiliser comme votre système Google Search Appliance:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \
          "${DPGKE_GSA}"
      

    3. Attribuez le rôle iam.workloadIdentityUser au KSA spark-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}"
      

    4. Attribuez le rôle iam.workloadIdentityUser au KSA spark-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}"