Vertex AI 建立安全的使用者自行管理筆記本

1. 簡介

您可以透過 Vertex AI Workbench 使用者管理的筆記本執行個體,建立及管理預先封裝 JupyterLab 的深度學習虛擬機器 (VM) 執行個體。

使用者管理的 Notebooks 執行個體已預先安裝一套深度學習套件,支援 TensorFlow 和 PyTorch 架構。您可以設定只使用 CPU 或已啟用 GPU 的執行個體。

建構項目

本教學課程說明如何根據網路和安全性的最佳做法,部署安全的使用者管理筆記本。步驟如下:

  1. 建立虛擬私有雲
  2. 建立 Cloud Router 和 Cloud NAT
  3. 使用適當的安全性設定配置筆記本執行個體

本教學課程提供每個步驟的詳細操作說明。此外,也提供保護使用者管理筆記本的訣竅和最佳做法。圖 1:說明使用獨立虛擬私有雲的部署作業。

圖 1

2292244ba0b11f71.png

課程內容

  • 如何判斷貴機構是否適用共用或獨立虛擬私有雲
  • 如何建立獨立 VPC
  • 如何建立 Cloud Router 和 Cloud NAT
  • 如何建立由使用者管理的筆記本
  • 如何存取由使用者管理的筆記本
  • 如何監控使用者管理的筆記本健康狀態
  • 如何建立及套用執行個體排程

軟硬體需求

  • Google Cloud 專案

IAM 權限

2. 虛擬私有雲網路

您可以將虛擬私有雲網路想像成實體網路,差別在於這個網路在 Google Cloud 中已經虛擬化。虛擬私有雲網路是全域性資源,由多個區域性子網路組成。Google Cloud 中的虛擬私有雲網路在邏輯上彼此獨立。

獨立虛擬私有雲

圖 2 顯示獨立全域虛擬私有雲的範例,除了 Cloud Router 和 Cloud NAT 之外,還包含區域子網路 (us-central1),可讓使用者管理的 Notebook 安全地建立網際網路連線。

圖 2

2292244ba0b11f71.png

Shared VPC

共用虛擬私有雲可讓您匯出主專案內虛擬私有雲網路中的子網路,傳送至同一個機構中的服務專案。主專案包含與服務專案共用的網路資源,例如子網路、Cloud NAT 和防火牆規則。服務專案包含應用程式層級資源,這些資源會運用主專案中的網路資源。

圖 3 說明全球共用虛擬私有雲,其中網路和安全基礎架構部署在主專案中,工作負載則部署在服務專案中。

圖 3

1354a9323c8e5787.png

獨立與共用虛擬私有雲

在許多簡單的應用實例中,單一虛擬私有雲網路即可提供您所需的功能,且相較於較複雜的替代方式更易於建立、維護和瞭解。對於有多個團隊的機構,共用虛擬私有雲是有效的工具,可讓他們透過使用服務專案,將單一虛擬私有雲網路的簡便架構延伸至多個工作群組。

本教學課程中使用的 VPC 最佳做法

  • 啟用 Cloud NAT,即可存取筆記本。
  • 建立子網路時,請開啟「私人 Google 存取權」
  • 建立規範性防火牆規則,減少未經要求的流量,例如不要使用 0.0.0.0/0 tcp,而是定義確切的子網路或主機 IP 位址。
  • 運用防火牆政策,擴大輸入規則的範圍,例如地理位置、威脅情報清單、來源網域名稱等。

3. 筆記本最佳做法

調整執行個體大小

  • 停止和/或刪除未使用的執行個體
  • 使用較小的初始執行個體,並以較小的樣本資料進行疊代
  • 視需要擴充執行個體
  • 使用較小的資料集進行實驗

選取合適的機器類型

  • 最佳成本效益 VM
  • 更妥善運用硬體資源,降低成本
  • 與 N1 相比,最多可節省 31% 的費用
  • 承諾使用 1 年或 3 年,可享額外折扣 (20% 至 50%)
  • 增加機器大小或新增 GPU 有助於提升效能,並克服記憶體限制錯誤

排定執行個體關機時間

  • 在執行個體閒置時關閉,只支付磁碟儲存空間費用
  • 排定筆記本 VM 執行個體在特定時間自動關機和啟動

