使用 Vertex AI 的 VPC Service Controls

VPC Service Controls 可帮助您降低 Vertex AI 中发生数据渗漏的风险。使用 VPC Service Controls 创建一个服务边界,用于保护您指定的资源和数据。例如,当您使用 VPC Service Controls 保护 Vertex AI 时,以下工件无法离开服务边界:

  • AutoML 模型或自定义模型的训练数据
  • 您创建的模型
  • 您使用神经架构搜索来搜索的模型
  • 在线推理请求
  • 批量推理请求的结果
  • Gemini 模型

控制对 Google API 的访问权限

从本地和多云环境访问 Vertex AI 中所述,Vertex AI API 包含一系列访问选项,包括公共互联网、Google API 的 Private Service Connect 和专用 Google 访问通道。

公开访问

默认情况下,这些公共 API 可从互联网访问;不过,使用时需要 IAM 权限。虽然 Google API 的 Private Service Connect 和专用 Google 访问通道等功能有助于通过混合网络架构实现私密通信,但它们并不能消除 Vertex AI API 的公共互联网可访问性。

为了对 API 访问权限进行精细控制并明确限制其对公共互联网的公开范围,实施 VPC Service Controls 至关重要。当您建立 VPC Service Controls (VPC-SC) 边界并将 Vertex AI API 纳入其受保护的服务中时,系统会自动阻止对 Vertex AI 实例的所有公共互联网访问。因此,尝试以编程方式或使用 Google Google Cloud 控制台访问 Vertex AI 服务的用户都会被拒绝访问,除非他们已添加到许可名单中。

如需恢复边界外授权来源(例如公司办公室中的用户)的访问权限,请参阅允许从 VPC Service Controls 边界外访问受保护资源的公共端点,了解部署说明。

专用访问通道

如果组织需要将公开 Google API 限制为仅可进行私密访问,则可以将 VPC Service Controls 与 Google API 的 Private Service Connect(VPC Service Controls 软件包)或专用 Google 访问通道结合使用。当部署在混合网络中且位于 Google Cloud内时,这两种选项都支持从本地私密访问 Google API。不过,Google API 的 Private Service Connect 还可灵活地定义自定义 IP 地址和 DNS 端点名称。

最佳做法是将受限虚拟 IP (VIP) 与 Google API 的 Private Service Connect 或专用 Google 访问通道搭配使用,以便为向 Google Cloud 服务发出的请求提供专用网络路由,而无需将请求公开给互联网。受限 VIP 支持 VPC Service Controls 可以保护的所有 API,这些 API 需要考虑本地网络和 VPC 网络。以下是一些示例:

通过专用服务访问通道控制 API 访问权限

以下通过专用服务访问通道部署的 Vertex AI API 在受 VPC Service Controls 保护的环境中实现时,需要进行额外的网络配置:

  • Vector Search(索引查询)
  • 自定义训练(数据平面)
  • Vertex AI Pipelines
  • 专用在线预测端点

例如,Vertex AI Pipelines 是一种 Google 托管式(提供方)服务,部署在单租户项目和 VPC 网络中,能够根据使用方要求扩缩支持的服务。通过 VPC 网络对等互连建立了提供方网络和使用方网络之间的通信,但互联网出口除外,互联网出口通过提供方网络进行路由。

在提供方网络中,除了可不受限制地访问 Google API 之外,还存在允许互联网出站的默认路由。如需更新提供方网络以支持受限 VIP,需要为对等互连启用 VPC Service Controls,这会对部署在服务联网提供方网络中的所有受支持的服务执行以下操作:

  • 移除 IPv4 默认路由(目的地为 0.0.0.0/0,下一个跃点为默认互联网网关)。
  • 创建 Cloud DNS 托管式专用区域,并针对服务提供方 VPC 网络为这些区域授权。这些区域包括 googleapis.compkg.devgcr.io 以及与 VPC Service Controls 兼容的 Google API 和服务的其他必要网域或主机名。
  • 记录数据时,区域中的所有主机名都会解析为 199.36.153.4199.36.153.5199.36.153.6199.36.153.7

