參考架構
在下列參考架構中,共用虛擬私有雲會部署在服務專案中,並搭配 Gemini 模型,ph-fm-svc-project (基礎模型服務專案) 則會搭配服務政策屬性,允許從 AWS 私下存取 Vertex AI API:
- 單一 VPC Service Controls 範圍
- 專案定義的使用者身分

選用步驟:建立存取層級
如果使用者需要透過 Google Cloud 控制台存取 Vertex AI,請按照本節的說明建立 VPC Service Controls 存取層級。不過,如果 API 的程式輔助存取來自私人來源 (例如透過私人 Google 存取權或 Cloud Workstations 的內部部署),則不需要存取層級。
在本參考架構中,我們使用公司 CIDR 範圍 corp-public-block,允許公司員工流量存取 Google Cloud 控制台。
Access Context Manager 可讓 Google Cloud 機構管理員依據屬性,為Google Cloud中的專案和資源定義精細的存取控管機制。
存取層級描述接受要求的必要條件,例如:
- 裝置類型和作業系統 (須有 Chrome Enterprise 進階版授權)
- IP 位址
- 使用者身分
如果這是機構首次使用 Access Context Manager,管理員必須定義存取權政策,這是存取層級和服務範圍的容器。
在 Google Cloud 控制台頂端的專案選取器中,按一下「全部」分頁標籤,然後選取您的機構。
按照「建立基本存取層級」頁面的指示,建立基本存取層級。指定下列選項:
- 在「Create conditions in」(使用以下模式建立條件:) 中,選擇「Basic mode」(基本模式)。
- 在「Access level title」(存取層級標題) 欄位中輸入
corp-public-block。 - 在「條件」部分,為「符合條件時,傳回以下值:」選項選擇「TRUE」。
- 在「IP 子網路」下方,選擇「公開 IP」。
- 在 IP 位址範圍中,指定需要存取 VPC Service Controls perimeter 的外部 CIDR 範圍。
建立 VPC Service Controls 服務範圍
建立服務範圍時,您可以指定受保護的專案,允許從範圍外部存取受保護的服務。搭配共用虛擬私有雲使用 VPC Service Controls 時,您會建立一個大型安全防護範圍,同時包含主專案和服務專案。(如果您只在服務範圍內選取服務專案,服務專案的網路端點會顯示在服務範圍外,因為子網路只與主專案相關聯)。
選取新範圍的設定類型
在本節中,您將以模擬測試模式建立 VPC Service Controls 服務範圍。在模擬測試模式下,perimeter 會記錄違規事項,就好像 perimeter 已強制執行一樣,但不會禁止存取受限制服務。建議您先使用模擬執行模式,再切換至強制執行模式,這是最佳做法。
在 Google Cloud 控制台導覽選單中,依序按一下「Security」(安全性) 和「VPC Service Controls」。
在「VPC Service Controls」頁面中,按一下「Dry run mode」(模擬測試模式)。
按一下「New perimeter」(新增 perimeter)。
在「New VPC Service Perimeter」(新增虛擬私有雲服務範圍) 分頁的「Perimeter Name」(範圍名稱) 方塊中,輸入範圍的名稱。否則請接受預設值。
Perimeter 名稱的長度上限為 50 個字元,開頭須為英文字母,且只能包含 ASCII 拉丁字母 (a-z、A-Z)、數字 (0-9) 或底線 (_)。範圍名稱會區分大小寫,且在存取政策中不得重複。
選取要保護的資源
按一下「要保護的資源」。
如要新增您想在該 perimeter 內保護的專案或虛擬私有雲網路,請按照下列步驟操作:
按一下「新增資源」。
如要將專案新增至範圍,請在「新增資源」窗格中,按一下「新增專案」。
如要選取專案,請在「Add projects」(新增專案) 對話方塊中,勾選該專案的核取方塊。在本參考架構中,我們選取下列專案:
infra-host-projectaiml-host-projectph-fm-svc-project
按一下「新增所選資源」。新增的專案會顯示在「Projects」(專案) 部分中。
選取受限制的服務
在本參考架構中,受限 API 的範圍有限,只啟用 Gemini 必要的 API。不過,我們建議您在建立 perimeter 時限制所有服務,以降低Google Cloud 服務中發生資料遭竊的風險。
如要選取要在 perimeter 內保護的服務,請按照下列步驟操作:
按一下「受限制的服務」。
在「受限制的服務」窗格中,按一下「新增服務」。
在「Specify services to restrict」(指定要限制的服務) 對話方塊中,選取「Vertex AI API」。
按一下「新增 Vertex AI API」。
選用:選取可透過虛擬私有雲存取的服務
「可透過虛擬私有雲存取的服務」設定會限制可從 service perimeter 內部網路端點存取的服務集。在本參考架構中,我們保留「所有服務」的預設設定。
選用:選取存取層級
如果您在先前的章節中建立了公司 CIDR 存取層級,請按照下列步驟操作,允許從 perimeter 外部存取受保護的資源:
按一下「存取層級」。
按一下「選擇存取層級」方塊。
您也可以在建立 perimeter 後新增存取層級。
勾選對應存取層級的核取方塊。(在本參考架構中,這是
corp-public-block。)
輸入和輸出政策
在本參考架構中,您不需要在「Ingress Policy」(輸入政策) 或「Egress Policy」(輸出政策) 窗格中指定任何設定。
建立範圍
完成上述設定步驟後,按一下「建立 perimeter」即可建立 perimeter。
設定 AWS 與 Google API 之間的網路連線
設定適用於 Google API 的 Private Service Connect
使用 Private Service Connect 存取 Google API,可取代 Private Google Access 或 Google API 的公開網域名稱。在本例中,製作人是 Google。
使用 Private Service Connect 可執行下列操作:
- 建立一或多個內部 IP 位址,以便存取 Google API,滿足不同用途的需求。
- 存取 Google API 時,將內部部署流量直接導向特定 IP 位址和區域。
- 建立用於解析 Google API 的自訂端點 DNS 名稱。
在參考架構中,名為 restricted 的 Private Service Connect Google API 端點 (IP 位址為 10.10.10.3,) 會與目標 VPC-SC 一併部署,做為虛擬 IP (VIP),用來存取 VPC-SC 周邊設定中受限制的服務。系統不支援使用 VIP 指定非受限制的服務。詳情請參閱「關於存取 Vertex AI API | Google Cloud」。
設定 AWS 虛擬私有雲網路
Amazon Web Services (AWS) 和 Google Cloud之間的網路連線是透過高可用性虛擬私人網路 (HA VPN) 通道建立。這項安全連線可促進兩個雲端環境之間的私人通訊。不過,如要在 AWS 和 Google Cloud的資源之間啟用無縫轉送和通訊,則需採用邊界閘道通訊協定 (BGP)。
在 Google Cloud 環境中,必須使用自訂路徑通告。這個自訂路徑會向 AWS 網路宣傳 Private Service Connect Google API IP 位址。AWS 宣傳這個 IP 位址後,即可建立 Google API 的直接路徑,略過公用網際網路並提升效能。
在參考架構中,Sagemaker 執行個體會與建立 VPN 的 AWS VPC 建立關聯,然後進行部署 Google Cloud。邊界閘道通訊協定 (BGP) 用於在 AWS 和 Google Cloud 網路之間,透過 HA VPN 通告路徑。因此,Google Cloud 和 AWS 可以透過 VPN 轉送雙向流量。如要進一步瞭解如何設定高可用性 VPN 連線,請參閱「在 Google Cloud 與 AWS 之間建立高可用性 VPN 連線 Google Cloud 」。
設定 Route 53 更新
在 AWS Route 53 中建立名為 p.googleapis.com 的私人代管區域,並新增完整網域名稱 REGION-aiplatform-restricted.p.googleapis.com,其中 DNS A 記錄為 IP 位址 10.10.10.3 (Private Service Connect Googleapis IP)。當 Jupyter Notebook SDK 對 Vertex AI API 執行 DNS 查詢以連線至 Gemini 時,Route 53 會傳回 Private Service Connect Google API 的 IP 位址。Jupyter Notebook 會使用從 Route 53 取得的 IP 位址,建立與 Private Service Connect Google API 端點的連線,並透過 HA VPN 路由至 Google Cloud。
設定 SageMaker 更新
這個參考架構使用 Amazon SageMaker Notebook 執行個體存取 Vertex AI API。不過,您可以使用支援 VPC 的其他運算服務 (例如 Amazon EC2 或 AWS Lambda) 達成相同設定。
如要驗證要求,您可以使用 Google Cloud 服務帳戶金鑰,也可以使用 Workload Identity 聯盟。如要瞭解如何設定 Workload Identity Federation,請參閱「地端或其他雲端服務供應商」。
Jupyter Notebook 執行個體會對自訂 Private Service Connect Google API 完整網域名稱 REGION-aiplatform-restricted.p.googleapis.com 執行 DNS 解析,藉此叫用Google Cloud 中託管的 Gemini 模型 API 呼叫,並覆寫預設完整網域名稱 (REGION-aiplatform.googleapis.com)。
您可以使用 REST、gRPC 或 SDK 呼叫 Vertex AI API。 如要使用 Private Service Connect 客戶完整網域名稱,請在 Jupyter Notebook 中更新 API_ENDPOINT,加入下列內容:
如何使用 Python 適用的 Vertex AI SDK
安裝 SDK:
pip install --upgrade google-genai匯入依附元件:
from google.cloud import genai from google.genai.types import ( GenerateContentConfig, HarmBlockThreshold, HarmCategory, Part, SafetySetting )初始化下列環境變數:
PROJECT_ID="ph-fm-svc-projects" # Google Cloud Project ID LOCATION_ID="us-central1" # Enter Vertex AI Gemini region such as us-central1 API_ENDPOINT="https://us-central1-aiplatform-restricted.p.googleapis.com" # PSC Endpoint MODEL_ID="gemini-2.0-flash-001" # Gemini Model ID初始化 Python 適用的 Vertex AI SDK:
from google import genai client= genai.Client(vertexai=True, project=PROJECT_ID, location=LOCATION_ID, http_options={'base_url': API_ENDPOINT})對 Vertex AI Gemini API 提出下列要求:
prompt = "which weighs more, 1kg feathers or 1kg stones" safety_settings = [ SafetySetting( category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_HARASSMENT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_HATE_SPEECH, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), SafetySetting( category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT, threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE, ), ] response = client.models.generate_content( model=MODEL_ID, contents=prompt, config=GenerateContentConfig( safety_settings=safety_settings, ), ) # Response will be `None` if it is blocked. print(response.text)此時,您可以從 Jupyter 筆記本對 Gemini 執行 API 呼叫,存取 Google Cloud中託管的 Gemini。如果呼叫成功,輸出內容會與以下類似:
They weigh the same. Both weigh 1 kilogram.
如何使用 Vertex AI REST API
在本節中,您將設定一些重要變數,這些變數會在整個過程中用到。這些變數會儲存專案、資源位置、特定 Gemini 模型和要使用的 PSC 端點相關資訊。在 JupyterLab 筆記本中開啟終端機視窗,執行下列指令:
在 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等文字編輯器,建立名為request.json的新檔案,其中包含 Vertex AI Gemini API 的下列格式化要求:{ "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'
在模擬測試模式中驗證 perimeter
在本參考架構中,service perimeter 會以模擬測試模式設定,讓您測試存取權政策的效果,而不強制執行。也就是說,您可以查看政策啟用後對環境的影響,但不會有中斷正常流量的風險。
在模擬測試模式中驗證周邊後,請切換至強制執行模式。
後續步驟
- 瞭解如何使用
p.googleapis.comDNS 名稱。 - 如要瞭解如何在模擬測試模式中驗證服務範圍,請觀看 VPC Service Controls 模擬測試記錄影片。
- 瞭解如何使用 Vertex AI REST API。
- 進一步瞭解如何使用 Python 適用的 Vertex AI SDK。