リファレンス アーキテクチャ
次のリファレンス アーキテクチャでは、サービス プロジェクト ph-fm-svc-project
(基盤モデル サービス プロジェクト)に Gemini モデルを使用して共有 VPC がデプロイされ、AWS から Vertex AI API への限定公開アクセスを許可するサービス ポリシー属性が設定されています。
- 単一の VPC Service Controls 境界
- プロジェクト定義のユーザー ID
省略可: アクセスレベルを作成する
エンドユーザーが Google Cloud コンソールから Vertex AI にアクセスする必要がある場合は、このセクションの手順に沿って VPC Service Controls アクセスレベルを作成します。ただし、API へのプログラムによるアクセスが限定公開ソース(限定公開の Google アクセスまたは Cloud ワークステーションがあるオンプレミスなど)から行われる場合、アクセスレベルは必要ありません。
このリファレンス アーキテクチャでは、企業の CIDR 範囲 corp-public-block
を使用して、企業の従業員のトラフィックが Google Cloud コンソールにアクセスできるようにしています。
Access Context Manager を使用すると、 Google Cloud 組織管理者は、Google Cloudのプロジェクトとリソースに対してきめ細かい属性ベースのアクセス制御を定義できます。
アクセスレベルは、リクエストに対応するための要件を示します。例:
- デバイスの種類とオペレーティング システム(Chrome Enterprise Premium ライセンスが必要)
- IP アドレス
- ユーザー ID
組織で Access Context Manager を初めて使用する場合は、管理者がアクセス ポリシーを定義する必要があります。これは、アクセスレベルとサービス境界のコンテナです。
Google Cloud コンソールの上部にあるプロジェクト セレクタで、[すべて] タブをクリックし、組織を選択します。
ベーシック アクセスレベルを作成するページの手順に沿って、ベーシック アクセスレベルを作成します。次のオプションを指定します。
- [条件の作成] で、[基本モード] を選択します。
- [アクセスレベルのタイトル] フィールドに、「
corp-public-block
」と入力します。 - [条件] セクションの [条件が満たされたときに返す] オプションで、[TRUE] を選択します。
- [IP サブネットワーク] で [パブリック IP] を選択します。
- IP アドレス範囲には、VPC Service Controls の境界へのアクセスが必要な外部 CIDR 範囲を指定します。
VPC Service Controls のサービス境界を作成する
サービス境界を作成するときに、保護されたプロジェクトを指定して、境界外から保護されたサービスへのアクセスを許可します。共有 VPC で VPC Service Controls を使用する場合は、ホスト プロジェクトとサービス プロジェクトの両方を含む 1 つの大きな境界を作成します。(境界でサービス プロジェクトのみを選択した場合、サブネットはホスト プロジェクトにのみ関連付けられているため、サービス プロジェクトに属するネットワーク エンドポイントは境界外にあるように見えます)。
新しい境界の構成タイプを選択する
このセクションでは、ドライラン モードで VPC Service Controls サービス境界を作成します。ドライラン モードでは、境界が適用されているかのように違反をロギングしますが、制限されたサービスへのアクセスは阻止されません。自動適用モードに切り替える前にドライラン モードを使用することをおすすめします。
Google Cloud コンソールのナビゲーション メニューで、[セキュリティ]、[VPC Service Controls] の順にクリックします。
[VPC Service Controls] ページで、[ドライラン モード] をクリックします。
[新しい境界] をクリックします。
[新しい VPC サービス境界] タブの [境界名] ボックスに、境界の名前を入力します。それ以外の場合は、デフォルト値をそのまま使用します。
境界名の最大長は 50 文字で、先頭は英字にする必要があります。ASCII ラテン文字(a ~ z、A ~ Z)、数字(0 ~ 9)、アンダースコア(_)のみを使用できます。境界名は大文字と小文字が区別され、アクセス ポリシー内で一意である必要があります。
保護するリソースを選択する
[保護するリソース] をクリックします。
境界内で保護するプロジェクトまたは VPC ネットワークを追加する手順は次のとおりです。
[リソースの追加] をクリックします。
境界にプロジェクトを追加するには、[リソースの追加] ペインで [プロジェクトを追加] をクリックします。
プロジェクトを選択するには、[プロジェクトを追加] ダイアログでプロジェクトのチェックボックスをオンにします。このリファレンス アーキテクチャでは、次のプロジェクトを選択します。
infra-host-project
aiml-host-project
ph-fm-svc-project
[Add selected resources] をクリックします。追加されたプロジェクトが [プロジェクト] セクションに表示されます。
制限付きサービスを選択する
このリファレンス アーキテクチャでは、制限付き API の範囲が制限され、Gemini に必要な API のみが有効になります。ただし、ベスト プラクティスとして、Google Cloud サービスからデータが漏洩するリスクを軽減するため、境界を作成するときにすべてのサービスを制限することをおすすめします。
境界内で保護するサービスを選択するには、次の操作を行います。
[制限付きサービス] をクリックします。
[制限付きサービス] ペインで [サービスを追加] をクリックします。
[制限するサービスを指定] ダイアログで、[Vertex AI API] を選択します。
[Vertex AI API を追加] をクリックします。
省略可: VPC のアクセス可能なサービスを選択する
VPC のアクセス可能なサービス設定により、サービス境界内のネットワーク エンドポイントからアクセス可能なサービスのセットが制限されます。このリファレンス アーキテクチャでは、デフォルトの [すべてのサービス] 設定を維持します。
省略可: アクセスレベルを選択する
前のセクションで企業の CIDR アクセスレベルを作成した場合は、境界の外部から保護されたリソースへのアクセスを許可するには、次の操作を行います。
[アクセスレベル] をクリックします。
[アクセスレベルを選択します] ボックスをクリックします。
境界が作成された後にアクセスレベルを追加することもできます。
アクセスレベルのチェックボックスをオンにします。(このリファレンス アーキテクチャでは
corp-public-block
です)。
上り(内向き)ポリシーと下り(外向き)ポリシー
このリファレンス アーキテクチャでは、[上り(内向き)ポリシー] ペインまたは [下り(外向き)ポリシー] ペインで設定を指定する必要はありません。
境界を作成する
上記の構成手順が完了したら、[境界を作成] をクリックして境界を作成します。
AWS と Google API 間のネットワーク接続を構成する
Google API 用の Private Service Connect を構成する
Private Service Connect を使用して Google API にアクセスすると、限定公開の Google アクセスまたは Google API のパブリック ドメイン名を使用する代わりになります。この場合、Google がプロデューサーになります。
Private Service Connect を使用すると、次のことができます。
- 1 つ以上の内部 IP アドレスを作成して、さまざまなユースケースの Google API にアクセスします。
- Google API にアクセスするときに、オンプレミス トラフィックを特定の IP アドレスとリージョンに転送できます。
- Google API の解決に使用するカスタム エンドポイント DNS 名を作成します。
リファレンス アーキテクチャでは、IP アドレス 10.10.10.3,
の restricted
という名前の Private Service Connect Google API エンドポイントがターゲット VPC-SC とともにデプロイされます。これは、VPC-SC 境界で構成された制限付きサービスにアクセスするための仮想 IP(VIP)として使用されます。VIP を使用して制限なしのサービスにターゲティングすることはできません。詳細については、Vertex AI API へのアクセスについて | Google Cloud をご覧ください。
AWS VPC ネットワークを構成する
Amazon Web Services(AWS)と Google Cloud間のネットワーク接続は、高可用性仮想プライベート ネットワーク(HA VPN)トンネルを使用して確立されます。この安全な接続により、2 つのクラウド環境間のプライベート通信が容易になります。ただし、AWS と Google Cloudのリソース間のシームレスなルーティングと通信を可能にするために、Border Gateway Protocol(BGP)が使用されます。
Google Cloud 環境では、カスタム ルート アドバタイズが必要です。このカスタムルートは、Private Service Connect Google API の IP アドレスを AWS ネットワークにアドバタイズします。この IP アドレスをアドバタイズすることで、AWS は Google API への直接ルートを確立し、パブリック インターネットをバイパスしてパフォーマンスを向上させることができます。
このリファレンス アーキテクチャでは、 Google Cloudを使用して VPN が確立されている AWS VPC に関連付けられた Sagemaker インスタンスがデプロイされています。Border Gateway Protocol(BGP)は、AWS と Google Cloud ネットワーク間の HA VPN を介してルートをアドバタイズするために使用されます。その結果、Google Cloud と AWS は、VPN 経由で双方向トラフィックをルーティングできます。HA VPN 接続の設定の詳細については、 Google Cloud と AWS 間の HA VPN 接続を作成するをご覧ください。
Route 53 の更新を構成する
AWS Route 53 で p.googleapis.com
という名前の限定公開ホストゾーンを作成し、完全修飾ドメイン名 REGION-aiplatform-restricted.p.googleapis.com
と IP アドレス 10.10.10.3
(Private Service Connect Googleapis IP)を DNS A レコードとして追加します。Jupyter Notebook SDK が Vertex AI API の DNS ルックアップを実行して Gemini に到達すると、Route 53 は Private Service Connect Google API の IP アドレスを返します。Jupyter Notebook は、Route 53 から取得した IP アドレスを使用して、HA VPN を介して Google Cloudにルーティングされる Private Service Connect Google API エンドポイントへの接続を確立します。
Sagemaker の更新を構成する
このリファレンス アーキテクチャでは、Amazon SageMaker Notebook インスタンスを使用して Vertex AI API にアクセスします。ただし、Amazon EC2 や AWS Lambda など、VPC をサポートする他のコンピューティング サービスでも同じ設定を実現できます。
リクエストを認証するには、 Google Cloud サービス アカウント キーを使用するか、Workload Identity 連携を使用します。Workload Identity 連携の設定については、オンプレミスまたは別のクラウド プロバイダをご覧ください。
Jupyter Notebook インスタンスは、カスタム Private Service Connect Google API の完全修飾ドメイン名 REGION-aiplatform-restricted.p.googleapis.com
に対する DNS 解決を実行し、デフォルトの完全修飾ドメイン名(REGION-aiplatform.googleapis.com
)をオーバーライドすることで、Google Cloud でホストされている Gemini モデルに対する API 呼び出しを呼び出します。
Vertex AI API は、Rest、gRPC、または SDK を使用して呼び出すことができます。Private Service Connect のカスタム完全修飾ドメイン名を使用するには、Jupyter Notebook の API_ENDPOINT を次のように更新します。
Vertex AI SDK for Python の使用手順
SDK をインストールします。
pip install --upgrade google-cloud-aiplatform
依存関係をインポートします。
from google.cloud import aiplatform from vertexai.generative_models import GenerativeModel, Part, SafetySetting import vertexai import base64
次の環境変数を初期化します。
PROJECT_ID="ph-fm-svc-projects" # Google Cloud Project ID LOCATION_ID="us-central1" # Enter Vertex AI Gemini region such a s us-central1 API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint MODEL_ID="gemini-1.5-flash-002" # Gemini Model ID
Vertex AI SDK for Python を初期化します。
vertexai.init(project=PROJECT_ID,api_endpoint=API_ENDPOINT, api_transport="rest")
Vertex AI Gemini API に次のリクエストを送信します。
import base64 from vertexai.generative_models import GenerativeModel, Part, SafetySetting def generate(model_id, prompt): model = GenerativeModel( model_id, ) responses = model.generate_content( [prompt], generation_config=generation_config, safety_settings=safety_settings, stream=True, ) for response in responses: print(response.text, end="") generation_config = { "max_output_tokens": 8192, "temperature": 1, "top_p": 0.95, } safety_settings = [ SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold=SafetySetting.HarmBlockThreshold.OFF ), SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold=SafetySetting.HarmBlockThreshold.OFF ), SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold=SafetySetting.HarmBlockThreshold.OFF ), SafetySetting( category=SafetySetting.HarmCategory.HARM_CATEGORY_HARASSMENT, threshold=SafetySetting.HarmBlockThreshold.OFF ), ] prompt = "which weighs more: 1kg feathers or 1kg stones" generate(MODEL_ID,prompt)
この時点で、Jupyter ノートブックから Gemini への API 呼び出しを実行して、 Google Cloudでホストされている Gemini にアクセスできます。呼び出しが成功すると、出力は次のようになります。
They weigh the same. Both weigh 1 kilogram.
Vertex AI REST API の使用手順
このセクションでは、プロセス全体で使用される重要な変数を設定します。これらの変数には、リソースのロケーション、特定の Gemini モデル、使用する Private Service Connect エンドポイントなど、プロジェクトに関する情報が保存されます。
Jupyter ノートブック内でターミナル ウィンドウを開きます。
次の環境変数を初期化します。
export PROJECT_ID="ph-fm-svc-projects" export LOCATION_ID="us-central1" export API_ENDPOINT="us-central1-aiplatform-restricted.p.googleapis.com" export MODEL_ID="gemini-1.5-flash-002"
テキスト エディタ(
vim
やnano
など)を使用して、Vertex AI Gemini API の次の形式のリクエストを含むrequest.json
という名前の新しいファイルを作成します。{ "contents": [ { "role": "user", "parts": [ { "text": "which weighs more: 1kg feathers or 1kg stones" } ] } ], "generationConfig": { "temperature": 1, "maxOutputTokens": 8192, "topP": 0.95, "seed": 0 }, "safetySettings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "OFF" }, { "category": "HARM_CATEGORY_DANGEROUS_CONTENT", "threshold": "OFF" }, { "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT", "threshold": "OFF" }, { "category": "HARM_CATEGORY_HARASSMENT", "threshold": "OFF" } ] }
Vertex AI Gemini API に次の cURL リクエストを送信します。
curl -v \ -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://$API_ENDPOINT/v1/projects/$PROJECT_ID/locations/$LOCATION_ID/publishers/google/models/$MODEL_ID:streamGenerateContent" -d '@request.json'
ドライラン モードで境界を検証する
このリファレンス アーキテクチャでは、サービス境界はドライラン モードで構成されているため、適用せずにアクセス ポリシーの効果をテストできます。つまり、ポリシーが有効になっている場合に環境に与える影響を、正当なトラフィックを中断するリスクなしで確認できます。
ドライラン モードで境界を検証したら、境界を自動適用モードに切り替えます。
次のステップ
p.googleapis.com
DNS 名を使用する方法を学習する。- ドライラン モードで境界を検証する方法については、VPC Service Controls のドライラン ロギングに関する動画をご覧ください。
- Vertex AI REST API の使用方法を学習する。
- Vertex AI SDK for Python の使用方法の詳細を確認する。