如需在不影响现有 Google 管理服务的情况下从提供方网络中移除默认路由,另一种方法是使用通过 Cloud Interconnect 实现的高可用性 VPN,其中包含以下步骤:

  1. 部署一个服务 VPC 网络,并一同部署一条连接到使用方 VPC 网络的高可用性 VPN。
  2. 在服务 VPC 网络中部署 Google 托管式服务。
  3. 为对等互连启用 VPC Service Controls
  4. 如果托管式服务需要本地可达性,请从 Cloud Router 将专用服务访问通道子网通告为自定义路由通告
  5. 使用导出自定义路由选项更新服务联网 VPC 网络对等互连。

VPC Service Controls 对生成式 AI 调整流水线的支持

以下模型的调优流水线中提供 VPC Service Controls 支持:

  • text-bison for PaLM 2
  • BERT
  • T5
  • textembedding-gecko 系列模型。

将 VPC Service Controls 与 Vertex AI Pipelines 搭配使用

服务边界会阻止 Vertex AI 访问互联网上的第三方 API 和服务。如果您使用Google Cloud 流水线组件或创建自己的自定义流水线组件以搭配 Vertex AI Pipelines 使用,则无法从公共 Python 软件包索引 (PyPI) 注册表安装 PyPI 依赖项。您必须改为执行以下操作之一:

使用自定义容器

作为生产软件的最佳实践,组件作者应使用容器化的 Python 组件,并将依赖项构建到其容器映像中,这样在流水线运行期间就不需要进行实时安装。其中一种方式如下所示:

  1. 构建自己的容器映像,其中预安装了 Kubeflow Pipelines SDK 和其他软件包。例如,您可以使用 us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17:latest 作为映像的基础层,并添加一个额外的层,以便在容器构建时安装软件包。
  2. 更新组件定义代码,将 base_image 路径和 install_kfp_package 标志设置为 False。此标志指示 KFP 编译器不要将 pip install kfp 命令注入到容器命令行中,因为 Kubeflow Pipelines SDK 软件包已安装在映像中。例如:

    @component(
        base_image='gcr.io/deeplearning-platform-release/tf-cpu.2-17',
        install_kfp_package=False,
    )
    def my_component(...):
        ...
    

从 Artifact Registry 代码库安装软件包

或者,您也可以在项目中创建 Artifact Registry 代码库,在其中存储 Python 软件包,并按照本部分中的说明配置 Vertex AI 环境以从中进行安装。如需了解详情,请参阅管理 Python 软件包

配置角色和权限

  1. Vertex AI 环境的服务账号必须具有 iam.serviceAccountUser 角色。
  2. 如果您从项目网络中的代码库安装自定义 PyPI 软件包,并且此代码库没有公共 IP 地址,请执行以下操作:
    1. 向环境的服务账号分配访问相应代码库的权限。
    2. 确保在项目中配置了与此代码库的连接。

创建代码库

  1. 在您的项目中以 VPC 模式创建 Artifact Registry 代码库
  2. 将所需的 Python 软件包存储在代码库中。

配置 Vertex AI 环境以从代码库安装

如需从一个或多个 Artifact Registry 代码库安装自定义 PyPI 软件包,请向 @dsl.component 发出类似于以下内容的调用:

@dsl.component(packages_to_install=["tensorflow"],
pip_index_urls=['http://myprivaterepo.com/simple', 'http://pypi.org/simple'],)
def hello_world(text: str) -> str:
    import my_package
    import tensorflow

    return my_package.hello_world(text)

将 VPC Service Controls 与 PSC 接口搭配使用

以下通过 Private Service Connect 接口部署的 Vertex AI API 在受 VPC Service Controls 保护的环境中实现时,需要进行额外的网络配置:

  • 自定义训练(数据平面)
  • Vertex AI Pipelines
  • 专用在线推理端点
  • Vertex AI Agent Engine

