Membuat instance notebook yang dikelola pengguna yang aman dalam jaringan VPC


Tutorial ini ditujukan bagi data scientist, peneliti, dan administrator jaringan perusahaan. Contoh ini menunjukkan cara mengamankan instance notebook yang dikelola pengguna dengan membuatnya di jaringan Virtual Private Cloud (VPC).

Jaringan VPC adalah versi virtual dari jaringan fisik yang diterapkan di dalam jaringan produksi Google. Ini merupakan jaringan pribadi, dengan alamat IP pribadi, subnet, dan gateway jaringannya sendiri. Di perusahaan, jaringan VPC digunakan untuk melindungi data dan instance dengan mengontrol akses ke keduanya dari jaringan lain dan dari internet.

Jaringan VPC dalam tutorial ini merupakan jaringan mandiri. Namun, Anda dapat berbagi jaringan VPC dari satu project (disebut project host) ke project lain di organisasi Google Cloud Anda. Untuk mempelajari lebih lanjut jenis jaringan VPC yang akan digunakan, lihat Jaringan VPC Tunggal dan VPC Bersama.

Setelah praktik terbaik keamanan jaringan, jaringan VPC dalam tutorial ini menggunakan kombinasi dariRouter Cloud .Cloud NAT , dan Akses Google Pribadi untuk mengamankan instance dengan cara berikut:

  • Instance notebook yang dikelola pengguna tidak memiliki alamat IP eksternal.
  • Instance ini memiliki akses internet keluar melalui Cloud Router regional dan gateway Cloud NAT sehingga Anda dapat menginstal paket software atau dependensi lainnya. Cloud NAT memungkinkan koneksi keluar dan respons masuk ke koneksi tersebut. API ini tidak mengizinkan permintaan masuk yang tidak diminta dari internet.
  • Instance ini menggunakan Akses Google Pribadi untuk menjangkau alamat IP eksternal Google API dan layanan Google.

Tutorial ini juga menunjukkan cara melakukan hal berikut:

  • Membuat skrip pasca-startup untuk meng-clone repo GitHub secara otomatis ke instance notebook yang dikelola pengguna yang baru dibuat.
  • Gunakan Cloud Monitoring untuk memantau instance notebook yang dikelola pengguna.
  • Gunakan API Compute Engine untuk memulai dan menghentikan instance secara otomatis guna mengoptimalkan biaya.

Diagram arsitektur instance notebook yang dikelola pengguna dalam jaringan VPC.

Tujuan

  • Membuat jaringan VPC dan menambahkan subnet yang telah mengaktifkan Akses Google Pribadi.
  • Membuat Cloud Router dan Cloud NAT untuk jaringan VPC.
  • Membuat instance notebook yang dikelola pengguna di subnet, menggunakan skrip pasca-startup yang meng-clone repositori GitHub Google Cloud Generative AI.
  • Mengaktifkan Cloud Monitoring untuk instance.
  • Membuat jadwal instance VM dan melampirkan ke instance.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Di konsol Google Cloud, buka halaman Pemilih project.

    Buka pemilih project

  2. Pilih atau buat project Google Cloud.

  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Buka Cloud Shell untuk menjalankan perintah yang tercantum dalam tutorial ini. Cloud Shell adalah lingkungan shell interaktif untuk Google Cloud yang dapat Anda gunakan untuk mengelola project dan resource dari browser web.
  5. Buka Cloud Shell
  6. Di Cloud Shell, tetapkan project saat ini ke project ID Google Cloud Anda dan simpan project ID yang sama ke dalam variabel shell projectid:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    Ganti PROJECT_ID dengan project ID Anda. Jika perlu, Anda dapat menemukan project ID di konsol Google Cloud. Untuk mengetahui informasi selengkapnya, baca Menemukan project ID.
  7. Aktifkan API IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI:

    gcloud services enable iam.googleapis.com  compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com
  8. Berikan peran ke Akun Google Anda. Jalankan perintah berikut satu kali untuk setiap peran IAM berikut: roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/notebooks.admin, roles/resourcemanager.projectIamAdmin, roles/iam.serviceAccountAdmin, roles/iam.serviceAccountUser, roles/storage.Admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • Ganti PROJECT_ID dengan project ID Anda.
    • Ganti EMAIL_ADDRESS dengan alamat email Anda.
    • Ganti ROLE dengan setiap peran individual.

