Membuat cluster multi-tenant menggunakan akun layanan

Multi-tenancy aman berbasis akun layanan Managed Service untuk Apache Spark memungkinkan Anda berbagi cluster dengan beberapa pengguna, dengan sekumpulan akun pengguna yang dipetakan ke akun layanan saat cluster dibuat. Pengguna dapat mengirimkan beban kerja interaktif, seperti notebook Jupyter, ke kernel yang berjalan di cluster multi-tenant dengan lingkungan pengguna yang terisolasi.

Saat pengguna mengirimkan tugas ke cluster multi-tenant:

  • Tugas berjalan sebagai pengguna OS tertentu dengan akun utama Kerberos tertentu.

  • Tugas mengakses Google Cloud resource menggunakan akun layanan yang dipetakan.

Dokumen ini menunjukkan cara membuat cluster multi-tenant Managed Service untuk Apache Spark, lalu meluncurkan dan menghubungkan notebook Jupyter ke Kernel PySpark yang berjalan di cluster.

Pertimbangan dan batasan

Saat Anda membuat cluster multi-tenant:

  • Cluster hanya tersedia untuk pengguna Akun Google dengan akun layanan yang dipetakan. Grup Google tidak dapat dipetakan. Pengguna yang tidak dipetakan tidak dapat menjalankan tugas di cluster.

  • Kerberos diaktifkan dan dikonfigurasi di cluster untuk komunikasi intra-cluster yang aman. Autentikasi pengguna akhir melalui Kerberos tidak didukung.

  • Akses SSH langsung ke cluster dan fitur Compute Engine, seperti kemampuan untuk menjalankan skrip startup di VM cluster, diblokir. Selain itu, tugas tidak dapat dijalankan dengan hak istimewa sudo.

  • Alur Kerja Managed Service untuk Apache Spark tidak didukung.

Membuat cluster multi-tenant

Anda mengaktifkan fitur multi-tenant saat Anda membuat cluster Managed Service untuk Apache Spark.

Konsol

Buat cluster menggunakan konsol Google Cloud , sebagai berikut:

  1. Di Google Cloud konsol, buka halaman Create cluster.
  2. Klik Additional configuration untuk meluaskan bagian tersebut.
  3. Edit Optional components.
    1. Centang kotak Enable components in the UI untuk mengaktifkan UI komponen, lalu centang kotak untuk Jupyter Kernel Gateway.
    2. Klik Save.
  4. Edit Customization &Other.
    1. Untuk mengizinkan penambahan atau penghapusan pengguna multi-tenant tanpa membuat ulang cluster (lihat Memperbarui pengguna cluster multi-tenant), di bagian Cluster properties, klik + Add properties.
    2. Tambahkan properti berikut: Awalan: dataproc, Kunci: dataproc.dynamic.multi.tenancy.enabled, Nilai: true

      Rekomendasi: Karena YARN menggunakan resource cluster yang signifikan untuk setiap kernel notebook yang berjalan di cluster multi-tenant, tambahkan properti Spark dan YARN untuk meningkatkan alokasi resource.

      Contoh:

      Awalan Kunci Nilai
      spark spark.driver.memory 5g
      spark spark.executor.memory 5g
      spark spark.executor.cores 2
      capacity-scheduler yarn.scheduler.capacity.maximum-am-resource-percent 0,5
    3. Klik Save.
  5. Edit Security.
    • Di bagian Project access, centang kotak untuk Enables the cloud-platform scope for this cluster.
    • Di bagian Secure Multi Tenancy, pilih Enable.
    • Di bagian Multi-tenancy Mapping, klik Add Multi-tenancy Mapping untuk memetakan akun pengguna ke akun layanan.
  6. Klik Save.
  7. Konfirmasi setelan lainnya, lalu klik Create cluster.

gcloud

Gunakan gcloud dataproc clusters create command dengan --secure-multi-tenancy-user-mapping flag untuk menentukan daftar pemetaan akun pengguna ke akun layanan.

