在 VPC 网络中创建安全的 Vertex AI Workbench 实例


本教程适用于企业数据科学家、研究人员和网络管理员。它展示了如何在 Virtual Private Cloud (VPC) 网络中创建 Vertex AI Workbench 实例来保护实例。

VPC 网络是物理网络的虚拟版本,在 Google 的生产网络内实现它是专用网络,具有自己的专用 IP 地址、子网和网络网关。在企业中,使用 VPC 网络通过控制从其他网络和互联网访问数据和实例来保护数据和实例。

本教程中的 VPC 网络是一个独立的网络。但是,您可以将 VPC 网络从一个项目(称为宿主项目)共享到您的 Google Cloud 组织中的其他项目。如需详细了解要使用的 VPC 网络类型,请参阅单个 VPC 网络和共享 VPC

遵循网络安全最佳实践,本教程中的 VPC 网络使用 Cloud Router 路由器Cloud NAT专用 Google 访问通道通过以下方式保护实例:

  • Vertex AI Workbench 实例没有外部 IP 地址。
  • 该实例具有通过区域 Cloud Router 和 Cloud NAT 网关进行的出站互联网访问权限,因此您可以安装软件包或其他依赖项。Cloud NAT 允许出站连接和对这些连接的入站响应。它不允许来自互联网的未经请求的入站请求。
  • 该实例使用专用 Google 访问通道访问 Google API 和服务的外部 IP 地址。

本教程还介绍了如何执行以下操作:

  • 创建启动后脚本,以将 GitHub 代码库自动克隆到新创建的 Vertex AI Workbench 实例中。
  • 使用 Cloud Monitoring 监控 Vertex AI Workbench 实例。
  • 使用 Compute Engine API 自动启动和停止实例以优化费用。

VPC 网络中 Vertex AI Workbench 实例的架构图。

