Akun layanan Managed Service for Apache Spark

Akun layanan di Managed Service untuk Apache Spark memungkinkan Anda mengautentikasi workload batch dan sesi interaktif untuk mengakses resource Google Cloud dengan aman. Workload dijalankan dengan kredensial pengguna akhir atau akun layanan. Jika kredensial akun layanan digunakan, akun layanan tertentu yang ditetapkan untuk menjalankan workload bergantung pada versi runtime batch atau sesi.

Akun layanan runtime pra-3.0

Versi runtime Spark sebelum 3.0 dengan kredensial akun layanan menggunakan akun layanan default Compute Engine atau akun layanan kustom yang ditentukan pengguna untuk mengirimkan workload batch atau membuat sesi interaktif.

Akun layanan runtime 3.0+

Spark runtime versi 3.0 dan yang lebih baru dengan kredensial akun layanan menggunakan akun layanan kustom yang ditentukan pengguna untuk mengirimkan workload batch atau membuat sesi interaktif.

Runtime Managed Service untuk Apache Spark 3.0 dan yang lebih baru membuat akun layanan Dataproc Resource Manager Node Service Agent, service-project-number@gcp-sa-dataprocrmnode.iam.gserviceaccount.com, dengan peran Dataproc Resource Manager Node Service Agent di project Google Cloud pengguna Managed Service untuk Apache Spark. Akun layanan ini melakukan operasi sistem berikut pada resource Managed Service untuk Apache Spark yang terletak di project tempat workload dibuat:

  • Cloud Logging dan Cloud Monitoring
  • Operasi dasar Node Resource Manager Managed Service untuk Apache Spark seperti get, heartbeat, dan mintOAuthToken

Melihat dan mengelola peran akun layanan IAM

Untuk melihat dan mengelola peran yang diberikan ke workload batch atau akun layanan sesi, lakukan hal berikut:

  1. Di konsol Google Cloud , buka halaman IAM.

    Buka Identity and Access Management (IAM)'

  2. Klik Include Google-provided role grants.

  3. Lihat peran yang tercantum untuk workload batch atau sesi default atau akun layanan kustom atau default.

    Gambar berikut menunjukkan peran Managed Service untuk Apache Spark Worker yang diperlukan yang tercantum untuk akun layanan default Compute Engine, project_number-compute@developer.gserviceaccount.com, yang digunakan Managed Service untuk Apache Spark secara default sebagai akun layanan workload atau sesi.

    Peran Dataproc Worker untuk akun layanan default Compute Engine di konsol IAM
    Peran worker Managed Service untuk Apache Spark yang ditetapkan ke akun layanan default Compute Engine di bagian IAM pada konsol Google Cloud .
  4. Anda dapat mengklik ikon pensil yang ditampilkan di baris akun layanan untuk memberikan atau menghapus peran akun layanan.

Cara menggunakan akun layanan lintas-project

Anda dapat mengirimkan workload batch yang menggunakan akun layanan dari project yang berbeda dengan project workload batch (project tempat batch dikirimkan). Di bagian ini, project tempat akun layanan berada disebut service account project, dan project tempat batch dikirim disebut batch project.

Mengapa menggunakan akun layanan lintas project untuk menjalankan workload batch? Salah satu alasan yang mungkin adalah jika akun layanan di project lain telah diberi peran peran IAM yang memberikan akses terperinci ke resource dalam project tersebut.

Langkah penyiapan

