參考架構
在下列參考架構中,共用虛擬私有雲會在服務專案中部署 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 控制台頂端的專案選取器中,按一下「全部」分頁,然後選取您的機構。
按照「建立基本存取層級」頁面中的指示建立基本存取層級。指定下列選項:
- 在「在以下位置建立條件」下方,選擇「基本模式」。
- 在「Access level title」(存取層級標題) 欄位中輸入
corp-public-block
。 - 在「條件」部分,針對「當條件符合時,返回」選項,選擇「TRUE」。
- 在「IP 子網路」下方,選擇「公用 IP 位址」。
- 針對 IP 位址範圍,請指定需要存取 VPC Service Controls 範圍的外部 CIDR 範圍。
建立 VPC Service Controls 服務範圍
建立服務範圍時,您可以指定受保護的專案,允許範圍外存取受保護的服務。搭配共用虛擬私有雲使用 VPC Service Controls 時,您會建立一個大範圍,其中包含主機和服務專案。(如果您只選取範圍內的服務專案,屬於服務專案的網路端點會顯示在範圍外,因為子網路只與主機專案相關聯)。
選取新範圍的設定類型
在本節中,您會在模擬測試模式中建立 VPC Service Controls 服務範圍。在模擬測試模式中,邊界會記錄違規行為,就好像邊界已強制執行,但不會阻止存取受限制的服務一樣。建議您在切換為強制模式前,先使用模擬模式。
在 Google Cloud 控制台導覽選單中,依序點選「Security」(安全性) 和「VPC Service Controls」。
在「VPC Service Controls」頁面上,按一下「模擬測試模式」。
按一下「新增範圍」。
在「New VPC Service Perimeter」分頁的「Perimeter Name」方塊中,輸入範圍的名稱。否則,請接受預設值。
邊界名稱的長度上限為 50 個字元,開頭須為英文字母,且只能包含 ASCII 拉丁字母 (a-z、A-Z)、數字 (0-9) 或底線 (_)。範圍名稱會區分大小寫,且在存取政策中不得重複。
選取要保護的資源
按一下「要保護的資源」。
如要新增您想在該範圍內保護的專案或 VPC 網路,請按照下列步驟操作:
按一下「新增資源」。
如要將專案新增至範圍,請在「Add resources」窗格中,按一下「Add project」。
如要選取專案,請在「Add projects」對話方塊中勾選該專案的核取方塊。在這個參考架構中,我們選取下列專案:
infra-host-project
aiml-host-project
ph-fm-svc-project
按一下「新增所選資源」。新增的專案會顯示在「Projects」部分。
選取受限制的服務
在這個參考架構中,受限制的 API 範圍有限,只啟用 Gemini 所需的必要 API。不過,建議您在建立範圍時限制所有服務,以降低Google Cloud 服務的資料外洩風險,這也是最佳做法。
如要選取要保護的服務,請按照下列步驟操作:
按一下「受限制的服務」。
在「受限制的服務」窗格中,按一下「新增服務」。
在「Specify services to restrict」(指定要限制的服務) 對話方塊中,選取「Vertex AI API」。
按一下「新增 Vertex AI API」。
選用:選取可透過虛擬私有雲存取的服務
「可存取的虛擬私有雲服務」設定會限制服務範圍內網路端點可存取的服務組合。在這個參考架構中,我們會保留「All Services」的預設設定。
選用:選取存取層級
如果您在前一個部分中建立了公司 CIDR 存取層級,請按照下列步驟操作,允許從範圍外存取受保護的資源:
按一下「存取層級」。
按一下「Choose Access Level」方塊。
您也可以在建立外圍區後新增存取層級。
選取對應的存取層級核取方塊。(在本參考架構中,這會是
corp-public-block
)。
輸入和輸出政策
在這個參考架構中,您不需要在「Ingress Policy」或「Egress Policy」窗格中指定任何設定。
建立範圍
完成上述設定步驟後,請按一下「建立外圍」建立外圍。
設定 AWS 與 Google API 之間的網路連線
設定適用於 Google API 的 Private Service Connect
使用 Private Service Connect 存取 Google API 是使用私人 Google 存取權或 Google API 的公開網域名稱的替代方案。在本例中,生產端為 Google。
使用 Private Service Connect 可讓您執行下列操作:
- 建立一或多個內部 IP 位址,以便存取不同用途的 Google API。
- 在存取 Google API 時,將內部部署流量導向特定 IP 位址和區域。
- 建立用於解析 Google API 的自訂端點 DNS 名稱。
在參考架構中,Private Service Connect Google API 端點會以 restricted
為名,並搭配 IP 位址 10.10.10.3,
部署至目標 VPC-SC,用於存取在 VPC-SC 邊界中設定的受限服務,做為虛擬 IP (VIP)。系統不支援使用 VIP 指定未受限制的服務。詳情請參閱「關於存取 Vertex AI API | Google Cloud」。
設定 AWS 虛擬私有雲網路
使用高可用性虛擬私有網路 (HA VPN) 通道,建立 Amazon Web Services (AWS) 和 Google Cloud之間的網路連線。這項安全連線可促進兩個雲端環境之間的私人通訊。不過,為了讓 AWS 和 Google Cloud中的資源之間能順暢轉送及通訊,我們採用了邊界閘道通訊協定 (BGP)。
在 Google Cloud 環境中,您必須使用自訂路徑廣告。這個自訂路徑會將 Private Service Connect Google API IP 位址廣告給 AWS 網路。宣傳這個 IP 位址後,AWS 就能建立直接路徑連線至 Google API,不必經過公用網際網路,進而提升效能。
在參考架構中,Sagemaker 執行個體會與 AWS VPC 建立關聯,並透過 Google Cloud建立 VPN。邊界閘道通訊協定 (BGP) 可用於在 AWS 和 Google Cloud 網路之間的 HA VPN 中宣傳路徑。因此,Google Cloud 和 AWS 可以透過 VPN 轉送雙向流量。如要進一步瞭解如何設定高可用性 VPN 連線,請參閱「在 Google Cloud 和 AWS 之間建立高可用性 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 位址,建立與 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 聯盟,請參閱「內部部署或其他雲端服務供應商」。
Jupyter Notebook 執行個體會對Google Cloud 中託管的 Gemini 模型叫用 API,方法是執行 DNS 解析作業,將自訂 Private Service Connect Google API 完整網域名稱 REGION-aiplatform-restricted.p.googleapis.com
覆寫預設完整網域名稱 REGION-aiplatform.googleapis.com
。
Vertex AI API 可透過 Rest、gRPC 或 SDK 呼叫。如要使用 Private Service Connect 客戶完整修飾網域名稱,請將 Jupyter Notebook 中的 API_ENDPOINT 更新為以下內容:
使用 Python 適用的 Vertex AI SDK 操作說明
安裝 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-2.0-flash-001" # Gemini Model ID
初始化 Python 適用的 Vertex AI SDK:
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-2.0-flash-001"
使用文字編輯器 (例如
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'
在模擬測試模式中驗證範圍
在這個參考架構中,服務範圍會在模擬測試模式下設定,讓您在未強制執行的情況下測試存取政策的效果。也就是說,您可以查看政策在啟用時對環境的影響,但不會影響合法流量。
在模擬測試模式中驗證完周界後,請切換為強制執行模式。
後續步驟
- 瞭解如何使用
p.googleapis.com
DNS 名稱。 - 如要瞭解如何在模擬測試模式中驗證範圍,請觀看 VPC Service Controls 模擬測試記錄影片。
- 瞭解如何使用 Vertex AI REST API。
- 進一步瞭解如何使用 Python 適用的 Vertex AI SDK。