Rôles et identités Identity and Access Management pour 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 VM Dataproc par défaut (identité du plan de données). L'identité de charge de travail nécessite les autorisations suivantes pour mettre à jour les stratégies IAM sur le GSA utilisé par votre cluster virtuel Dataproc sur GKE :

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

L'identité de charge de travail GKE associe les comptes de service GKE (KSA) suivants au compte de service de VM Dataproc :

  1. agent KSA (interagit avec le plan de contrôle Dataproc) :
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. KSA spark-driver (exécute les pilotes Spark) :
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. KSA spark-executor (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 aux spark-driver et spark-executor d'accéder aux ressources de projet, aux sources de données, aux récepteurs de données et à 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 des 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 l'identité de charge de travail GKE pour lier 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) à lier à les KSA :

  1. Créez le GSA (consultez Créer et gérer des comptes de service).

    Exemple gcloud CLI :

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

    • L'exemple définit le nom du GSA sur "dataproc-${USER}", mais vous pouvez utiliser 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 :

  3. Lorsque vous créez le cluster Dataproc sur GKE, ajoutez les propriétés suivantes pour que Dataproc utilise votre GSA au lieu du 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. Exécutez les commandes suivantes pour attribuer les autorisations Workload Identity nécessaires aux comptes de service :

    1. Attribuez le rôle dataproc.worker à votre GSA pour lui permettre d'agir en tant qu'agent :
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. Attribuez le KSA agent le rôle iam.workloadIdentityUser 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}"
      

    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}"