Ruoli e identità di Identity and Access Management di Google Kubernetes Engine

Identità del piano dati

Managed Service for Apache Spark su GKE utilizza GKE Workload Identity per consentire ai pod all'interno del cluster Managed Service for Apache Spark su GKE di agire con l'autorità del service account VM Managed Service for Apache Spark 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 Managed Service for Apache Spark su GKE:

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

L'identità del workload GKE collega i seguenti service account GKE (KSA) al service account VM Managed Service for Apache Spark:

  1. agent KSA (interagisce con il control plane di Managed Service for Apache Spark):
    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 Managed Service for Apache Spark 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 i ruoli al service account VM Managed Service for Apache Spark predefinito per consentire ai carichi di lavoro Spark in esecuzione sulle VM del cluster Managed Service for Apache Spark 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

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

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

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

    Esempio di gcloud CLI:

    gcloud iam service-accounts create "dataproc-${USER}" \
        --description "Used by Managed Service for Apache Spark 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 variabile diverso.
    • DPGKE_NAMESPACE: lo spazio dei nomi GKE predefinito è il nome del cluster Managed Service for Apache Spark su GKE.
  3. Quando crei il cluster Managed Service for Apache Spark su GKE, aggiungi le seguenti proprietà per consentire a Managed Service for Apache Spark di utilizzare il tuo service account Google anziché quello predefinito:

    --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. Esegui questi comandi per assegnare le autorizzazioni Workload Identity necessarie ai service account:

    1. Assegna al tuo GSA il ruolo dataproc.worker per consentirgli di agire come agente:
      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 tuo 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 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 all'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}"