搭配 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 權限才能使用。Private Service Connect 和 Private Google Access 等功能可透過混合式網路架構進行私密通訊,但無法完全避免透過公開網際網路存取 Vertex AI API。

如要精細控管 API 存取權,並明確限制公開網際網路曝光,就必須實作 VPC Service Controls。管理員可透過這個安全層定義及強制執行存取政策,並選擇啟用 Google API 的公開或私人連線,以滿足機構需求。

私人存取權

如要將公開 Google API 限制為私人存取,機構可以搭配使用 VPC Service Controls 與 Private Service Connect Google API (VPC Service Controls 套裝組合) 或私人 Google 存取權。在混合式網路和 Google Cloud中部署時,這兩種選項都能從內部部署環境私下存取 Google API。不過,Private Service Connect 也提供彈性,可定義自訂 IP 位址和 DNS 端點名稱。

最佳做法是搭配使用受限制的虛擬 IP (VIP) 與 Private Service Connect Google API 或 Private Google Access,為對 Google Cloud 服務的要求提供私人網路路徑,而不將要求公開至網際網路。受限 VIP 支援 VPC Service Controls 可保護的所有 API,但需要考量地端和 VPC 網路。下面是部分範例:

透過私人服務存取權控管 API 存取權

透過私有服務存取權部署的下列 Vertex AI API,在受 VPC Service Controls 保護的環境中實作時,需要額外的網路設定:

  • Vector Search (索引查詢)
  • 自訂訓練 (資料層)
  • Vertex AI Pipelines
  • 私人的線上預測端點

舉例來說,Vertex AI Pipelines 是由 Google 管理 (生產者) 的服務,部署在單一租戶專案和虛擬私有雲網路中,可根據消費者需求調整支援的服務。供應商和消費者網路之間的通訊是透過虛擬私有雲網路對等互連建立,但網際網路輸出除外,這類輸出會透過供應商網路轉送。

生產端網路中存在預設路徑,可允許網際網路輸出,並無限制地存取 Google API。如要更新供應商網路以支援受限 VIP,必須為對等互連啟用 VPC Service Controls,這項操作會在服務網路供應商網路中部署的所有支援服務上執行下列動作:

  • 移除 IPv4 預設路徑 (目的地 0.0.0.0/0,下一個躍點為預設網際網路閘道)。
  • 建立 Cloud DNS 代管不公開區域,並授權服務供應商虛擬私有雲網路使用這些區域。這些區域包括 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. 除了高可用性 VPN 之外,還要在服務虛擬私有雲網路中部署服務,並連線至消費者虛擬私有雲網路。
  2. 在服務虛擬私有雲網路中部署 Google 代管的服務。
  3. 啟用對等互連的 VPC Service Controls
  4. 如果代管服務需要可從地端存取,請從 Cloud Router 將私人服務存取子網路通告為自訂路徑通告
  5. 使用匯出自訂路徑選項,更新服務網路虛擬私有雲網路對等互連。

建立服務範圍

如要瞭解如何建立服務範圍,請參閱 VPC Service Controls 說明文件中的「建立服務範圍」。

在範圍中新增受限制的服務

建立服務安全防護範圍時,建議您納入所有受限服務,這是安全方面的最佳做法。這項全面做法有助於盡量減少潛在安全漏洞和未經授權的存取活動。不過,貴機構可能會有特定需求,著重於保護 Vertex AI 和相關聯的 API。在這種情況下,您可以彈性選取並只納入作業所需的特定 Vertex AI API。

您可以納入服務範圍的 Vertex AI API 包括:

  • Vertex AI API 支援下列服務和功能:
    • 批次推論
    • 資料集
    • Vertex AI 特徵儲存庫 (Bigtable 線上服務)
    • Vertex AI 特徵儲存庫 (最佳化線上服務)
    • 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 支援生成式 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. 在專案中以虛擬私有雲模式建立 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 時,請注意下列限制:

  • 如要進行資料標註,請將標註者的 IP 位址加入存取層級
  • 對於 Google Cloud Pipeline 元件,元件會啟動容器,檢查基本映像檔是否符合所有需求。KFP 套件和 packages_to_install 引數中列出的任何套件,都是容器的必要條件。如果基本映像檔 (無論是提供的還是自訂的) 中沒有任何指定需求,這個元件會嘗試從 Python Package Index (PyPI) 下載。由於服務安全防護範圍會封鎖從 Vertex AI 存取網際網路上第三方 API 和服務的連線,因此下載作業會失敗並顯示 Connection to pypi.org timed out。如要瞭解如何避免這個錯誤,請參閱搭配 Vertex AI Pipelines 使用 VPC Service Controls
  • 在 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)。
  • 搭配 Vertex AI 推論使用 VPC Service Controls 時,必須在專案新增至服務範圍後,才能建立端點。如果端點是在不屬於服務範圍的專案中建立,且該專案隨後新增至服務範圍,則嘗試將模型部署至該端點會失敗。如果端點是共用公開端點,傳送要求至該端點也會失敗。同樣地,如果端點是在屬於服務安全防護範圍的專案中建立,之後專案遭到移除,嘗試將模型部署至端點也會失敗。

後續步驟