Peran dan Identitas IAM Dataproc di GKE

Identitas bidang data

Dataproc di GKE menggunakan Workload Identity GKE untuk mengizinkan pod dalam cluster Dataproc di GKE bertindak dengan otoritas akun layanan VM Dataproc (identitas data plane) default. Workload Identity memerlukan izin berikut untuk memperbarui kebijakan IAM di GSA yang digunakan oleh Dataproc Anda di cluster virtual GKE:

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

Workload identity 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 agar spark-driver dan spark-executor dapat mengakses resource project, sumber data, sink data, dan layanan lainnya yang diperlukan oleh beban kerja Anda.

Contoh:

Perintah berikut menetapkan peran ke akun layanan VM Dataproc default untuk mengizinkan beban kerja Spark yang berjalan di Dataproc pada VM cluster GKE untuk 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@" \
    "${PROJECT}"

Konfigurasi IAM kustom

Dataproc di GKE menggunakan Workload Identity GKE untuk menautkan akun layanan VM Dataproc (identitas data plane) default ke tiga akun layanan GKE (KSA).

Untuk membuat dan menggunakan akun layanan Google (GSA) yang berbeda untuk ditautkan ke 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. Tetapkan variabel lingkungan:

    PROJECT=project-id \
      DPGKE_GSA="dataproc-${USER}@${PROJECT}."
      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 cluster Dataproc di GKE Anda.
  3. Saat Anda membuat cluster Dataproc di GKE, tambahkan properti berikut agar Dataproc menggunakan GSA Anda, 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. 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. Tetapkan peran iam.workloadIdentityUser ke KSA agent agar dapat 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. Berikan peran iam.workloadIdentityUser ke KSA spark-driver agar dapat 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. Berikan peran iam.workloadIdentityUser ke KSA spark-executor agar dapat 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}"