gcloud dataproc clusters create CLUSTER_NAME \
    --region=REGION \
    --secure-multi-tenancy-user-mapping=USER_MAPPINGS: \
    --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true" \
    --service-account=CLUSTER_SERVICE_ACCOUNT@iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/iam \
    --optional-components=JUPYTER_KERNEL_GATEWAY \
    --enable-component-gateway \
    other args ...

Catatan:

  • USER_MAPPINGS: Tentukan daftar yang dipisahkan koma yang memetakan akun pengguna ke akun layanan.

    --secure-multi-tenancy-user-mapping=UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com,UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com,UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    
    Menggunakan file pemetaan YAML: Daripada menggunakan --secure-multi-tenancy-user-mapping flag untuk menentukan pemetaan akun pengguna ke akun layanan, Anda dapat menggunakan --identity-config-file flag untuk menentukan file YAML lokal atau Cloud Storage yang berisi pemetaan.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Setiap baris dalam file pemetaan memetakan akun pengguna ke akun layanan. Baris pertama berisi header user_service_account_mapping:.
    user_service_account_mapping:
    UserA@my-company.com:SERVICE_ACCOUNT_FOR_USERA@iam.gserviceaccount.com
    UserB@my-company.com:SERVICE_ACCOUNT_FOR_USERB@iam.gserviceaccount.com
    UserC@my-company.com:SERVICE_ACCOUNT_FOR_USERC@iam.gserviceaccount.com
    

  • --properties "dataproc:dataproc.dynamic.multi.tenancy.enabled=true": Properti ini memungkinkan penambahan atau penghapusan pengguna cluster multi-tenant tanpa membuat ulang cluster (lihat Memperbarui pengguna cluster multi-tenant).

    Rekomendasi: Karena YARN menggunakan resource cluster yang signifikan untuk setiap kernel notebook yang berjalan di cluster multi-tenant, tambahkan properti Spark dan YARN untuk meningkatkan alokasi resource.

    Contoh:

    --properties=" \
    spark:spark.driver.memory=5g,\
    spark:spark.executor.memory=5g,\
    spark:spark.executor.cores=200, \
    capacity-scheduler:yarn.scheduler.capacity.maximum-am-resource-percent=0.5"
    
  • CLUSTER_SERVICE_ACCOUNT (Opsional): Anda dapat menggunakan --service-account flag untuk menentukan akun layanan VM kustom untuk cluster. Jika Anda menghapus flag ini, akun layanan VM cluster default, PROJECT_NUMBER-compute@developer.gserviceaccount.com, akan digunakan.

    Rekomendasi: Gunakan akun layanan cluster yang berbeda untuk cluster yang berbeda agar setiap akun layanan VM cluster hanya dapat meniru identitas grup terbatas akun layanan pengguna yang dipetakan.

  • --scopes=https://www.googleapis.com/auth/iam diperlukan agar akun layanan cluster dapat melakukan peniruan identitas.

  • --enable-component-gateway dan --optional-components=JUPYTER_KERNEL_GATEWAY: Mengaktifkan Managed Service untuk Apache Spark Component Gateway dan Jupyter Kernel Gateway memungkinkan beberapa pengguna menghubungkan notebook Jupyter mereka ke cluster multi-tenant.

API

Gunakan SecurityConfig.IdentityConfig.userServiceAccountMapping field untuk menentukan daftar pemetaan akun pengguna ke akun layanan.

Memberikan izin Identity and Access Management

Untuk menghubungkan notebook pengguna ke kernel notebook yang berjalan di cluster multi-tenant, pengguna yang dipetakan, akun layanan yang dipetakan, dan akun layanan VM cluster harus memiliki izin IAM yang diperlukan untuk mengakses resource.

Izin pengguna yang dipetakan

Setiap pengguna yang dipetakan harus memiliki izin dataproc.clusters.get dan dataproc.clusters.use, yang diperlukan agar pengguna dapat mengakses dan terhubung ke kernel notebook yang berjalan di cluster multi-tenant. Anda dapat memberikan peran Managed Service untuk Apache Spark Editor (roles/dataproc.editor), yang berisi izin ini (lihat Memberikan satu peran IAM), atau membuat peran kustom dengan izin ini.