目标

  • 创建 VPC 网络并添加启用了专用 Google 访问通道的子网。
  • 为 VPC 网络创建 Cloud Router 路由器和 Cloud NAT。
  • 使用克隆 Google Cloud 生成式 AI GitHub 代码库的启动后脚本,在子网中创建一个 Vertex AI Workbench 实例。
  • 为实例启用 Cloud Monitoring。
  • 创建虚拟机实例时间表并将其与实例相关联。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 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 的交互式 Shell 环境,可让您通过网络浏览器管理项目和资源。
  5. 转到 Cloud Shell
  6. 在 Cloud Shell 中,将当前项目设置为您的 Google Cloud 项目 ID,并将同一项目 ID 存储在 projectid shell 变量中:
      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. 如果您不是项目所有者,请让项目所有者为您授予 Project IAM Admin (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.

创建和配置独立 VPC

  1. 创建名为 securevertex-vpc 的 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 存储桶来存储一个启动后脚本,以便您在创建新的 Vertex AI Workbench 实例时运行该脚本。

  1. 创建 Cloud Storage 存储桶:

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

    BUCKET_NAME 替换为唯一的存储桶名称。

  2. 设置 BUCKET_NAME Shell 变量并验证其输入是否正确:

    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 存储桶:

    gcloud storage cp poststartup.sh gs://BUCKET_NAME
    

创建自定义服务账号

创建 Vertex AI Workbench 实例时,我们强烈建议您清除使用 Compute Engine 默认服务账号复选框并指定自定义服务账号。如果您的组织不强制执行 iam.automaticIamGrantsForDefaultServiceAccounts 组织政策限制,则 Compute Engine 默认服务账号(以及您指定为实例用户的任何人)将被授予您的项目的 Editor 角色 (roles/editor)。如需停用此行为,请参阅停用对默认服务账号的自动角色授予功能

  1. 创建名为 workbench-sa 的自定义服务账号:

    gcloud iam service-accounts create workbench-sa \
        --display-name="workbench-sa"
    
  2. 将 Storage Object Viewer 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 User 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 页面中的实例标签页。

    转到 Vertex AI Workbench

  2. 点击  新建,然后单击高级选项

    系统会打开新建实例页面。

  3. 新建实例页面的详细信息部分中,为新实例提供以下信息,然后点击继续

    • 名称:为新实例提供名称,或接受默认值。
    • 区域:选择 us-central1
    • 可用区:选择 us-central1-a
  4. 环境部分中,提供以下内容,然后点击继续

    • 启动后脚本:点击浏览,点击存储桶名称旁边的  查看子资源,点击 poststartup.sh,然后点击选择
  5. 机器类型部分中,提供以下内容,然后点击继续

    • 安全强化型虚拟机:选中以下复选框:

      • 安全启动
      • 虚拟可信平台模块 (vTPM)
      • 完整性监控
  6. 磁盘部分中,确保选中 Google 管理的加密密钥,然后点击继续

  7. 网络部分中,提供以下内容,然后点击继续

    • 网络:选择此项目中的网络并完成以下步骤:

      1. 网络字段中,选择 securevertex-vpc

      2. 子网字段中,选择 securevertex-subnet-a

      3. 清除分配外部 IP 地址复选框。不分配外部 IP 地址可防止实例接收来自互联网或其他 VPC 网络的未经请求的通信。

      4. 选中允许代理访问复选框。

  8. IAM 和安全部分,提供以下内容,然后点击继续

    • IAM 和安全:要向单个用户授予对实例的 JupyterLab 界面的访问权限,请完成以下步骤:

      1. 选择单个用户
      2. 用户电子邮件字段中,输入单个用户账号的电子邮件地址。如果您要为其他人创建实例,则适用以下条件:
        • 您(实例创建者)无权访问实例的 JupyterLab 界面。但您仍然可以控制实例,并且可以启动、停止或删除实例。
        • 创建实例后,您需要向用户授予实例服务账号上的 Service Account User 角色 (roles/iam.serviceAccountUser)。请参阅可选:向实例用户授予 Service Account User 角色
      3. 清除使用 Compute Engine 默认服务账号复选框。此步骤非常重要,因为 Compute Engine 默认服务账号(以及您刚刚指定的单个用户)可能拥有项目的 Editor 角色 (roles/editor)。
      4. 服务账号电子邮件地址字段中,输入以下内容,并将 PROJECT_ID 替换为项目 ID:

        workbench-sa@PROJECT_ID.iam.gserviceaccount.com
        

        (这是您先前创建的自定义服务账号电子邮件地址。)此服务账号的权限有限。

        如需详细了解如何授予访问权限,请参阅管理对 Vertex AI Workbench 实例的 JupyterLab 界面的访问权限

    • 安全选项:清除以下复选框:

      • 对实例的根访问权限

      选中以下复选框:

      • nbconvertnbconvert 可让用户以其他文件类型(如 HTML、PDF 或 LaTeX)导出和下载笔记文文件。Google Cloud 生成式 AI GitHub 代码库中的某些笔记本需要此设置。

      清除以下复选框:

      • 文件下载

      除非您处于生产环境,否则请选择以下复选框:

      • 终端访问权限:这将从 JupyterLab 界面对终端进行终端访问。
  9. 系统健康状况部分中,选择环境自动升级并提供以下信息:

    • 报告中,选中以下复选框:

      • 报告系统健康状况
      • 向 Cloud Monitoring 报告自定义指标
      • 安装 Cloud Monitoring
      • 报告所需 Google 网域的 DNS 状态
  10. 点击创建,然后等待几分钟,让 Vertex AI Workbench 实例完成创建。

可选:向实例用户授予 Service Account User 角色

如果您要为其他用户创建 Vertex AI Workbench 实例,则必须向其授予 workbench-sa 自定义服务账号的 Service Account User 角色 (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 会激活一个打开 JupyterLab 链接。 只有您在创建实例时指定的单个用户才能访问此链接。

在 JupyterLab 中打开实例,并验证克隆的 Google Cloud 生成式 AI GitHub 代码库是否存在。

  1. 在 Google Cloud 控制台中,进入 Vertex AI Workbench 页面。

    转到 Vertex AI Workbench

  2. 在 Vertex AI Workbench 实例列表中,点击您创建的实例的打开 JupyterLab 链接。

    在文件夹列表中,您会看到一个 generative-ai 文件夹。此文件夹包含克隆的 GitHub 代码库。

通过 Monitoring 监控健康状况

您可以使用 Google Cloud 控制台监控 Vertex AI Workbench 实例的系统和应用指标。如需详细了解实例监控以及如何创建自定义指标,请参阅监控运行状况

  1. 在 Google Cloud 控制台中,进入 Vertex AI Workbench 页面。

    转到 Vertex AI Workbench

  2. 点击要查看其指标的 Vertex AI Workbench 实例的名称。

  3. 实例详情页面上,点击监控标签页。查看笔记本实例的 CPU 利用率网络字节。如需了解如何解读这些指标,请参阅查看资源指标

    如果您刚刚创建了实例,则不会看到任何数据。等待几分钟,然后刷新控制台标签页。

为 Vertex AI Workbench 实例创建虚拟机实例时间表

由于 Vertex AI Workbench 实例是 Compute Engine 虚拟机实例,因此您可以使用 Compute Engine API 为其创建虚拟机实例时间表。

使用虚拟机实例时间表启动和停止 Vertex AI Workbench 实例。在实例停止期间,您只需支付 Cloud Storage 费用。

您可以将实例时间表挂接到同一区域中的任何虚拟机实例,以便使用同一实例时间表来控制区域中的所有 Vertex AI Workbench 实例。

如需详细了解虚拟机实例时间表,请参阅安排虚拟机实例启动和停止

创建自定义 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 Shell 变量中:

    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. 通过运行以下命令并记下其返回的 NAME 值,确定 Vertex AI Workbench 实例的名称:

    gcloud compute instances list
    
  3. 将名称存储在 notebook_vm shell 变量中:

    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
    

如需验证实例时间表是否成功运行,您可以查看实例时间表资源政策和附加的虚拟机实例的 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 存储桶:

    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. 删除 VPC 子网:

    gcloud compute networks subnets delete securevertex-subnet-a \
        --region=us-central1 \
        --quiet 
    
  10. 删除 VPC 网络:

    gcloud compute networks delete securevertex-vpc --quiet 
    

后续步骤

- 了解 Vertex AI Workbench 实例。 - 了解如何管理对实例的访问权限。- 了解如何在服务边界内使用实例