Membuat dan mengonfigurasi VPC mandiri

  1. Buat jaringan VPC bernama securevertex-vpc:

    gcloud compute networks create securevertex-vpc --subnet-mode=custom
    
  2. Buat subnet bernama securevertex-subnet-a, dengan rentang IPv4 utama 10.10.10.0/29:

    gcloud compute networks subnets create securevertex-subnet-a --range=10.10.10.0/29 --network=securevertex-vpc --region=us-central1 --enable-private-ip-google-access
    

    Jika diinginkan, Anda dapat memberikan nilai yang berbeda untuk parameter --range. Namun, panjang imbuhan minimum untuk satu notebook adalah 29. Untuk mengetahui informasi selengkapnya, lihat Rentang subnet IPv4.

  3. Buat Cloud Router regional bernama cloud-router-us-central1:

    gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
    
  4. Buat gateway Cloud NAT regional bernama cloud-nat-us-central1:

    gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1 --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1
    

Membuat bucket Cloud Storage

  1. Buat bucket Cloud Storage:

    gcloud storage buckets create --location=us-central1 --uniform-bucket-level-access gs://BUCKET_NAME
    

    Ganti BUCKET_NAME dengan nama unik bucket.

  2. Tetapkan variabel shell BUCKET_NAME dan pastikan variabel shell telah dimasukkan dengan benar:

    BUCKET_NAME=BUCKET_NAME
    echo $BUCKET_NAME
    

    Ganti BUCKET_NAME dengan nama bucket.

Membuat dan mengupload skrip pasca-startup

  1. Untuk membuat skrip, gunakan editor teks seperti vi atau nano untuk membuat file bernama poststartup.sh.

  2. Tempel skrip shell berikut ke dalam file:

    #! /bin/bash
    echo "Current user: id" >> /tmp/notebook_config.log 2>&1
    echo "Changing dir to /home/jupyter" >> /tmp/notebook_config.log 2>&1
    cd /home/jupyter
    echo "Cloning generative-ai from github" >> /tmp/notebook_config.log 2>&1
    su - jupyter -c "git clone https://github.com/GoogleCloudPlatform/generative-ai.git" >> /tmp/notebook_config.log 2>&1
    echo "Current user: id" >> /tmp/notebook_config.log 2>&1
    echo "Installing python packages" >> /tmp/notebook_config.log 2&1
    su - jupyter -c "pip install --upgrade --no-warn-conflicts --no-warn-script-location --user \
         google-cloud-bigquery \
         google-cloud-pipeline-components \
         google-cloud-aiplatform \
         seaborn \
         kfp" >> /tmp/notebook_config.log 2>&1
    
  3. Simpan file.

  4. Upload file ke bucket Cloud Storage Anda:

    gcloud storage cp poststartup.sh gs://$BUCKET_NAME
    

Membuat akun layanan kustom

Saat membuat instance notebook yang dikelola pengguna, sebaiknya Anda menghapus centang pada kotak Gunakan akun layanan default Compute Engine dan tentukan akun layanan kustom. Akun layanan default Compute Engine (dan dengan demikian siapa pun yang Anda tetapkan sebagai pengguna instance) diberi peran Editor (roles/editor) pada project Anda. Anda dapat menonaktifkan perilaku ini dengan menonaktifkan pemberian peran otomatis untuk akun layanan default.

  1. Buat akun layanan kustom bernama user-managed-notebook-sa:

    gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"
    
  2. Tetapkan peran IAM Storage Object Viewer ke akun layanan:

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.objectViewer"
    
  3. Tetapkan peran Vertex AI User IAM ke akun layanan:

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"
    