Vertex AI 提供方服务能否访问公共互联网,取决于您项目的安全配置,具体而言是您是否使用了 VPC Service Controls:

  • 不使用 VPC Service Controls:托管 Vertex AI 的 Google 管理的租户会保留其默认的互联网访问权限。此出站流量直接从运行着提供方服务的、安全的 Google 托管式环境中发出。 Vertex AI Agent Engine 是此行为的例外情况,它不提供互联网出站流量。您需要部署一个具有 RFC 1918 地址的代理虚拟机,以实现互联网出站流量。

  • 使用 VPC Service Controls:当您的项目包含在 VPC Service Controls (VPC-SC) 边界内时,托管 Vertex AI 的 Google 托管式环境的默认互联网访问权限会被阻止。此限制是一项旨在防止数据渗漏的安全措施。如需在此场景中允许 Vertex AI 访问公共互联网,您必须明确配置一条安全的出站流量路径,以通过您的 VPC 网络路由流量。

推荐的方法包括:

  1. 在 RFC 1918 子网中,于 VPC 边界内部署代理服务器。
  2. 创建 Cloud NAT 网关,以允许代理虚拟机访问互联网。
  3. 在运行时环境中定义代理服务器(IP 地址或 FQDN)。

执行此任务时,没有规定或首选的网络代理。您可以使用任何合适的解决方案。例如:Squid 代理HAProxyEnvoyTinyProxy

服务边界创建

如需大致了解如何创建服务边界,请参阅 VPC Service Controls 文档中的创建服务边界

向边界添加受限服务

在建立服务边界时,我们建议您将所有受限服务都纳入其中,这是安全最佳实践。这种全面的方法有助于最大限度地减少潜在的漏洞和未经授权的访问。不过,在某些情况下,您的组织可能会有特定的要求,侧重于保护 Vertex AI 及其关联的 API。在这种情况下,您可以灵活地选择并仅包含对您的运营至关重要的特定 Vertex AI API。

您可以纳入服务边界的 Vertex AI API 包括:

  • Vertex AI API 支持以下服务和功能:
    • 批量推理
    • 数据集
    • Vertex AI Feature Store(Bigtable 在线传送)
    • Vertex AI Feature Store(优化在线传送)
    • Vertex AI 上的生成式 AI (Gemini)
    • Vertex AI Model Registry
    • 在线推理
    • Vector Search(索引创建)
    • Vector Search(索引查询)
    • 自定义训练(控制平面)
    • 自定义训练(数据平面)
    • Vertex AI Pipelines
    • 专用在线推理端点
    • Colab Enterprise
    • Vertex AI Agent Engine
  • Notebooks API 支持以下服务:
    • Vertex AI Workbench

限制

使用 VPC Service Controls 时,存在以下限制:

  • 对于数据标签,您必须将标签添加者的 IP 地址添加到访问权限级别
  • 对于 Google Cloud 流水线组件,组件会启动检查其基础映像是否满足所有要求的容器。KFP 软件包以及 packages_to_install 参数中列出的所有软件包都是容器需要满足的要求。如果基础映像(无论是提供的映像还是自定义映像)中尚未包含任何指定要求,则该组件会尝试从 Python Package Index (PyPI) 下载这些要求。由于服务边界会阻止 Vertex AI 访问互联网上的第三方 API 和服务,因此下载失败,并显示 Connection to pypi.org timed out。如需了解如何避免此错误,请参阅将 VPC Service Controls 与 Vertex AI Pipelines 搭配使用
  • 在 Vertex AI Workbench 中将 VPC Service Controls 与自定义内核搭配使用时,您必须改为配置 DNS 对等互连以将对 *.notebooks.googleusercontent.com 的请求发送到子网 199.36.153.8/30 (private.googleapis.com),而不是 199.36.153.4/30 (restricted.googleapis.com)。
  • 将 VPC Service Controls 与 Vertex AI Inference 搭配使用时,必须在将项目添加到服务边界后创建端点。如果在不属于服务边界的项目中创建了端点,之后又将该项目添加到服务边界,那么尝试向该端点部署模型的操作将会失败。如果端点是共享公共端点,那么向该端点发送请求也会失败。同样,如果端点是在属于服务边界的项目中创建的,但之后该项目被移除,那么尝试将模型部署到该端点也会失败。
  • 将 VPC Service Controls 与 Vertex AI Agent Engine 搭配使用时,您必须先将项目纳入服务边界,然后才能部署代理。如果代理在项目添加到边界之前部署,则该代理不会受到 VPC Service Controls 的保护,并且会继续有权访问公共互联网。

后续步骤