監控 Notebook 健康狀態

安全性考量

建立使用者管理的筆記本時,建議您考量下列安全性事項:

  • 選取「僅限單一使用者」筆記本存取權的選項。如果指定的使用者不是執行個體的建立者,您必須將執行個體服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser) 授予指定使用者。
  • 停用下列選項:
  • 根層級存取權
  • nbconvert
  • 從 JupyterLab 使用者介面下載檔案
  • 系統會使用 Cloud NAT,而不是為使用者管理的筆記本指派外部 IP 位址。
  • 選取下列運算選項:
  • 安全啟動
  • 虛擬信任平台模組 (vTPM)
  • 完整性監控

4. 事前準備

更新專案以支援教學課程

本教學課程會使用 $variables,協助您在 Cloud Shell 中實作 gcloud 設定。

在 Cloud Shell 中執行下列操作:

gcloud config list project
gcloud config set project [your-project-name]
projectid=your-project-name
echo $projectid

5. 設定虛擬私有雲

建立獨立虛擬私有雲

在 Cloud Shell 中執行下列操作:

gcloud compute networks create securevertex-vpc --project=$projectid --subnet-mode=custom

建立由使用者管理的筆記本子網路

在 Cloud Shell 中執行下列操作:

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

Cloud Router 和 NAT 設定

本教學課程會使用 Cloud NAT 下載筆記本軟體套件,因為使用者管理的筆記本執行個體沒有外部 IP 位址。Cloud NAT 也提供輸出 NAT 功能,也就是說,網際網路主機無法與使用者管理的筆記本啟動通訊,因此更加安全。

在 Cloud Shell 中,建立區域性 Cloud Router。

gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1

在 Cloud Shell 中,建立區域性 Cloud NAT 閘道。

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

6. 建立儲存空間值區

儲存空間值區提供安全的檔案上傳/擷取功能。在本教學課程中,雲端儲存空間會包含啟動後指令碼,用於在使用者管理的筆記本中安裝生成式 AI 套件。

建立 Cloud Storage bucket,並將 BUCKET_NAME 替換成您偏好的全域不重複名稱。

在 Cloud Shell 中,建立不重複的儲存空間 bucket。

gsutil mb -l us-central1 -b on gs://BUCKET_NAME

在實驗室期間儲存「BUCKET_NAME」

BUCKET_NAME=YOUR BUCKET NAME
echo $BUCKET_NAME

7. 建立開機後指令碼

如要啟用生成式 AI 套件的下載功能,請使用 vinano 編輯器在 Cloud Shell 中建立開機後指令碼,並將其儲存為 poststartup.sh

#! /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

範例:

vpc_admin@cloudshell$ more poststartup.sh 
#! /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

使用 gsutil 從 Cloud Shell 將開機後指令碼上傳至儲存空間值區

gsutil cp poststartup.sh gs://$BUCKET_NAME

8. 建立服務帳戶

如要精細控管使用者代管的筆記本,必須使用服務帳戶。產生服務帳戶後,您可以根據業務需求修改權限。在本教學課程中,服務帳戶會套用下列規則:

您必須先 Service Account API,才能繼續操作。

在 Cloud Shell 中建立服務帳戶。

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

在 Cloud Shell 中,將「Storage 物件檢視者」角色指派給服務帳戶

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

在 Cloud Shell 中,使用 Vertex AI 使用者角色更新服務帳戶

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

在 Cloud Shell 中列出服務帳戶,並記下建立使用者管理的筆記本時要使用的電子郵件地址。

gcloud iam service-accounts list

範例:

$ gcloud iam service-accounts list
DISPLAY NAME: user-managed-notebook-sa
EMAIL: user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com
DISABLED: False

9. 建立安全的由使用者管理的筆記本

使用者自行管理的筆記本執行個體是一種預先安裝了最新機器學習和數據資料學程式庫的深度學習虛擬機器執行個體。您可以選擇是否要加入 Nvidia GPU 以進行硬體加速。

啟用消費者 API

Notebooks API

