Ruoli e identità IAM Dataproc su GKE

Id piano dati

Dataproc su GKE utilizza l'identità del carico di lavoro GKE per consentire ai pod all'interno del cluster Dataproc su GKE di agire con l'autorità del predefinito service account VM Dataproc (identità del piano dati). Workload Identity richiede le seguenti autorizzazioni per aggiornare i criteri IAM nel gruppo di sicurezza gestito utilizzato dal cluster virtuale Dataproc su GKE:

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

L'identità del carico di lavoro GKE collega i seguenti account di servizio GKE (KSA) all'account di servizio VM Dataproc:

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

Assegna i ruoli

Concedi le autorizzazioni all'account di servizio della VM Dataproc per consentire a spark-driver e spark-executor di accedere alle risorse del progetto, alle origini dati, alle destinazioni dati e a qualsiasi altro servizio richiesto dal tuo carico di lavoro.

Esempio:

Il comando seguente assegna ruoli account di servizio VM Dataproc predefinito per consentire ai carichi di lavoro Spark in esecuzione VM dei cluster Dataproc su GKE per accedere ai bucket Cloud Storage 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 Workload Identity di GKE per collegare l'account di servizio VM Dataproc (identità del piano dati) predefinito ai tre account di servizio GKE (KSA).

Per creare e utilizzare un altro account di servizio Google (GSA) da collegare ai KSA:

  1. Crea l'account GSA (consulta Creare e gestire gli account di servizio).

    Esempio di interfaccia a riga di comando gcloud:

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

    • L'esempio imposta il nome GSA su "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 della tua GSA. Puoi impostare e utilizzare un nome variabile diverso.
    • DPGKE_NAMESPACE: lo spazio dei nomi GKE predefinito è il nome del cluster Dataproc su GKE.
  3. Quando crei il cluster Dataproc su GKE, aggiungi le seguenti proprietà affinché Dataproc possa utilizzare la tua versione di Google Cloud anziché la sua configurazione predefinita:

    --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 al agent KSA il ruolo iam.workloadIdentityUser per consentirgli 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 al spark-driver KSA il ruolo iam.workloadIdentityUser per consentirgli di agire come 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 al spark-executor KSA il ruolo iam.workloadIdentityUser per consentirgli di agire come 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}"