Membuat instance notebook yang dikelola pengguna

  1. Di konsol Google Cloud, buka halaman Notebook yang dikelola pengguna.

    Buka Notebook yang dikelola pengguna

  2. Klik  Buat baru, lalu pilih Opsi Lanjutan.

    Halaman Buat instance akan terbuka.

  3. Di halaman Buat instance, di bagian Detail, berikan informasi berikut untuk instance baru Anda, lalu klik Lanjutkan .

    • Nama: Berikan nama untuk instance baru Anda, atau setujui nama default.
    • Region: Pilih us-central1.
    • Zona: Pilih us-central1-a.
  4. Di bagian Lingkungan, berikan hal berikut, lalu klik Lanjutkan:

    • Skrip pasca-startup: Klik Jelajahi, klik dua kali file poststartup.sh, klik sekali lagi, lalu klik Pilih.
  5. Di bagian Jenis mesin, berikan informasi berikut, lalu klik Lanjutkan:

    • Shielded VM: Pilih kotak centang berikut:

      • Secure Boot
      • Virtual Trusted Platform Module (vTPM)
      • Integrity monitoring
  6. Di bagian Disk, pastikan Kunci enkripsi yang dikelola Google dipilih, lalu klik Lanjutkan:

  7. Di bagian Networking, berikan hal berikut, lalu klik Lanjutkan:

    • Networking: Pilih Network dalam project ini dan selesaikan langkah-langkah berikut:

      1. Pada kolom Network, pilih securevertex-vpc.

      2. Di kolom Subnetwork, pilih securevertex-subnet-a.

      3. Hapus centang pada kotak Tetapkan alamat IP eksternal. Dengan tidak menetapkan alamat IP eksternal, Anda dapat mencegah instance menerima komunikasi yang tidak diminta dari internet atau jaringan VPC lainnya.

      4. Centang kotak Izinkan akses proxy.

  8. Di bagian IAM dan keamanan, berikan hal berikut, lalu klik Lanjutkan:

    • IAM dan keamanan: Untuk memberikan akses kepada satu pengguna ke antarmuka JupyterLab instance, selesaikan langkah-langkah berikut:

      1. Pilih Satu pengguna.
      2. Di kolom Email pengguna, masukkan alamat email untuk satu akun pengguna. Jika Anda membuat instance untuk orang lain, kondisi berikut akan berlaku:
        • Anda (pembuat instance) tidak memiliki akses ke antarmuka JupyterLab instance. Namun Anda tetap mengontrol instance tersebut, dan Anda dapat memulai, menghentikan, atau menghapusnya.
        • Setelah membuat instance, Anda perlu memberikan peran Service Account User (roles/iam.serviceAccountUser) kepada pengguna di akun layanan instance. Lihat Opsional: Memberikan peran Service Account User kepada pengguna instance.
      3. Hapus centang pada kotak Gunakan akun layanan default Compute Engine. Langkah ini penting, karena akun layanan default Compute Engine (dan dengan demikian satu pengguna yang baru saja Anda tentukan) diberi peran Editor (roles/editor) pada project Anda.
      4. Di kolom Email akun layanan, masukkan user-managed-notebook-sa@$projectid.iam.gserviceaccount.com. (Ini adalah alamat email akun layanan khusus yang Anda buat sebelumnya.) Akun layanan ini memiliki izin terbatas.

        Untuk mempelajari lebih lanjut cara memberikan akses, lihat Mengelola akses ke antarmuka JupyterLab instance notebook yang dikelola pengguna.

    • Opsi keamanan: Hapus centang pada kotak berikut:

      • Akses root ke instance

      Centang kotak berikut:

      • nbconvert nbconvert memungkinkan pengguna mengekspor dan mendownload file notebook sebagai jenis file berbeda, seperti HTML, PDF, atau LaTeX. Setelan ini diperlukan oleh beberapa notebook di repo GitHub Google Cloud Generative AI.

      Hapus centang pada kotak berikut:

      • Mendownload file

      Pilih kotak centang berikut, kecuali jika Anda berada di lingkungan produksi:

      • Akses terminal Ini memungkinkan akses terminal ke instance Anda dari dalam antarmuka pengguna JupyterLab.
  9. Di bagian Kondisi Sistem, pilih Upgrade otomatis lingkungan dan berikan hal berikut:

    • Di Pelaporan, centang kotak berikut:

      • Melaporkan kondisi sistem
      • Melaporkan metrik kustom ke Cloud Monitoring
      • Menginstal Cloud Monitoring
      • Melaporkan status DNS untuk domain Google yang diperlukan
  10. Klik Create.

