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

Identità del piano dati

Managed Service for Apache Spark su GKE utilizza l'identità del carico di lavoro GKE 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 piano dati). L'identità del carico di lavoro richiede le seguenti autorizzazioni per aggiornare i criteri IAM sul GSA utilizzato dal cluster virtuale Managed Service for Apache Spark su GKE:

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

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

  1. agent KSA (interagisce con il piano di controllo Managed Service for Apache Spark):
    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 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 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 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 l'identità del carico di lavoro GKE per collegare il service account VM Managed Service for Apache Spark predefinito (identità del piano dati) ai tre service account GKE (KSA).

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

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

    Esempio della 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 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:

    • 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 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 Managed Service for Apache Spark in modo che utilizzi 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 di Workload Identity necessarie 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}"