建立由使用者管理的筆記本

  1. 前往 Workbench
  2. 選取「使用者自行管理的筆記本」,然後選取「建立筆記本」。「建立由使用者管理的筆記本」頁面隨即開啟。
  3. 如果已部署現有筆記本,請依序選取「使用者自行管理的筆記本」→「新增筆記本」→「自訂」
  4. 在「建立由使用者管理的筆記本」頁面的「詳細資料」部分,為新執行個體提供下列資訊:
  • 名稱:為新執行個體命名。
  • 地區和區域:本教學課程會使用 us-central1 地區和 us-central1-a 區域

選取「繼續」

  1. 在「環境」部分,提供下列資訊:
  • 作業系統:選取要使用的作業系統。
  • 選取要使用的環境
  • 版本:選取要使用的版本。
  • 開機後指令碼 (選用,使用先前建立的生成式 AI 指令碼):選取「瀏覽」,選取要在執行個體啟動後執行的指令碼。
  • 中繼資料:選用:提供執行個體的自訂中繼資料鍵。

選取「繼續」

  1. 在「機器類型」部分,提供下列資訊:
  • 機型:為新執行個體選取 CPU 數量和 RAM 容量。Vertex AI Workbench 會針對您選取的各種機器類型提供每月預估費用。
  • GPU 類型:為新執行個體選取 GPU 類型和 GPU 數量。如需不同 GPU 的相關資訊,請參閱「Compute Engine 上的 GPU」一文。
  • 選取「自動為我安裝 NVIDIA GPU 驅動程式」核取方塊。

受防護的 VM

  • 啟用安全啟動功能
  • 啟用 vTPM
  • 啟用完整性監控功能

選取「繼續」

  1. 在「Disks」部分中,提供下列資訊:
  • 磁碟:選用:如要變更預設開機或資料磁碟設定,請選取所需的開機磁碟類型、開機磁碟大小 (以 GB 為單位)、資料磁碟類型和資料磁碟大小 (以 GB 為單位)。如要進一步瞭解磁碟類型,請參閱「儲存空間選項」一文。
  • 刪除到垃圾桶:選用:選取這個核取方塊,即可使用作業系統的預設垃圾桶處理模式。如果使用預設垃圾桶處理模式,透過 JupyterLab 使用者介面刪除的檔案可以復原,但這些刪除的檔案會佔用磁碟空間。
  • 備份:選用:如要將 Cloud Storage 位置與執行個體的資料磁碟同步處理,請選取「瀏覽」並指定 Cloud Storage 位置。如要瞭解儲存空間費用,請參閱 Cloud Storage 定價
  • 加密:Google 代管的加密金鑰

選取「繼續」

  1. 在「網路」部分中,提供下列資訊:
  • 網路:選取「這項專案中的網路」或「與我共用的網路」。如果您在主專案中使用共用虛擬私有雲,也必須將Compute 網路使用者角色 (roles/compute.networkUser) 授予服務專案中的 Notebooks 服務代理程式
  • 在「網路」欄位中,選取所需的網路。本教學課程使用 securevertex-vpc 網路。您可以選取虛擬私有雲網路,只要該網路已啟用私人 Google 存取功能或者可以存取網際網路即可。在「Subnetwork」(子網路) 欄位中,選取所需的子網路。在本教學課程中,我們使用「securevertex-subnet-a」子網路。
  • 取消選取「指派外部 IP 位址」
  • 選取「允許 Proxy 存取」

選取「繼續」

81bb7dbe31fbf587.png

  1. 在「IAM and security」(身分與存取權管理和安全性) 部分,提供下列資訊:
  • 選取「單一使用者」,然後在「使用者電子郵件」欄位中,輸入要授予存取權的使用者帳戶。如果指定的使用者不是執行個體的建立者,您必須將執行個體服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser) 授予指定使用者。
  • 取消選取「在 VM 上使用預設的 Compute Engine 服務帳戶呼叫 Google Cloud API」
  • 輸入新建立的服務帳戶電子郵件地址,例如:user-managed-notebook-sa@my-project-id.iam.gserviceaccount.com

安全性選項

  • 取消選取「啟用執行個體的根存取權」
  • 取消選取「啟用 nbconvert」
  • 取消選取「啟用從 JupyterLab 使用者介面下載檔案的功能」
  • 啟用終端機 (取消選取正式環境)

選取「繼續」

e19f3cd05a2c1b7f.png

  1. 在「系統健康狀態」部分,提供下列資訊

