在虛擬私有雲網路中建立安全的 Vertex AI Workbench 執行個體


本教學課程適用於企業數據資料學家、研究人員和網路管理員。說明如何透過在虛擬私有雲 (VPC) 網路中建立 Vertex AI Workbench 執行個體,確保執行個體安全無虞。

虛擬私有雲網路是實體網路的虛擬版本,建構於 Google 的正式環境網路之內。這是私有網路,有自己的私有 IP 位址、子網路和網路閘道。在企業中,虛擬私有雲網路可用於控管其他網路和網際網路對資料和執行個體的存取權,藉此保護資料和執行個體。

本教學課程中的虛擬私有雲網路是獨立網路。不過,您可以從一個專案 (稱為主專案) 將 VPC 網路提供給 Google Cloud 機構中的其他專案使用。如要進一步瞭解要使用哪種虛擬私有雲網路,請參閱「單一虛擬私有雲網路和共用虛擬私有雲」。

根據網路安全最佳做法,本教學課程中的虛擬私有雲網路會結合使用 Cloud RouterCloud NAT私人 Google 存取權,以確保執行個體安全無虞,做法如下:

  • Vertex AI Workbench 執行個體沒有外部 IP 位址。
  • 執行個體透過區域 Cloud Router 和 Cloud NAT 閘道連出網際網路,因此您可以安裝軟體套件或其他依附元件。Cloud NAT 允許傳出連線,以及這些連線的傳入回應。允許來自網際網路的未經要求傳入要求。
  • 執行個體使用 Private Google Access 存取 Google API 和服務的外部 IP 位址。

本教學課程也會說明如何執行下列操作:

  • 建立啟動後指令碼,將 GitHub 存放區自動複製到新建立的 Vertex AI Workbench 執行個體。
  • 使用 Cloud Monitoring 監控 Vertex AI Workbench 執行個體。
  • 使用 Compute Engine API 自動啟動及停止執行個體,以最佳化成本。

虛擬私有雲網路中的 Vertex AI Workbench 執行個體架構圖。

目標

  • 建立虛擬私有雲網路,並新增已啟用私人 Google 存取權的子網路。
  • 為虛擬私有雲網路建立 Cloud Router 和 Cloud NAT。
  • 在子網路中建立 Vertex AI Workbench 執行個體,並使用開機後指令碼複製 Google Cloud Generative AI GitHub 存放區。
  • 為執行個體啟用 Cloud Monitoring。
  • 建立 VM 執行個體排程,並附加至執行個體。

費用

在本文件中,您會使用 Google Cloud的下列計費元件:

如要根據預測用量估算費用,請使用 Pricing Calculator

初次使用 Google Cloud 的使用者可能符合免費試用資格。

完成本文所述工作後,您可以刪除已建立的資源,避免繼續計費。詳情請參閱清除所用資源一節。

事前準備

  1. In the Google Cloud console, go to the project selector page.

    Go to project selector

  2. Select or create a Google Cloud project.

  3. Make sure that billing is enabled for your Google Cloud project.

  4. 開啟 Cloud Shell,執行本教學課程中列出的指令。Cloud Shell 是一種互動式殼層環境,可讓您透過網路瀏覽器管理專案和資源。 Google Cloud
  5. 前往 Cloud Shell
  6. 在 Cloud Shell 中,將目前的專案設為您的 Google Cloud 專案 ID,並將相同的專案 ID 儲存到 projectid 殼層變數中:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    PROJECT_ID 替換為專案 ID。如有需要,您可以在 Google Cloud 控制台中找到專案 ID。詳情請參閱「找出專案 ID」。
  7. Enable the IAM, Compute Engine, Notebooks, Cloud Storage, and Vertex AI APIs:

    gcloud services enable iam.googleapis.com  compute.googleapis.com notebooks.googleapis.com storage.googleapis.com aiplatform.googleapis.com
  8. 如果您不是專案擁有者,請要求專案擁有者授予您專案 IAM 管理員 (roles/resourcemanager.projectIamAdmin) 角色。您必須具備這個角色,才能在下一個步驟中授予 IAM 角色。
  9. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/aiplatform.user, roles/compute.networkAdmin, roles/compute.securityAdmin, roles/compute.instanceAdmin, roles/monitoring.viewer, 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:USER_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

