Ruoli e identità IAM di Dataproc su GKE

Identità del piano dati

Dataproc su GKE utilizza GKE Workload Identity per consentire ai pod all'interno del cluster Dataproc su GKE di agire con l'autorità del service account VM Dataproc predefinito (identità del data plane). Workload Identity richiede le seguenti autorizzazioni per aggiornare i criteri IAM sul service account Google utilizzato dal tuo cluster virtuale Dataproc su GKE:

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

GKE Workload Identity collega i seguenti account di servizio GKE (KSA) all'account di servizio VM Dataproc:

  1. agent KSA (interagisce con il piano di controllo Dataproc):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver Arabia Saudita (esegue i driver Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor Arabia Saudita (esegue gli esecutori di Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

Assegna i ruoli

Concedi le autorizzazioni al service account VM Dataproc per consentire a spark-driver e spark-executor di accedere alle risorse di progetto, alle origini dati, ai sink di dati e a qualsiasi altro servizio richiesto dal tuo workload.

Esempio:

Il seguente comando assegna ruoli all'account di servizio VM Dataproc predefinito per consentire ai carichi di lavoro Spark in esecuzione sulle VM del cluster Dataproc su GKE di accedere ai bucket Cloud Storage e ai set di dati BigQuery nel progetto.

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

Configurazione IAM personalizzata

Dataproc su GKE utilizza GKE Workload Identity per collegare l'account di servizio VM Dataproc (identità del data plane) predefinito ai tre service account GKE (KSA).

Per creare e utilizzare un altro account di servizio Google (GSA) per il collegamento ai KSA:

  1. Crea il service account (vedi Creazione e gestione degli account di servizio).

    Esempio dell'interfaccia a riga della gcloud CLI:

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

    • L'esempio imposta il nome del service account come "dataproc-${USER}", ma puoi utilizzare un nome diverso.
  2. Imposta le variabili di ambiente:

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

    • DPGKE_GSA: gli esempi impostano e utilizzano DPGKE_GSA come nome della variabile che contiene l'indirizzo email del tuo GSA. Puoi impostare e utilizzare un nome di variabile diverso.
    • DPGKE_NAMESPACE: lo spazio dei nomi GKE predefinito è il nome del tuo cluster Dataproc su GKE.
  3. Quando crei il cluster Dataproc su GKE, aggiungi le seguenti proprietà per consentire a Dataproc di utilizzare il tuo account di servizio Google anziché quello predefinito:

    --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. Assegna all'agent KSA il ruolo iam.workloadIdentityUser per consentirle di agire come 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. Concedi all'spark-driver il ruolo iam.workloadIdentityUser per consentirgli di agire come tuo 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. Concedi all'spark-executor il ruolo iam.workloadIdentityUser per consentirgli di agire come tuo 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}"