環境升級與系統健康狀態

  • 勾選「啟用環境自動升級」核取方塊。
  • 選擇要升級為週刊或月刊。

在「系統健康狀態與報告」中,勾選或取消勾選下列核取方塊:

  • 啟用系統健康狀態報表
  • 向 Cloud Monitoring 回報自訂指標
  • 安裝 Cloud Monitoring 代理程式

選取「建立」

10. 驗證

Vertex AI Workbench 會根據您指定的屬性建立使用者管理的筆記本執行個體,並自動啟動該執行個體。執行個體可供使用時,Vertex AI Workbench 會啟用「Open JupyterLab」(開啟 JupyterLab) 連結,方便使用者存取筆記本。

11. 可觀測性

透過 Monitoring 監控系統和應用程式指標

如果使用者自行管理的筆記本執行個體已安裝監控功能,您可以使用 Google Cloud 控制台監控系統和應用程式指標:

  1. 前往 Google Cloud 控制台的「使用者管理的 Notebook」頁面。
  2. 按一下要查看系統和應用程式指標的執行個體名稱。
  3. 在「筆記本詳細資料」頁面中,按一下「監控」分頁標籤。查看執行個體的系統和應用程式指標。

12. 建立筆記本排程

執行個體排程可讓您自動啟動及停止虛擬機器 (VM) 執行個體。使用執行個體排程自動部署 VM 執行個體,有助於節省成本,並更有效率地管理 VM 執行個體。您可以將執行個體排程用於週期性和一次性工作負載。舉例來說,您可以使用執行個體排程,只在工作時間執行 VM 執行個體,或為一次性活動提供容量。

如要使用執行個體排程,請建立資源政策,詳細說明啟動和停止行為,然後將政策附加至一或多個 VM 執行個體。

本教學課程將說明如何建立執行個體排程,在早上 7 點啟動筆記本,並在下午 6 點關閉筆記本。

如要建立執行個體排程,您需要 compute.instances.start 和 compute.instances.stop 權限,因此建議使用管理員授予您的自訂角色。

建立完成後,系統會將自訂角色指派給專案中的預設 Compute Engine 服務帳戶,讓執行個體排程啟動及停止筆記本。

建立自訂角色

在 Cloud Shell 中建立自訂角色 VmScheduler,並加入必要權限。

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

從 Cloud Shell 說明自訂角色。

gcloud iam roles describe Vm_Scheduler --project=$projectid

範例:

$ gcloud iam roles describe Vm_Scheduler --project=$projectid
etag: BwX991B0_kg=
includedPermissions:
- compute.instances.start
- compute.instances.stop
name: projects/$projectid/roles/Vm_Scheduler
stage: GA
title: vm-scheduler-notebooks

更新預設服務帳戶

在下一節中,您將找出並更新預設服務帳戶,該帳戶的格式為:PROJECT_NUMBER-compute@developer.gserviceaccount.com

在 Cloud Shell 中,找出目前的專案編號。

gcloud projects list --filter=$projectid

在 Cloud Shell 中,將專案編號儲存為變數。

project_number=your_project_number
echo $project_number

在 Cloud Shell 中,使用自訂角色 VM_Scheduler 更新預設的 Compute 服務帳戶。

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

建立執行個體排程

在 Cloud Shell 中,建立啟動和停止排程。

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

在 Cloud Shell 中儲存筆記本的名稱。

gcloud compute instances list
notebook_vm=your_notebookvm_name
echo $notebook_vm

您可以將執行個體排程附加至與執行個體排程位於相同地區的任何現有 VM 執行個體。

在 Cloud Shell 中,將排程與筆記本建立關聯。

gcloud compute instances add-resource-policies $notebook_vm \
--resource-policies=optimize-notebooks \
--zone=us-central1-a

13. 清理

從控制台刪除使用者管理的筆記本,依序前往 Vertex AI → Workbench,選取並刪除筆記本。

從 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 

14. 恭喜

非常好!您已成功設定並驗證安全的使用者管理筆記本,方法是使用受管理筆記本的安全強化最佳做法,建立自訂獨立虛擬私有雲,並實作執行個體排程,以最佳化支出。

後續步驟

查看一些教學課程…

延伸閱讀和影片

參考文件