Vertex AI で VPC Service Controls を使用する

VPC Service Controls を使用することで、Vertex AI からのデータ漏洩のリスクを軽減できます。VPC Service Controls を使用して、指定したリソースとデータを保護するサービス境界を作成します。たとえば、VPC Service Controls を使用して Vertex AI を保護する場合、次のアーティファクトはサービス境界を離れることはできません。

  • AutoML モデルまたはカスタムモデルのトレーニング データ
  • 作成したモデル
  • Neural Architecture Search を使用して検索したモデル
  • オンライン推論のリクエスト
  • バッチ推論リクエストの結果
  • 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 インスタンスへのすべてのパブリック インターネット アクセスが自動的にブロックされます。そのため、許可リストに含まれていないユーザーが Vertex AI サービスにプログラムでアクセスしようとしたり、Google Google Cloud コンソールを使用しようとしたりすると、アクセスが拒否されます。

境界外の承認済みソース(企業オフィスのユーザーなど)のアクセスを復元するには、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 エンドポイント名を柔軟に定義することもできます。

ベスト プラクティスとして、Google API 用の Private Service Connect または限定公開の Google アクセスで制限付き仮想 IP(VIP)を使用すると、 Google Cloud サービスへのリクエストにプライベート ネットワーク ルートが提供されます。リクエストがネットワーク経由で送信されることはありません。制限付き VIP は、オンプレミス ネットワークと VPC ネットワークの考慮事項を必要とする、VPC Service Controls で保護できるすべての API をサポートしています。いくつかの例を次に示します。

プライベート サービス アクセスによる API アクセスの制御

プライベート サービス アクセスでデプロイされた次の Vertex AI API は、VPC Service Controls で保護された環境に実装する場合、追加のネットワーク構成が必要です。

  • ベクトル検索(インデックス クエリ)
  • カスタム トレーニング(データプレーン)
  • 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 を介した HA VPN を使用することです。

  1. HA VPN とともにサービス VPC ネットワークをコンシューマー VPC ネットワークにデプロイします。
  2. サービス VPC ネットワークに Google マネージド サービスをデプロイします。
  3. ピアリングの VPC Service Controls を有効にします。
  4. マネージド サービスでオンプレミスへの到達可能性が必要な場合は、Cloud Router からプライベート サービス アクセス サブネットをカスタム ルート アドバタイズとしてアドバタイズします。
  5. カスタムルートをエクスポート オプションを使用して、サービス ネットワーキング VPC ネットワーク ピアリングを更新します。

生成 AI チューニング パイプラインに対する VPC Service Controls のサポート

VPC Service Controls は、次のモデルのチューニング パイプラインでサポートされています。

  • text-bison for PaLM 2
  • BERT
  • T5
  • textembedding-gecko ファミリーのモデル。

Vertex AI Pipelines で VPC Service Controls を使用する

サービス境界は、Vertex AI からインターネット上のサードパーティの API やサービスへのアクセスをブロックします。Vertex AI Pipelines で使用するために Google Cloud パイプライン コンポーネントを使用している場合や、独自のカスタム パイプライン コンポーネントを作成している場合は、パブリック Python Package Index(PyPI)レジストリから PyPI 依存関係をインストールできません。代わりに、次のいずれかを行う必要があります。

カスタム コンテナを使用する

本番環境ソフトウェアのベスト プラクティスとして、コンポーネント作成者はコンテナ化された Python コンポーネントを使用し、依存関係をコンテナ イメージにビルドする必要があります。これにより、パイプラインの実行中にライブ インストールを行う必要がなくなります。その方法の 1 つは次のとおりです。

  1. Kubeflow Pipelines SDK とその他のパッケージがプリインストールされた独自のコンテナ イメージを構築します。たとえば、イメージのベースレイヤとして us-docker.pkg.dev/vertex-ai/training/tf-cpu.2-17:latest を使用し、コンテナのビルド時にパッケージをインストールする追加レイヤを追加できます。
  2. コンポーネント定義コードを更新して、base_image パスと install_kfp_package フラグを False に設定します。このフラグは、Kubeflow Pipelines SDK パッケージがイメージにすでにインストールされているため、KFP コンパイラに pip install kfp コマンドをコンテナ コマンドラインに挿入しないように指示します。次に例を示します。

    @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 環境を構成する

1 つ以上の 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)

PSC インターフェースで VPC Service Controls を使用する

限定公開サービス接続インターフェースでデプロイされた次の 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 管理環境から直接送信されます。

  • VPC Service Controls を使用する場合: プロジェクトが VPC Service Controls(VPC-SC)境界内に含まれている場合、Vertex AI をホストする Google マネージド環境のデフォルトのインターネット アクセスはブロックされます。この制限は、データ流出を防ぐためのセキュリティ対策です。このシナリオで Vertex AI が公共のインターネットにアクセスできるようにするには、VPC ネットワークを介してトラフィックをルーティングする安全な下り(外向き)パスを明示的に構成する必要があります。

推奨される方法は次のとおりです。

  1. RFC 1918 サブネット内の VPC 境界内にプロキシ サーバーをデプロイする。
  2. プロキシ VM がインターネットにアクセスできるように 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
    • オンライン推論
    • ベクトル検索(インデックスの作成)
    • ベクトル検索(インデックス クエリ)
    • カスタム トレーニング(コントロール プレーン)
    • カスタム トレーニング(データプレーン)
    • Vertex AI Pipelines
    • プライベート オンライン推論エンドポイント
    • Colab Enterprise
    • Vertex AI Agent Engine
  • Notebooks API は、次のサービスをサポートしています。
    • Vertex AI Workbench

制限事項

VPC Service Controls を使用する場合は、次の制限が適用されます。

  • データをラベル付けする場合は、ラベラーの IP アドレスをアクセスレベルに追加する必要があります。
  • Google Cloud パイプライン コンポーネントの場合、コンポーネントは、すべての要件についてベースイメージをチェックするコンテナを起動します。KFP パッケージと packages_to_install 引数で指定されているパッケージは、コンテナの要件です。指定された要件がベースイメージ(Google 提供のイメージまたはカスタム イメージ)にまだ存在しない場合、コンポーネントは 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 を使用する場合は、*.notebooks.googleusercontent.com のリクエストを 199.36.153.4/30(restricted.googleapis.com)ではなく、サブネット 199.36.153.8/30(private.googleapis.com)に送信するように DNS ピアリングを構成する必要があります。
  • Vertex AI Inference で VPC Service Controls を使用する場合は、プロジェクトをサービス境界に追加した後にエンドポイントを作成する必要があります。サービス境界に含まれていないプロジェクトでエンドポイントが作成され、その後そのプロジェクトがサービス境界に追加された場合、そのエンドポイントにモデルをデプロイしようとすると失敗します。エンドポイントが共有パブリック エンドポイントの場合、エンドポイントにリクエストを送信しても失敗します。同様に、エンドポイントがサービス境界の一部であるプロジェクトで作成され、その後プロジェクトが削除された場合、モデルをエンドポイントにデプロイしようとすると失敗します。

次のステップ