Dataproc tentang Peran dan Identitas IAM GKE

Identitas bidang data

Dataproc di GKE menggunakan identitas workload GKE untuk memungkinkan pod dalam cluster Dataproc di GKE agar dapat bertindak dengan otoritas akun layanan VM Dataproc (identitas bidang data) default. Workload identity memerlukan izin berikut guna memperbarui kebijakan IAM pada GSA yang digunakan oleh Dataproc Anda di cluster virtual GKE:

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

Identitas workload GKE menautkan Akun Layanan GKE (KSA) berikut ke Akun Layanan VM Dataproc:

  1. agent KSA (berinteraksi dengan bidang kontrol Dataproc):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]
  2. spark-driver KSA (menjalankan driver Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-driver]
  3. spark-executor KSA (menjalankan eksekutor Spark):
    serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]

Tetapkan peran

Berikan izin ke akun layanan VM Dataproc untuk mengizinkan spark-driver dan spark-executor mengakses resource project, sumber data, sink data, dan layanan lain apa pun yang diperlukan oleh workload Anda.

Contoh:

Perintah berikut menetapkan peran ke akun layanan VM Dataproc default agar beban kerja Spark yang berjalan di Dataproc pada VM cluster GKE dapat mengakses bucket Cloud Storage dan set data BigQuery dalam project.

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

Konfigurasi IAM kustom

Dataproc di GKE menggunakan identitas workload GKE untuk menautkan akun layanan VM Dataproc (identitas bidang data) default ke tiga akun layanan GKE (KSAs).

Untuk membuat dan menggunakan akun layanan Google (GSA) yang berbeda untuk menautkan KSA:

  1. Buat GSA (lihat Membuat dan mengelola akun layanan).

    contoh gcloud CLI:

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

    • Contoh ini menetapkan nama GSA sebagai "dataproc-${USER}", tetapi Anda dapat menggunakan nama yang berbeda.
  2. Menetapkan variabel lingkungan:

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

    • DPGKE_GSA: Contoh menetapkan dan menggunakan DPGKE_GSA sebagai nama variabel yang berisi alamat email GSA Anda. Anda dapat menetapkan dan menggunakan nama variabel yang berbeda.
    • DPGKE_NAMESPACE: Namespace GKE default adalah nama Dataproc Anda di cluster GKE.
  3. Saat Anda membuat Dataproc pada cluster GKE, tambahkan properti berikut untuk Dataproc agar dapat menggunakan GSA, bukan GSA default:

    --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. Jalankan perintah berikut untuk menetapkan izin Workload Identity yang diperlukan ke akun layanan:

    1. Tetapkan peran dataproc.worker GSA Anda untuk memungkinkannya bertindak sebagai agen:
      gcloud projects add-iam-policy-binding \
          --role=roles/dataproc.worker \
          --member="serviceAccount:${DPGKE_GSA}" \
          "${PROJECT}"
      
    2. Tetapkan peran iam.workloadIdentityUser agent KSA untuk memungkinkannya bertindak sebagai GSA Anda:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/agent]" \
          "${DPGKE_GSA}"
      

    3. Beri spark-driver KSA peran iam.workloadIdentityUser untuk memungkinkannya bertindak sebagai GSA Anda:

      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. Beri spark-executor KSA peran iam.workloadIdentityUser untuk memungkinkannya bertindak sebagai GSA Anda:

      gcloud iam service-accounts add-iam-policy-binding \
          --role=roles/iam.workloadIdentityUser \
          --member="serviceAccount:${PROJECT}.svc.id.goog[${DPGKE_NAMESPACE}/spark-executor]" \
          "${DPGKE_GSA}"