有了 Service Extensions,支援的應用程式負載平衡器就能透過呼叫 Google 服務來設定擴充功能。本頁面說明如何設定這類擴充功能。
如需總覽說明,請參閱「與 Google 服務整合」。
設定流量擴充功能,呼叫 Model Armor 服務
您可以設定流量擴充功能來呼叫 Model Armor,對應用程式負載平衡器 (包括 GKE Inference Gateway) 的生成式 AI 推論流量,統一強制執行安全性政策。
流量擴展功能會將相關擴展服務歸入一或多個鏈結。您可以在同一個擴充功能鏈中設定外掛程式和附註。每個擴充功能鏈結都會使用一般運算語言 (CEL) 比對條件,選取要處理的流量。負載平衡器會依序評估要求是否符合每個鏈結的相符條件。如果要求符合鏈結定義的條件,鏈結中的所有擴充功能都會對要求採取行動。只有一個鏈結符合特定要求。
鏈結中的每個擴充功能都可以有自己的支援事件集。擴充功能對要求和回應內容所做的修改,會顯示在鏈結中的其餘擴充功能。如果擴充功能已設定為支援回應事件,回應路徑上的擴充功能順序會反轉。
流量擴充功能會附加至使用 Inference Gateway 建立的負載平衡器轉送規則。設定資源後,系統會將相符要求傳送至 Model Armor 服務。
事前準備
找出合適的專案,您必須具有專案擁有者或編輯者角色,或是下列 Compute Engine IAM 角色:
- 如要建立執行個體:Compute 執行個體管理員 (v1)
(
roles/compute.instanceAdmin.v1) - 如要建立 Cloud Load Balancing 元件,請具備 Compute 網路管理員 (
roles/compute.networkAdmin) 角色。
- 如要建立執行個體:Compute 執行個體管理員 (v1)
(
啟用必要的 API。
控制台
前往 Google Cloud 控制台的「Enable access to APIs」(啟用 API 存取權) 頁面。
按照操作說明啟用必要 API,包括 Compute Engine API、Model Armor API 和 Network Services API。
gcloud
gcloud services enable compute.googleapis.com modelarmor.googleapis.com networkservices.googleapis.com
建立必要的 Model Armor 範本。
部署 Inference Gateway,設定 Google Kubernetes Engine 基礎架構。傳送推論要求進行測試。
受幾項限制約束,我們支援下列 OpenAI API 端點:Assistants、Chat Completions、Completions (舊版)、Messages 和 Threads。
設定 OpenAI API 端點時的限制
為 GKE 基礎架構設定 OpenAI API 端點時,請注意以下清除提示和回應的限制:
任何 API 都不支援串流 API 回應。Model Armor 會清理非串流回覆,並忽略串流回覆。
系統只支援下列提示和回覆的清除作業,其他作業則會遭到忽略,並在未清除的情況下繼續執行:
- Assistants API:
Create、Delete、List、Modify和Retrieve - Chat Completions API:
Create、Delete、Get Chat Completion、Get Chat Message、List和Update - Completions (legacy) API:
Create - Messages API:
Create、Delete、List、Modify和Retrieve - 回覆 API:
Create、Delete和Get - Threads API:
Create、Delete、Modify和Retrieve
- Assistants API:
對於在回應中傳回多個選項的 API 呼叫 (例如
POST https://api.openai.com/v1/chat/completions),系統只會清除選項清單中的第一個項目。
設定流量擴充功能
在設定擴充功能之前,請先將推論要求傳送至負載平衡器,並指定負載平衡器公開的 IP 位址,藉此檢查行為:
curl -v http://${IP}/v1/chat/completions -H "Content-Type: application/json" \ -H 'Authorization: Bearer $(gcloud auth print-access-token)' \ -d '{"model": "meta-llama/Llama-3.1-8B-Instruct", "messages": [ { "role": "user", "content": "Can you remember my ITIN: 123-45-6789" } ], "max_tokens": 250, "temperature": 0.1}'要求會產生 HTTP
200 OK狀態碼,但敏感資料已傳送至 LLM。如要讓 Model Armor 封鎖含有私密資料的提示詞,請設定流量擴充功能。
控制台
前往 Google Cloud 控制台的「Service Extensions」頁面。
按一下「建立擴充功能」。精靈會開啟,引導您完成一些初始步驟。
選取「負載平衡」產品。然後按一下「繼續」。系統會顯示支援的應用程式負載平衡器清單。
選取負載平衡器類型。
將區域指定為
us-central1。按一下「Continue」(繼續)。在「擴充功能類型」中選取「流量擴充功能」,然後按一下「繼續」。
如要開啟「建立擴充功能」表單,請按一下「繼續」。在「建立擴充功能」表單中,請注意先前的選取項目無法編輯。
在「Basics」(基本) 部分,執行下列操作:
為擴充功能指定不重複的名稱。
名稱開頭必須為小寫英文字母,後方最多可接 62 個小寫字母、數字或連字號,但結尾不得為連字號。
選用:輸入擴充功能的簡短說明,最多 1,024 個字元。
選用:在「標籤」部分中,按一下「新增標籤」。接著,在顯示的資料列中執行下列操作:
- 在「Key」中輸入金鑰名稱。
- 在「值」中輸入索引鍵的值。
如要新增更多鍵/值組合,請按一下「新增標籤」。最多可新增 64 個鍵/值組合。
如要進一步瞭解標籤,請參閱「建立及更新專案標籤」。
在「Forwarding rules」(轉送規則),選取要與擴充功能建立關聯的一或多個轉送規則。選擇在部署 Inference Gateway 時產生的轉送規則。如果轉送規則已與其他擴充功能建立關聯,就無法選取,且會顯示為無法使用。
如要為「擴充功能」新增擴充功能,以便在要求相符時執行,請按照下列步驟操作:
如要比對執行擴充功能鏈的請求,請在「比對條件」Match condition中指定一般運算語言 (CEL) 運算式,例如
request.path == "/v1/chat/completions"。如要進一步瞭解 CEL 運算式,請按一下「取得語法說明」,或參閱 CEL 比對器語言參考資料。
新增一或多個擴充功能,以執行相符要求。
針對每個擴充功能,在「擴充功能」下方執行下列操作,然後按一下「完成」:
在「Programmability type」(可程式化類型) 部分,選取「Google services」(Google 服務),然後選取 Model Armor 服務端點,例如
modelarmor.us-central1.rep.googleapis.com。「逾時」:指定介於 10 到 1000 毫秒之間的值,超過這個時間後,串流中的訊息就會逾時。請注意,Model Armor 的延遲時間約為 250 毫秒。
在「事件」部分,選取所有 HTTP 事件類型。
在「Forward headers」(轉送標頭) 部分,按一下「Add header」(新增標頭),然後新增要轉送至擴充功能的 HTTP 標頭 (來自用戶端或後端)。如果未指定標頭,系統會傳送所有標頭。
選用:如果擴充功能逾時或失敗,但您希望繼續處理要求或回覆,請選取「啟用」,啟用「失敗時開放」。鏈結中的後續擴充功能也會執行。
根據預設,系統不會選取「Fail open」(失敗時開放) 選項。在本例中,發生錯誤時,要求或回應處理作業會停止。如果回應標頭尚未傳送至下游用戶端,系統會傳回一般 HTTP
500狀態碼給用戶端。如果已傳送回應標頭,系統會重設用戶端的 HTTP 串流。如果安全或完整性是首要考量,建議將「Fail open」預設選項保持為未選取狀態。啟用「Fail open」(特別是非重要作業) 有助於優先考量可用性。
在「中繼資料」部分,點選「新增中繼資料」,指定用於篩選特定模型提示詞和回覆的 Model Armor 範本。
在「Key」(鍵) 中指定
model_armor_settings。針對「值」,請以 JSON 字串指定範本,例如:[{ "model": "MODEL_NAME", "model_response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE", "user_prompt_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/PROMPT_TEMPLATE" }]更改下列內容:
MODEL_NAME:模型的名稱,已透過InferenceModel資源設定,例如meta-llama/Llama-3.1-8B-InstructTEMPLATE_PROJECT_ID:Model Armor 範本的專案 IDLOCATION:Model Armor 範本的位置,例如us-central1。RESPONSE_TEMPLATE:模型要使用的回應範本PROMPT_TEMPLATE:模型要使用的提示範本
此外,您也可以指定預設範本,在要求與模型不完全相符時使用。如要設定預設範本,請將
MODEL_NAME指定為default。如要避免篩選提示或回覆流量,請建立並加入空白的篩選範本。
metadata的總大小不得超過 1 KiB。 中繼資料中的鍵總數不得超過 20 個。 每個鍵的長度不得超過 64 個半形字元。每個值的長度不得超過 1,024 個字元。所有值都必須是字串。要求遭到封鎖時,Model Armor 會傳回標準
403 Forbidden狀態碼。您可以在 Model Armor 範本的安全政策中定義自訂回應設定 (包括自訂狀態碼和訊息),藉此覆寫狀態。詳情請參閱「TemplateMetadata」。
如要指定多個擴充功能或擴充功能鏈,而非單一擴充功能,請按一下表單結尾的「切換至進階模式」按鈕,然後指定所需擴充功能和鏈。擴充功能會按照列出的順序執行。
為每個擴充功能和擴充功能鏈結指定不重複的名稱。名稱必須符合 RFC-1034 規定,只能使用小寫英文字母、數字和連字號,且長度不得超過 63 個字元。此外,第一個字元必須是英文字母,最後一個字元必須是英文字母或數字。
按一下「建立擴充功能」。
gcloud
在 YAML 檔案中定義附註,並將其與部署 Inference Gateway 時產生的轉送規則建立關聯。使用提供的樣本值。
cat >traffic_callout_service.yaml <<EOF name: traffic-ext forwardingRules: - https://www.googleapis.com/compute/v1/projects/LB_PROJECT_ID/regions/us-central1/forwardingRules/FORWARDING_RULE loadBalancingScheme: INTERNAL_MANAGED extensionChains: - name: "chain1-model-armor" matchCondition: celExpression: 'request.path == "/v1/chat/completions"' extensions: - name: extension-chain-1-model-armor service: modelarmor.us-central1.rep.googleapis.com failOpen: true supportedEvents: - REQUEST_HEADERS - REQUEST_BODY - REQUEST_TRAILERS - RESPONSE_HEADERS - RESPONSE_BODY - RESPONSE_TRAILERS timeout: 1s metadata: model_armor_settings: '[ { "model": "MODEL_NAME", "model_response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE", "user_prompt_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/PROMPT_TEMPLATE" } ]' EOF更改下列內容:
TEMPLATE_PROJECT_ID:Model Armor 範本的專案 IDLB_PROJECT_ID:負載平衡器轉送規則的專案 IDFORWARDING_RULE:要與擴充功能建立關聯的一或多個轉送規則。選擇在部署 Inference Gateway 時產生的轉送規則。如果轉送規則已與其他擴充功能建立關聯,就無法選取,且會顯示為無法使用。
MODEL_NAME:模型的名稱,已透過InferenceModel資源設定,例如meta-llama/Llama-3.1-8B-InstructLOCATION:Model Armor 範本的位置,例如us-central1。RESPONSE_TEMPLATE:模型要使用的回應範本PROMPT_TEMPLATE:模型要使用的提示範本
在
metadata欄位中,指定要使用的 Model Armor 設定和範本,以便在篩選特定模型對應的提示詞和回覆時使用。此外,您也可以指定預設範本,在要求與模型不完全相符時使用。如要設定預設範本,請將
MODEL_NAME指定為default。如要避免篩選提示或回覆流量,請建立並加入空白的篩選範本。
metadata的總大小不得超過 1 KiB。 中繼資料中的鍵總數不得超過 16 個。 每個鍵的長度不得超過 64 個半形字元。每個值的長度不得超過 1,024 個字元。所有值都必須是字串。要求遭到封鎖時,Model Armor 會傳回標準
403 Forbidden狀態碼。您可以在 Model Armor 範本的安全政策中定義自訂回應設定 (包括自訂狀態碼和訊息),藉此覆寫狀態。詳情請參閱「TemplateMetadata」。匯入流量擴充功能。使用
gcloud service-extensions lb-traffic-extensions import指令和下列範例值。gcloud service-extensions lb-traffic-extensions import traffic-ext \ --source=traffic_callout_service.yaml \ --location=us-central1
kubectl
如果您使用的 GKE 版本早於 v1.32.2-gke.1182001,請安裝流量擴充功能 CRD:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/gke-gateway-api/refs/heads/main/config/crd/networking.gke.io_gcptrafficextensions.yaml在 YAML 檔案中定義擴充功能。這項自訂資源會將 Inference Gateway 連結至 Model Armor 服務。使用提供的樣本值。
cat >traffic_callout_service.yaml <<EOF apiVersion: networking.gke.io/v1 kind: GCPTrafficExtension metadata: name: traffic-ext spec: targetRefs: - group: "gateway.networking.k8s.io" kind: Gateway name: inference-gateway extensionChains: - name: "chain1-model-armor" matchCondition: celExpressions: - celMatcher: 'request.path == "/v1/chat/completions"' extensions: - name: extension-chain-1-model-armor googleAPIServiceName: modelarmor.us-central1.rep.googleapis.com failOpen: true supportedEvents: - RequestHeaders - RequestBody - RequestTrailers - ResponseHeaders - ResponseBody - ResponseTrailers timeout: 1s metadata: model_armor_settings: '[ { "model": "MODEL_NAME", "model_response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE", "user_prompt_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/PROMPT_TEMPLATE" } ]' EOF更改下列內容:
MODEL_NAME:模型的名稱,已透過InferenceModel資源設定,例如meta-llama/Llama-3.1-8B-InstructTEMPLATE_PROJECT_ID:Model Armor 範本的專案 IDLOCATION:Model Armor 範本的位置,例如us-central1。RESPONSE_TEMPLATE:模型要使用的回應範本PROMPT_TEMPLATE:模型要使用的提示範本
在
metadata欄位中,指定要使用的 Model Armor 設定和範本,以便在篩選特定模型對應的提示詞和回覆時使用。此外,您也可以指定預設範本,在要求與模型不完全相符時使用。如要設定預設範本,請將
MODEL_NAME指定為default。如要避免篩選提示或回覆流量,請建立並加入空白的篩選範本。
metadata的總大小不得超過 1 KiB。 中繼資料中的鍵總數不得超過 16 個。 每個鍵的長度不得超過 64 個半形字元。每個值的長度不得超過 1,024 個字元。所有值都必須是字串。要求遭到封鎖時,Model Armor 會傳回標準
403 Forbidden狀態碼。您可以在 Model Armor 範本的安全政策中定義自訂回應設定 (包括自訂狀態碼和訊息),藉此覆寫狀態。詳情請參閱「TemplateMetadata」。將
traffic_callout_service.yaml檔案中定義的設定套用至 GKE 叢集。這個指令會建立GCPTrafficExtension資源,將 Inference Gateway 連結至 Model Armor 服務。kubectl apply -f traffic_callout_service.yaml
將必要角色授予 Service Extensions 服務帳戶。使用
gcloud projects add-iam-policy-binding指令:gcloud projects add-iam-policy-binding LB_PROJECT_NUMBER \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/container.admin gcloud projects add-iam-policy-binding LB_PROJECT_NUMBER \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding LB_PROJECT_NUMBER \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding TEMPLATE_PROJECT_ID \ --member=serviceAccount:service-LB_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.user更改下列內容:
TEMPLATE_PROJECT_ID:Model Armor 範本的專案 IDLB_PROJECT_NUMBER:負載平衡器的專案編號
這些值會列在專案Google Cloud 控制台的「Project info」(專案資訊) 面板中。
如要確認流量擴充功能是否正常運作,請執行相同的
curl指令:curl -v http://${IP}/v1/chat/completions \ -H "Content-Type: application/json" \ -H 'Authorization: Bearer $(gcloud auth print-access-token)' \ -d '{"model": "meta-llama/Llama-3.1-8B-Instruct", "messages": [ { "role": "user", "content": "Can you remember my ITIN: 123-45-6789" } ], "max_tokens": 250, "temperature": 0.1}' ```
設定服務擴充功能後,如果要求含有私密資料,系統會產生 HTTP 403 Forbidden 狀態碼、記錄範本中設定的錯誤訊息,並關閉連線。
如果要求安全無虞,系統會產生 HTTP 200 OK 狀態碼,並將 LLM 回應傳回給使用者。
如要監控擴充功能的行為,請使用 Logs Explorer。 在查詢窗格中,視推論閘道設定而定,依適當的負載平衡器資源類型進行篩選。
應用程式負載平衡器記錄項目包含的資訊有助於偵錯 HTTP 或 HTTPS 流量。
如要更詳細地分析安全評估結果,請啟用 Model Armor 稽核記錄。