Contoh di bagian ini berlaku untuk mengirimkan workload batch yang dijalankan dengan versi runtime sebelum 3.0.

  1. Dalam project akun layanan:

    1. Mengaktifkan akun layanan untuk dilampirkan di seluruh project.

    2. Aktifkan Managed Service untuk Apache Spark API, jika belum diaktifkan.

      Peran yang diperlukan untuk mengaktifkan API

      Untuk mengaktifkan API, Anda memerlukan izin serviceusage.services.enable. Jika Anda membuat project, kemungkinan Anda sudah memiliki izin ini melalui peran Pemilik (roles/owner). Jika tidak, Anda bisa mendapatkan izin ini melalui peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin). Pelajari cara memberikan peran.

      Mengaktifkan API

    3. Berikan peran Service Account User ke akun email Anda (pengguna yang membuat cluster) di project akun layanan atau, untuk kontrol yang lebih terperinci, akun layanan di project akun layanan.

      Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi untuk memberikan peran di level project dan Mengelola akses ke akun layanan untuk memberikan peran di level akun layanan.

      Contoh gcloud CLI:

      Contoh perintah berikut memberikan peran Pengguna Akun Layanan kepada pengguna di level project:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      Catatan:

      • USER_EMAIL: Berikan alamat email akun pengguna Anda, dalam format: user:user-name@example.com.

      Contoh perintah berikut memberikan peran Service Account User kepada pengguna di level akun layanan:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=USER_EMAIL \
          --role="roles/iam.serviceAccountUser"
      

      Catatan:

      • USER_EMAIL: Berikan alamat email akun pengguna Anda, dalam format: user:user-name@example.com.
    4. Berikan peran Managed Service untuk Apache Spark Worker kepada akun layanan di project batch.

      Contoh gcloud CLI:

      gcloud projects add-iam-policy-binding BATCH_PROJECT_ID \
          --member=serviceAccount:SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
          --role="roles/dataproc.worker"
      
  2. Dalam project batch:

    1. Berikan peran Pengguna Akun Layanan dan Pembuat Token Akun Layanan kepada akun layanan agen layanan Managed Service untuk Apache Spark pada project akun layanan atau, untuk kontrol yang lebih terperinci, akun layanan dalam project akun layanan. Dengan melakukan ini, Anda mengizinkan akun layanan agen layanan Managed Service untuk Apache Spark di project batch untuk membuat token bagi akun layanan di project akun layanan.

      Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi untuk memberikan peran di level project dan Mengelola akses ke akun layanan untuk memberikan peran di level akun layanan.

      Contoh gcloud CLI:

      Perintah berikut memberikan peran Service Account User dan Service Account Token Creator di level project kepada akun layanan agen layanan Managed Service for Apache Spark di project batch:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Contoh perintah berikut memberikan peran Service Account User dan Service Account Token Creator kepada akun layanan Managed Service for Apache Spark Service Agent di project batch pada level akun layanan:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser"
      
      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      
    2. Berikan akun layanan Agen Layanan Compute Engine dalam project batch peran Service Account Token Creator pada project akun layanan atau, untuk kontrol yang lebih terperinci, akun layanan dalam project akun layanan. Dengan melakukan ini, Anda memberi akun layanan Agen Layanan Compute Engine di project batch kemampuan untuk membuat token untuk akun layanan di project akun layanan.

      Untuk mengetahui informasi selengkapnya, lihat Mengelola akses ke project, folder, dan organisasi untuk memberikan peran di level project dan Mengelola akses ke akun layanan untuk memberikan peran di level akun layanan.

      Contoh gcloud CLI:

      Contoh perintah berikut memberikan peran Service Account Token Creator di level project kepada akun layanan Agen Layanan Compute Engine dalam project batch:

      gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

      Contoh perintah berikut memberikan peran Service Account Token Creator di tingkat akun layanan kepada akun layanan Agen Layanan Compute Engine dalam project cluster:

      gcloud iam service-accounts add-iam-policy-binding VM_SERVICE_ACCOUNT_EMAIL \
          --member=serviceAccount:service-BATCH_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
          --role="roles/iam.serviceAccountTokenCreator"
      

Mengirim workload batch

Setelah menyelesaikan langkah-langkah penyiapan, Anda dapat mengirimkan workload batch. Pastikan untuk menentukan akun layanan di project akun layanan sebagai akun layanan yang akan digunakan untuk workload batch.

Memecahkan masalah kegagalan berbasis izin

Izin yang salah atau tidak memadai untuk akun layanan yang digunakan oleh workload atau sesi batch Anda dapat menyebabkan kegagalan pembuatan batch atau sesi yang melaporkan pesan error "Driver compute node failed to initialize for batch in 600 seconds". Error ini menunjukkan bahwa driver Spark tidak dapat dimulai dalam periode waktu tunggu yang ditentukan, sering kali karena kurangnya akses yang diperlukan ke resource Google Cloud .

Untuk memecahkan masalah ini, pastikan akun layanan Anda memiliki peran atau izin minimum berikut:

  • Peran Managed Service for Apache Spark Worker (roles/dataproc.worker): Peran ini memberikan izin yang diperlukan bagi Managed Service untuk Apache Spark guna mengelola dan menjalankan workload dan sesi Spark.
  • Storage Object Viewer (roles/storage.objectViewer), Storage Object Creator (roles/storage.objectCreator), atau Storage Object Admin (roles/storage.admin): Jika aplikasi Spark Anda membaca dari atau menulis ke bucket Cloud Storage, akun layanan memerlukan izin yang sesuai untuk mengakses bucket. Misalnya, jika data input Anda berada di bucket Cloud Storage, Storage Object Viewer diperlukan. Jika aplikasi Anda menulis output ke bucket Cloud Storage, Storage Object Creator atau Storage Object Admin diperlukan.
  • BigQuery Data Editor (roles/bigquery.dataEditor) atau BigQuery Data Viewer (roles/bigquery.dataViewer): Jika aplikasi Spark Anda berinteraksi dengan BigQuery, pastikan akun layanan memiliki peran BigQuery yang sesuai.
  • Izin Cloud Logging: Akun layanan memerlukan izin untuk menulis log ke Logging agar proses debug berjalan efektif. Biasanya, peran Logging Writer (roles/logging.logWriter) sudah cukup.
  • Tidak ada peran dataproc.worker: Tanpa peran inti ini, infrastruktur Managed Service untuk Apache Spark tidak dapat menyediakan dan mengelola node driver dengan benar.

  • Izin Cloud Storage tidak memadai: Jika aplikasi Spark Anda mencoba membaca data input dari atau menulis output ke bucket Cloud Storage tanpa izin akun layanan yang diperlukan, driver dapat gagal melakukan inisialisasi karena tidak memiliki akses ke resource penting.

  • Masalah jaringan atau firewall: Aturan firewall atau Kontrol Layanan VPC dapat secara tidak sengaja memblokir akses akun layanan ke API atau resource Google Cloud .

Untuk memverifikasi dan memperbarui izin akun layanan:

  1. Buka halaman IAM & Admin > IAM di konsol Google Cloud .
  2. Temukan akun layanan yang digunakan untuk workload atau sesi batch Anda.
  3. Pastikan peran yang diperlukan telah ditetapkan. Jika belum, tambahkan.

Untuk mengetahui daftar peran dan izin Managed Service untuk Apache Spark, lihat Izin dan peran IAM Managed Service untuk Apache Spark.