IAM-Rollen und -Identität von Dataproc in GKE

Identität der Datenebene

Dataproc in GKE verwendet die GKE-Arbeitslast-Identität, damit Pods innerhalb des Dataproc in GKE-Clusters mit der Autorisierung des standardmäßigen Dataproc-VM-Dienstkontos (Identität der Datenebene) agieren können. Workload Identity erfordert die folgenden Berechtigungen Zum Aktualisieren von IAM-Richtlinien in der GSA, die von Dataproc in GKE verwendet wird virtueller Cluster:

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

GKE Workload Identity verknüpft folgende Verknüpfungen GKE-Dienstkonten (KSAs) zum Dataproc-VM-Dienstkonto hinzufügen:

  1. agent KSA (interagieren mit der Dataproc-Steuerungsebene):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver Saudi-Arabien (mit Spark-Treibern):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA (führt Spark-Executors aus):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

Rollen zuweisen

Berechtigungen für die Dataproc-VM-Dienstkonto um spark-driver und spark-executor Zugriff auf Projektressourcen zu gewähren, Datenquellen, Datensenken und anderen Diensten, die für die Arbeitslast erforderlich sind.

Beispiel:

Mit dem folgenden Befehl werden dem Standarddienstkonto für Dataproc-VM damit Spark-Arbeitslasten auf Dataproc auf GKE-Cluster-VMs für den Zugriff auf Cloud Storage-Buckets und BigQuery-Datasets im Projekt

gcloud projects add-iam-policy-binding \
    --role=roles/storage.objectAdmin \
    --role=roles/bigquery.dataEditor \
    --member="project-number-compute@developer.gserviceaccount.com" \
    "${PROJECT}"

Benutzerdefinierte IAM-Konfiguration

Dataproc in GKE nutzt GKE-Workload Identity zum Verknüpfen der Standard- Dataproc-VM-Dienstkonto (Identität der Datenebene) auf die drei GKE-Dienstkonten.

So erstellen und verwenden Sie ein anderes Google-Dienstkonto (GSA), das mit den KSAs verknüpft werden soll:

  1. Erstellen Sie das GSA (siehe Dienstkonten erstellen und verwalten).

    Beispiel für die gcloud CLI:

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

    • Im Beispiel wird der GSA-Name als „Dataproc-${USER}“ festgelegt, Sie können aber einen mit einem anderen Namen.
  2. Legen Sie Umgebungsvariablen fest:

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

    • DPGKE_GSA: In den Beispielen wird DPGKE_GSA als Name der Variablen festgelegt und verwendet, die die E-Mail-Adresse Ihres GSA enthält. Sie können einen anderen Variablennamen festlegen und verwenden.
    • DPGKE_NAMESPACE: Der Standardwert GKE-Namespace ist der Name Ihres Dataproc on GKE-Clusters.
  3. Fügen Sie beim Erstellen des Dataproc-Clusters in GKE die folgenden Eigenschaften hinzu, damit Dataproc Ihre GSA anstelle der Standard-GSA verwendet:

    --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. Weisen Sie dem agent KSA die Rolle iam.workloadIdentityUser zu, damit es als GSA fungieren kann:

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

    3. Weisen Sie dem spark-driver KSA die Rolle iam.workloadIdentityUser zu, damit es als GSA fungieren kann:

      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. Weisen Sie dem spark-executor KSA die Rolle iam.workloadIdentityUser zu, damit es als GSA fungieren kann:

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