建立及設定獨立虛擬私有雲

  1. 建立名為 securevertex-vpc 的虛擬私有雲網路:

    gcloud compute networks create securevertex-vpc --subnet-mode=custom
    
  2. 建立名為 securevertex-subnet-a 的子網路,主要 IPv4 範圍為 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
    

    您可以為 --range 參數提供不同的值。 不過,單一筆記本的前置字串長度下限為 29。 詳情請參閱「IPv4 子網路範圍」。

  3. 建立名為 cloud-router-us-central1 的區域 Cloud Router:

    gcloud compute routers create cloud-router-us-central1 --network securevertex-vpc --region us-central1
    
  4. 建立名為 cloud-nat-us-central1 的區域 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
    

建立 Cloud Storage 值區

在本節中,您會建立 Cloud Storage bucket,用於存放啟動後指令碼,以便在建立新的 Vertex AI Workbench 執行個體時執行。

  1. 建立 Cloud Storage bucket:

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

    BUCKET_NAME 替換成不重複的值區名稱。

  2. 設定 BUCKET_NAME 殼層變數,並確認輸入正確:

    BUCKET_NAME=BUCKET_NAME
    echo $BUCKET_NAME
    

建立並上傳開機後指令碼

在本節中,您將建立啟動後指令碼,將 GitHub 存放區複製到新的 Vertex AI Workbench 執行個體。

  1. 如要建立指令碼,請使用文字編輯器 (例如 vimnano) 建立 poststartup.sh 檔案。您必須在檔案路徑前加上 sudo,才能取得檔案寫入權限,例如:

    sudo vim poststartup.sh
    
  2. 將下列 Shell 指令碼貼到檔案中:

    #! /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. 按照下列方式儲存檔案:

    • 如果使用 vim,請按下 Esc 鍵,然後輸入 :wq 儲存檔案並結束。
    • 如果使用 nano,請輸入 Control+O 並按下 Enter 儲存檔案,然後輸入 Control+X 結束。
  4. 將檔案上傳至 Cloud Storage bucket:

    gcloud storage cp poststartup.sh gs://BUCKET_NAME
    

建立自訂服務帳戶

建立 Vertex AI Workbench 執行個體時,強烈建議您取消勾選「使用 Compute Engine 預設服務帳戶」核取方塊,並指定自訂服務帳戶。如果貴機構未強制執行 iam.automaticIamGrantsForDefaultServiceAccounts 組織政策限制,系統會將專案的編輯者角色 (roles/editor) 授予 Compute Engine 預設服務帳戶 (以及您指定為執行個體使用者的任何人)。如要關閉這項行為,請參閱「停用預設服務帳戶的自動角色授予功能」。

  1. 建立名為 workbench-sa 的自訂服務帳戶:

    gcloud iam service-accounts create workbench-sa \
        --display-name="workbench-sa"
    
  2. 將 Storage 物件檢視者 IAM 角色指派給服務帳戶:

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
        --role="roles/storage.objectViewer"
    
  3. 將 Monitoring Metric Writer IAM 角色指派給服務帳戶:

    gcloud projects add-iam-policy-binding $projectid \
        --member="serviceAccount:workbench-sa@$projectid.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
    
  4. 將 Vertex AI 使用者 IAM 角色指派給服務帳戶:

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

建立 Vertex AI Workbench 執行個體