Opsional: Memberikan peran Service Account User kepada pengguna instance

Jika Anda membuat instance notebook yang dikelola pengguna untuk pengguna lain, Anda harus memberi mereka peran Service Account User (roles/iam.serviceAccountUser) di akun layanan khusus user-managed-notebook-sa sebagai berikut:

gcloud iam service-accounts add-iam-policy-binding \
    user-managed-notebook-sa@PROJECT_ID.iam.gserviceaccount.com \
    --member="user:USER_EMAIL" \
    --role="roles/iam.serviceAccountUser"

Ganti nilai berikut:

  • PROJECT_ID: project ID
  • USER_EMAIL: alamat email untuk pengguna

Pastikan bahwa instance notebook yang dikelola pengguna telah dibuat

Vertex AI Workbench membuat instance notebook yang dikelola pengguna berdasarkan properti yang Anda tentukan dan otomatis memulai instance.

Saat instance siap digunakan, Vertex AI Workbench akan mengaktifkan link Buka JupyterLab. Link ini hanya dapat diakses oleh satu pengguna yang Anda tentukan pada saat pembuatan instance.

Buka instance di JupyterLab dan verifikasi bahwa ada repo GitHub Google Cloud Generative AI yang di-clone.

  1. Di konsol Google Cloud, buka halaman Notebook yang dikelola pengguna.

    Buka Notebook yang dikelola pengguna

  2. Pada daftar instance notebook yang dikelola pengguna, klik link Buka JupyterLab untuk instance yang Anda buat.

    Dalam daftar folder, Anda akan melihat folder generative-ai. Folder ini berisi repo GitHub yang telah di-clone.

Memantau status respons melalui Monitoring

Anda dapat memantau metrik sistem dan aplikasi untuk instance notebook yang dikelola pengguna menggunakan konsol Google Cloud. Untuk mempelajari lebih lanjut pemantauan instance dan cara membuat metrik kustom, lihat Memantau status kondisi.

  1. Di konsol Google Cloud, buka halaman Notebook yang dikelola pengguna.

    Buka Notebook yang dikelola pengguna

  2. Klik nama instance notebook yang dikelola pengguna yang ingin Anda lihat metriknya.

  3. Di halaman Detail notebook, klik tab Monitoring. Tinjau Penggunaan CPU dan Byte Jaringan untuk instance notebook Anda. Untuk mempelajari cara menafsirkan metrik ini, lihat Meninjau metrik resource.

    Jika Anda baru saja membuat instance, Anda tidak akan langsung melihat data apa pun. Tunggu beberapa menit, lalu muat ulang tab konsol.

Membuat jadwal instance VM untuk instance notebook yang dikelola pengguna

Karena instance notebook yang dikelola pengguna merupakan instance VM Compute Engine, Anda dapat menggunakan Compute Engine API untuk membuat jadwal instance VM untuk instance tersebut.

Gunakan jadwal instance VM untuk memulai dan menghentikan instance notebook yang dikelola pengguna. Selama jam-jam ketika instance dihentikan, Anda hanya perlu membayar biaya Cloud Storage.

Anda dapat menyertakan jadwal instance ke instance VM apa pun yang berada di region yang sama, sehingga Anda dapat menggunakan jadwal instance yang sama untuk mengontrol semua instance notebook yang dikelola pengguna di region tersebut.

Untuk mempelajari jadwal instance VM lebih lanjut, lihat Menjadwalkan instance VM untuk dimulai dan dihentikan.

Membuat peran IAM khusus

Sebagai praktik terbaik keamanan, sebaiknya buat peran IAM kustom yang hanya memiliki izin berikut dan tetapkan ke akun layanan default Compute Engine:

  • compute.instances.start
  • compute.instances.stop
  1. Di dalam Cloud Shell, buat peran khusus bernama Vm_Scheduler dan sertakan izin yang diperlukan:

    Buka Cloud Shell

    gcloud iam roles create Vm_Scheduler --project=$projectid \
    --title=vm-scheduler-notebooks \
    --permissions="compute.instances.start,compute.instances.stop" --stage=ga
    
  2. Jelaskan peran khusus:

    gcloud iam roles describe Vm_Scheduler --project=$projectid
    