Izin akun layanan yang dipetakan

Setiap akun layanan yang dipetakan harus memiliki izin yang diperlukan oleh aplikasi notebook pengguna yang dipetakan, seperti akses ke bucket Cloud Storage atau akses ke tabel BigQuery (lihat Mengelola akses ke akun layanan).

Izin akun layanan VM

Akun layanan VM cluster multi-tenant harus memiliki izin iam.serviceAccounts.getAccessToken di setiap akun layanan yang dipetakan. Anda dapat memberikan peran Service Account Token Creator (roles/iam.serviceAccountTokenCreator), yang berisi izin ini (lihat Mengelola akses ke akun layanan), atau membuat peran kustom dengan izin ini. Lihat Akun layanan VM Managed Service untuk Apache Spark guna mengetahui informasi tentang peran akun layanan VM lainnya.

Menghubungkan notebook Jupyter ke kernel cluster multi-tenant

Pengguna cluster multi-tenant yang dipetakan dapat menghubungkan Vertex AI Workbench atau notebook Jupyter yang dikelola pengguna ke kernel yang diinstal di cluster multi-tenant.

Notebook Vertex AI

Untuk membuat dan menghubungkan notebook Jupyter ke cluster multi-tenant, lakukan hal berikut:

  1. Membuat instance Vertex AI Workbench.
  2. Di tab Workbench Instances, klik link Open JupyterLab untuk instance Anda.
  3. Di bagian Dataproc Cluster Notebooks, klik PySpark (YARN Cluster) on MULTI_TENANCY_CLUSTER_NAME kartu untuk terhubung dan meluncurkan notebook Jupyter PySpark baru.

Notebook yang dikelola pengguna

Untuk membuat dan menghubungkan notebook Jupyter yang dikelola pengguna ke cluster multi-tenant Managed Service untuk Apache Spark, ikuti langkah-langkah untuk Menginstal ekstensi JupyterLab di VM yang dikelola pengguna.

Memperbarui pengguna cluster multi-tenant (Pratinjau)

Jika Anda menetapkan properti cluster dataproc:dataproc.dynamic.multi.tenancy.enabledke true saat Anda membuat cluster multi-tenant, Anda dapat menambahkan, menghapus, atau mengganti pengguna cluster multi-tenant setelah pembuatan cluster.

Menambahkan pengguna

Perintah update berikut menggunakan flag --add-user-mappings untuk menambahkan dua pemetaan akun pengguna ke akun layanan baru ke cluster multi-tenant yang aman.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --add-user-mappings=new-user1@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com,new-user2@my-company.com=SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com

Menghapus pengguna

Perintah update berikut menggunakan flag --remove-user-mappings untuk menghapus dua pengguna dari cluster multi-tenant. Flag ini menerima akun pengguna yang akan dihapus.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --remove-user-mappings=UserB@my-company.com,UserC@my-company.com

Mengganti pengguna

Anda dapat menggunakan perintah update dengan flag --identity-config-file untuk mengganti kumpulan pengguna yang ada dengan kumpulan baru. Flag ini berguna untuk menambahkan dan menghapus pengguna dengan satu perintah update.

gcloud dataproc clusters update CLUSTER_NAME \
    --region=REGION \
    --identity-config-file=identity-config.yaml

Catatan:

  • --identity-config-file: Tentukan file YAML lokal atau Cloud Storage yang berisi pemetaan akun pengguna baru ke akun layanan.
    --identity-config-file=LOCAL_FILE or gs://BUCKET/FOLDER/FILENAME
    
    Setiap baris dalam file pemetaan memetakan akun pengguna ke akun layanan. Baris pertama berisi header user_service_account_mapping:.
    user_service_account_mapping:
    new-user1@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER1@iam.gserviceaccount.com
    new-user2@my-company.com:SERVICE_ACCOUNT_FOR_NEW_USER2@iam.gserviceaccount.com