在本節中,您將建立 Vertex AI Workbench 執行個體。建立執行個體時,系統會自動執行您建立的開機後指令碼。

  1. 前往 Google Cloud 控制台的「Vertex AI Workbench」頁面,然後點選「Instances」分頁標籤。

    前往 Vertex AI Workbench

  2. 依序按一下「建立新頻道」和「進階選項」

    「New instance」(新增執行個體) 頁面隨即開啟。

  3. 在「New instance」(新增執行個體) 頁面的「Details」(詳細資料) 區段中,為新執行個體提供下列資訊,然後按一下「Continue」(繼續)

    • 名稱:為新執行個體命名,或接受預設名稱。
    • 地區:選取 us-central1
    • 區域:選取 us-central1-a
  4. 在「環境」部分中,提供下列資訊,然後按一下「繼續」

    • 開機後指令碼:按一下「瀏覽」,然後依序按一下值區名稱旁的「查看子資源」poststartup.sh 和「選取」
  5. 在「Machine type」(機器類型) 區段中,提供下列資訊,然後按一下「Continue」(繼續)

    • 受防護的 VM:勾選下列核取方塊:

      • 安全啟動
      • 虛擬信任平台模組 (vTPM)
      • 完整性監控
  6. 在「Disks」(磁碟) 區段中,確認已選取 Google-managed encryption key,然後按一下「Continue」(繼續)

  7. 在「Networking」(網路) 專區中,提供下列資訊,然後按一下「Continue」(繼續)

    • 網路:選取「這項專案中的網路」,然後完成下列步驟:

      1. 在「Network」(網路) 欄位中,選取「securevertex-vpc」

      2. 在「Subnetwork」(子網路) 欄位中,選取「securevertex-subnet-a」

      3. 取消勾選「指派外部 IP 位址」核取方塊。不指派外部 IP 位址可防止執行個體接收來自網際網路或其他虛擬私有雲網路的未經要求通訊。

      4. 勾選「允許 Proxy 存取」核取方塊。

  8. 在「IAM and security」(IAM 和安全性) 部分中,提供下列資訊,然後按一下「Continue」(繼續)

    • IAM 和安全性:如要將執行個體 JupyterLab 介面的存取權授予單一使用者,請完成下列步驟:

      1. 選取「單一使用者」
      2. 在「使用者電子郵件」欄位中,輸入單一使用者帳戶的電子郵件地址。如果為他人建立執行個體,請遵守下列條件:
        • 您 (執行個體建立者) 無法存取執行個體的 JupyterLab 介面。但您仍可控制執行個體,並啟動、停止或刪除執行個體。
        • 建立執行個體後,您必須將執行個體服務帳戶的服務帳戶使用者角色 (roles/iam.serviceAccountUser) 授予使用者。請參閱「選用:將服務帳戶使用者角色授予執行個體使用者」。
      3. 取消勾選「使用 Compute Engine 的預設服務帳戶」核取方塊。 這個步驟非常重要,因為 Compute Engine 預設服務帳戶 (以及您剛才指定的單一使用者) 可能具有專案的「編輯者」角色 (roles/editor)。
      4. 在「Service account email」(服務帳戶電子郵件地址) 欄位中輸入下列內容,並將 PROJECT_ID 替換為專案 ID:

        workbench-sa@PROJECT_ID.iam.gserviceaccount.com
        

        (這是您先前建立的自訂服務帳戶電子郵件地址)。這個服務帳戶的權限有限。

        如要進一步瞭解如何授予存取權,請參閱「管理 Vertex AI Workbench 執行個體 JupyterLab 介面的存取權」。

    • 安全性選項:取消勾選下列核取方塊:

      • 執行個體的根目錄存取權

      勾選下列核取方塊:

      • nbconvertnbconvert 可讓使用者匯出筆記本檔案,並下載為其他檔案類型,例如 HTML、PDF 或 LaTeX。Google Cloud Generative AI GitHub 存放區中的部分筆記本需要這項設定。

      取消勾選下列核取方塊:

      • 下載檔案

      除非您位於正式環境,否則請選取下列核取方塊:

      • 終端機存取權:從 JupyterLab 使用者介面內啟用執行個體的終端機存取權。
  9. 在「系統健康狀態」部分,選取「環境自動升級」,然後提供下列資訊:

    • 在「報表」中,勾選下列核取方塊:

      • 回報系統健康狀態
      • 向 Cloud Monitoring 回報自訂指標
      • 安裝 Cloud Monitoring
      • 回報所需 Google 網域的 DNS 狀態
  10. 按一下「建立」,然後等待幾分鐘,讓系統建立 Vertex AI Workbench 執行個體。