Menetapkan peran ke akun layanan default Compute Engine

Untuk memberi akun layanan default Compute Engine izin agar dapat memulai dan menghentikan instance notebook yang dikelola pengguna, Anda perlu menetapkan peran khusus Vm_Scheduler ke dalamnya.

Akun layanan default Compute Engine untuk project Anda memiliki alamat email berikut: PROJECT_NUMBER-compute@developer.gserviceaccount.com, dengan PROJECT_NUMBER sebagai nomor project Anda.

  1. Identifikasi nomor project Anda dan simpan di variabel shell project_number:

    project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)')
    echo $project_number
    
  2. Tetapkan peran khusus ke akun layanan default:

    gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
    

Buat dan lampirkan jadwal

Untuk membuat jadwal instance yang memulai instance notebook yang dikelola pengguna pada pukul 07.00 dan menghentikannya pada pukul 18.00:

  1. Buat jadwal mulai dan berhenti yang bernama optimize-notebooks:

    gcloud compute resource-policies create instance-schedule optimize-notebooks \
    --region=us-central1 \
    --vm-start-schedule='0 7 * * *' \
    --vm-stop-schedule='0 18 * * *' \
    --timezone=TIME_ZONE
    

    Ganti TIME_ZONE dengan zona waktu IANA berbasis lokasi untuk jadwal instance ini, misalnya, America/Chicago. Jika dihilangkan, nilai default UTC akan digunakan. Untuk mengetahui informasi selengkapnya, lihat zona waktu.

  2. Identifikasi nama instance notebook yang dikelola pengguna dengan menjalankan perintah berikut dan mencatat nilai NAME yang ditampilkan:

    gcloud compute instances list
    
  3. Simpan nama dalam variabel shell notebook_vm:

    notebook_vm=NOTEBOOK_VM_NAME
    echo $notebook_vm
    

    Ganti NOTEBOOK_VM_NAME dengan nama instance notebook yang dikelola pengguna.

  4. Lampirkan jadwal instance ke instance notebook yang dikelola pengguna:

    gcloud compute instances add-resource-policies $notebook_vm \
      --resource-policies=optimize-notebooks \
      --zone=us-central1-a
    
  5. Jelaskan jadwal instance:

    gcloud compute resource-policies describe optimize-notebooks \
      --region=us-central1
    

Anda dapat memastikan bahwa jadwal instance berjalan dengan baik dengan memeriksa log audit untuk kebijakan resource jadwal instance dan instance VM yang terpasang. Untuk setiap operasi, Anda mungkin harus menunggu hingga 15 menit setelah waktu yang dijadwalkan.

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Anda dapat menghapus setiap resource dalam project dengan cara berikut:

  1. Di konsol Google Cloud, buka halaman Notebook yang dikelola pengguna.

    Buka Notebook yang dikelola pengguna

  2. Pilih instance notebook yang dikelola pengguna.

  3. Klik Delete.

  4. Di Cloud Shell, hapus setiap resource yang tersisa dengan menjalankan perintah berikut.

    Buka Cloud Shell

    gcloud compute routers delete cloud-router-us-central1 --region=us-central1 --quiet
    
    gcloud compute routers nats delete cloud-nat-us-central1 --region=us-central1 --router=cloud-router-us-central1 --quiet
    
    gcloud compute instances remove-resource-policies $notebook_vm \
      --resource-policies=optimize-notebooks \
      --zone=us-central1-a --quiet
    
    gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
    
    gcloud compute instances delete $notebook_vm --zone=us-central1-a --quiet
    
    gcloud compute networks subnets delete securevertex-subnet-a --region=us-central1 --quiet
    
    gcloud iam service-accounts delete user-managed-notebook-sa@$projectid.iam.gserviceaccount.com --quiet
    
    gcloud projects remove-iam-policy-binding $projectid --member="serviceAccount:$project_number-compute@developer.gserviceaccount.com" --role="projects/$projectid/roles/Vm_Scheduler"
    
    gcloud iam roles delete Vm_Scheduler --project=$projectid
    
    gcloud compute networks delete securevertex-vpc --quiet
    

Langkah selanjutnya