Rôles et identités Identity and Access Management de Google Kubernetes Engine

Identité du plan de données

Managed Service pour Apache Spark sur GKE utilise GKE Workload Identity pour permettre aux pods du cluster Managed Service pour Apache Spark sur GKE d'agir avec l'autorité du compte de service de VM Managed Service pour Apache Spark 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 compte de service Google (GSA) utilisé par votre cluster virtuel Managed Service pour Apache Spark 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 la VM Managed Service pour Apache Spark :

  1. agent KSA (interagit avec le plan de contrôle Managed Service pour Apache Spark) :
    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 Managed Service pour Apache Spark 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 Managed Service pour Apache Spark par défaut pour permettre aux charges de travail Spark exécutées sur les VM de cluster Managed Service pour Apache Spark 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

Managed Service pour Apache Spark sur GKE utilise GKE Workload Identity pour associer le compte de service de VM Managed Service pour Apache Spark 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 :

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

    Exemple de gcloud CLI :

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Managed Service for Apache Spark on GKE workloads."
    
    Remarques :

    • L'exemple définit le nom du compte de service Google comme "dataproc-${USER}", mais vous pouvez utiliser un autre nom.
  2. Définissez des variables d'environnement :

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

    • DPGKE_GSA : les exemples définissent et utilisent DPGKE_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 Managed Service for Apache Spark sur GKE.
  3. Lorsque vous créez le cluster Managed Service pour Apache Spark sur GKE, ajoutez les propriétés suivantes pour que Managed Service pour Apache Spark utilise votre CSA au lieu du CSA par défaut :

    --properties "dataproc:dataproc.gke.agent.google-service-account=${DPGKE_GSA}" \
    --properties "dataproc:dataproc.gke.nodepool.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 rôle iam.workloadIdentityUser au KSA agent 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}"