選用:將服務帳戶使用者角色授予執行個體使用者

如果您要為其他使用者建立 Vertex AI Workbench 執行個體,請務必在workbench-sa自訂服務帳戶上,授予他們服務帳戶使用者角色 (roles/iam.serviceAccountUser),方法如下:

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

替換下列值:

  • PROJECT_ID:專案 ID
  • USER_EMAIL:使用者的電子郵件地址

確認已建立 Vertex AI Workbench 執行個體

Vertex AI Workbench 會根據您指定的屬性建立 Vertex AI Workbench 執行個體,並自動啟動該執行個體。

執行個體可供使用時,Vertex AI Workbench 會啟用「Open JupyterLab」(開啟 JupyterLab) 連結。只有在建立執行個體時指定的使用者,才能存取這個連結。

在 JupyterLab 中開啟執行個體,確認複製的 Google Cloud 生成式 AI GitHub 存放區是否存在。

  1. 前往 Google Cloud 控制台的「Vertex AI Workbench」頁面。

    前往 Vertex AI Workbench

  2. 在 Vertex AI Workbench 執行個體清單中,點按您建立的執行個體「Open JupyterLab」連結。

    資料夾清單中會顯示「generative-ai」資料夾。這個資料夾包含複製的 GitHub 存放區。

透過 Monitoring 監控健康狀態

您可以使用Google Cloud 控制台,監控 Vertex AI Workbench 執行個體的系統和應用程式指標。如要進一步瞭解執行個體監控和如何建立自訂指標,請參閱「監控健康狀態」。

  1. 前往 Google Cloud 控制台的「Vertex AI Workbench」頁面。

    前往 Vertex AI Workbench

  2. 按一下要查看指標的 Vertex AI Workbench 執行個體名稱。

  3. 在「Instance details」(執行個體詳細資料) 頁面上,按一下「Monitoring」(監控) 分頁標籤。查看筆記本執行個體的 CPU 使用率網路位元組。如要瞭解如何解讀這些指標,請參閱「查看資源指標」一文。

    如果您剛建立執行個體,不會立即看到任何資料。請稍候幾分鐘,然後重新整理控制台分頁。

為 Vertex AI Workbench 執行個體建立 VM 執行個體排程

由於 Vertex AI Workbench 執行個體是 Compute Engine VM 執行個體,因此您可以使用 Compute Engine API 為其建立 VM 執行個體排程。

使用 VM 執行個體排程啟動及停止 Vertex AI Workbench 執行個體。在執行個體停止運作的時段,您只需支付 Cloud Storage 費用。

您可以將執行個體排程附加至相同區域中的任何 VM 執行個體,因此可以使用相同的執行個體排程,控管該區域中的所有 Vertex AI Workbench 執行個體。

如要進一步瞭解 VM 執行個體排程,請參閱「排定 VM 執行個體的啟動與停止時間」。

建立自訂 IAM 角色

為確保安全,建議您建立僅具備下列權限的自訂 IAM 角色,並指派給 Compute Engine 預設服務帳戶:

  • compute.instances.start
  • compute.instances.stop
  1. 在 Cloud Shell 中,建立名為 Vm_Scheduler 的自訂角色,並加入必要權限:

    gcloud iam roles create Vm_Scheduler \
        --project=$projectid \
        --title=vm-scheduler-notebooks \
        --permissions="compute.instances.start,compute.instances.stop" --stage=ga 
    
  2. 描述自訂角色:

    gcloud iam roles describe Vm_Scheduler \
    --project=$projectid
    

