Ruoli e identità di Identity and Access Management per Dataproc su GKE

Identità del piano dati

Dataproc su GKE utilizza l'identità dei carichi di lavoro GKE per consentire ai pod all'interno del cluster Dataproc su GKE di agire con l'autorità del service account VM Dataproc predefinito (identità del piano dati). L'identità dei carichi di lavoro richiede le seguenti autorizzazioni per aggiornare i criteri IAM sul GSA utilizzato dal cluster virtuale Dataproc su GKE:

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

L'identità dei carichi di lavoro GKE collega i seguenti service account GKE (KSA) al service account VM Dataproc:

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

Assegna ruoli

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

Esempio:

Il seguente comando assegna i ruoli al service account 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 l'identità dei carichi di lavoro GKE per collegare il service account VM Dataproc predefinito (identità del piano dati) ai tre service account GKE (KSA).

Per creare e utilizzare un altro service account Google (GSA) da collegare a i KSA:

  1. Crea il GSA (vedi Creazione e gestione dei service account).

    Esempio dell'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 del GSA 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:

  3. Quando crei il cluster Dataproc su GKE, aggiungi le seguenti proprietà per consentire a Dataproc di utilizzare il tuo GSA 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. Esegui i seguenti comandi per assegnare le autorizzazioni dell'identità dei carichi di lavoro necessarie Workload Identity ai service account:

    1. Assegna al tuo GSA il ruolo dataproc.worker per consentirgli di fungere da agente:
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. Assegna al KSA agent il ruolo iam.workloadIdentityUser per consentirgli di fungere da 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. Assegna al KSA spark-driver il ruolo iam.workloadIdentityUser per consentirgli di fungere da 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. Assegna al KSA spark-executor il ruolo iam.workloadIdentityUser per consentirgli di fungere da 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}"