將角色指派給 Compute Engine 預設服務帳戶

如要授予 Compute Engine 預設服務帳戶啟動及停止 Vertex AI Workbench 執行個體的權限,請為該帳戶指派 Vm_Scheduler 自訂角色。

專案的 Compute Engine 預設服務帳戶具有下列電子郵件地址:PROJECT_NUMBER-compute@developer.gserviceaccount.com,其中 PROJECT_NUMBER 是專案編號。

  1. 找出專案編號,並儲存在 project_number 殼層變數中:

    project_number=$(gcloud projects describe $projectid --format 'get(projectNumber)')
    echo $project_number
    
  2. 將自訂角色指派給預設服務帳戶:

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

建立並附加時間表

如要建立執行個體排程,在早上 7 點啟動 Vertex AI Workbench 執行個體,並在下午 6 點停止執行個體,請按照下列步驟操作:

  1. 建立名為 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
    

    TIME_ZONE 替換為這個執行個體排程的 IANA 時區 (以位置資訊為準),例如 America/Chicago。如未填寫此欄位,則預設值為 UTC。詳情請參閱時區

  2. 執行下列指令,找出 Vertex AI Workbench 執行個體的名稱,並記下傳回的 NAME 值:

    gcloud compute instances list
    
  3. 將名稱儲存在 notebook_vm 殼層變數中:

    notebook_vm=NOTEBOOK_VM_NAME
    echo $notebook_vm
    

    NOTEBOOK_VM_NAME 替換為您的 Vertex AI Workbench 執行個體名稱。

  4. 將執行個體排程附加至 Vertex AI Workbench 執行個體:

    gcloud compute instances add-resource-policies $notebook_vm \
        --resource-policies=optimize-notebooks \
        --zone=us-central1-a
    
  5. 描述執行個體排程:

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

如要確認執行個體排程是否順利執行,請檢查執行個體排程資源政策和附加的 VM 執行個體的 Compute Engine 稽核記錄。每項作業排定時間後,最多可能需要等待 15 分鐘。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取本教學課程所用資源的費用,請刪除含有相關資源的專案,或者保留專案但刪除個別資源。

您可以在 Cloud Shell 中執行下列指令,刪除專案中的個別資源:

  1. 從執行個體中移除時間表:

    gcloud compute instances remove-resource-policies $notebook_vm \
        --resource-policies=optimize-notebooks \
        --zone=us-central1-a --quiet
    
  2. 刪除執行個體排程:

    gcloud compute resource-policies delete optimize-notebooks --region=us-central1 --quiet
    
  3. 刪除 Vm_Scheduler 角色:

    gcloud iam roles delete Vm_Scheduler --project=$projectid
    
  4. 刪除 Vertex AI Workbench 執行個體:

    gcloud workbench instances delete $notebook_vm \
        --location=us-central1-a \
        --quiet
    
  5. 刪除服務帳戶:

    gcloud iam service-accounts delete workbench-sa@$projectid.iam.gserviceaccount.com --quiet 
    
  6. 刪除 Cloud Storage bucket:

    gcloud storage rm -r gs://BUCKET_NAME
    
  7. 刪除區域 Cloud NAT 閘道:

    gcloud compute routers nats delete cloud-nat-us-central1 \
        --region=us-central1 \
        --router=cloud-router-us-central1 \
        --quiet
    
  8. 刪除區域 Cloud Router:

    gcloud compute routers delete cloud-router-us-central1 \
        --region=us-central1 \
        --quiet
    
  9. 刪除虛擬私有雲子網路:

    gcloud compute networks subnets delete securevertex-subnet-a \
        --region=us-central1 \
        --quiet 
    
  10. 刪除虛擬私有雲網路:

    gcloud compute networks delete securevertex-vpc --quiet 
    

後續步驟

- 瞭解 Vertex AI Workbench 執行個體。 - 瞭解如何管理執行個體的存取權。 - 瞭解如何在服務範圍內使用執行個體