本頁面說明如何使用 Service Extensions,將 Agent Gateway 的授權委派給 Identity-Aware Proxy、Model Armor 和其他自訂授權引擎。
授權政策和擴充功能
授權政策可讓您對通過 Agent Gateway 發布端點的流量,強制執行集中式存取控管和管理政策。如要處理複雜的存取控管、內容安全和治理決策,您可以使用 Agent Gateway 設定授權政策,並透過授權擴充功能,將授權和內容安全決策委派給指定的授權引擎。
授權擴充功能會攔截通過 Agent Gateway 部署作業的要求,並即時向指定的授權服務發出 gRPC 呼叫。這樣一來,服務就能在流量繼續前往目的地之前,檢查、修改或封鎖流量。您可以將授權委派給 Google Cloud 服務,例如 Identity-Aware Proxy、Model Armor 和 semantic governance policy,或您選擇的任何自訂授權引擎。
授權政策會使用政策設定檔,決定要傳送至授權擴充功能的流量資料類型:
- 要求型授權 (
REQUEST_AUTHZ):在處理任何應用程式酬載之前,先評估 HTTP 要求標頭。這個設定檔用於身分驗證和存取控管,例如將授權委派給 Identity-Aware Proxy。 - 內容型授權 (
CONTENT_AUTHZ):評估完整的 HTTP 要求和回應酬載。這個設定檔用於深度內容檢查和 AI 安全防護,例如將提示和回覆安全防護委派給 Model Armor,或將自然語言限制強制執行委派給語意管理政策。
自訂授權引擎可使用 REQUEST_AUTHZ 或 CONTENT_AUTHZ 擴充功能,具體取決於是否檢查標頭或完整應用程式酬載。
您可以分別為要求型和內容型政策設定授權擴充功能,也可以在閘道上合併兩者,確保安全性滴水不漏。如需建議設定,請參閱「建議的輸入和輸出設定」。
如要進一步瞭解授權政策、政策設定檔和用途,請參閱「授權政策總覽」。
建議的輸入和輸出設定
如要全面保護整個代理生命週期,建議採用下列多閘道架構模式:
用戶端至代理閘道:用戶端至代理 (輸入) 閘道僅支援單一
CONTENT_AUTHZ政策。也就是說,您無法在輸入時同時使用 Model Armor 和 semantic governance policy。強烈建議您使用 Model ArmorCONTENT_AUTHZ政策,防範提示詞注入式攻擊。不過,如果想改用 semantic governance policy 擴充功能,請務必確認閘道未設定 Model Armor。ingress 閘道不支援其他類型的服務擴充功能。代理至任何端點閘道:代理至任何端點 (輸出) 閘道最多支援四項授權政策。輸出閘道支援
REQUEST_AUTHZ和CONTENT_AUTHZ政策設定檔,您可以在此限制內設定多項各類型的政策。建議採用下列設定:
REQUEST_AUTHZ政策,委派 Identity-Aware Proxy (IAP) 授權代理身分。- 一或多項
CONTENT_AUTHZ政策,將後續決策委派給 Model Armor 或 semantic governance policy,防止敏感資料外洩,並對傳出的工具呼叫和回覆強制執行自然語言限制。
如要進一步瞭解政策評估方式,請參閱「輸出政策評估」。
這種多閘道拓撲可確保 Model Armor 篩選傳入的提示詞,而 IAP、Model Armor 和 semantic governance policy 則篩選傳出的回覆。
輸出流量的政策評估
在輸出閘道設定多項授權政策時,系統會根據政策設定檔類型,依序評估這些政策:
REQUEST_AUTHZ(標頭型) 政策:系統會先評估這類政策。舉例來說,IAP 擴充功能會先檢查呼叫代理的 mTLS 身分,並驗證其 IAM 允許政策,然後才會處理任何內容。如果要求未通過這項檢查,系統會立即拒絕。CONTENT_AUTHZ(內容型) 政策:接著會評估這類政策。如果要求通過標頭檢查,酬載就會串流至內容型授權擴充功能 (例如語意管理政策引擎),進行深度內容檢查和法規遵循評估。
事前準備
開始前,請確認您符合下列需求:
部署 Agent Gateway。請參閱「設定 Agent Gateway」。
您必須具備已部署 Agent Gateway 資源的
networkservices.agentGateways.useIAM 權限,才能將授權政策附加至閘道。
使用擴充功能設定授權政策
本節說明如何設定授權政策,將授權和內容安全決策委派給 Identity-Aware Proxy、Model Armor 和其他自訂服務。
將授權委派給 IAP
您可以設定要求授權擴充功能,將授權政策的存取權決策委派給 IAP。
下列步驟說明如何為 Agent Gateway 執行個體,設定授權擴充功能和授權政策。
事前準備:請先關閉「停用將存取權政策繫結至資源」 (
constraints/iam.managed.disableAccessPolicyBindings) 代管組織政策限制的強制執行功能。根據預設,新組織會啟用這項布林值限制,因此您無法將 IAM 統一存取權政策繫結至資源。詳情請參閱「使用布林值規則更新政策」。為代理和工具建立必要的 IAM 輸出政策。詳情請參閱「建立 IAM 代理政策」。
請參閱「在代理到任何位置 (輸出) 模式設定 Agent Gateway」,瞭解如何在建立 Agent Gateway 時啟用 IAP (使用存取授權參數)。
設定授權擴充功能,指向 IAP。
在 YAML 檔案中定義擴充功能。請使用提供的範例值。如要以模擬測試「僅限稽核」模式部署擴充功能,以便測試授權政策而不強制執行,可以在
metadata區塊中指定iamEnforcementMode欄位。cat >iap-request-authz-extension.yaml <<EOF name: my-iap-request-authz-ext service: iap.googleapis.com failOpen: false timeout: 1s metadata: iapPolicyVersion: "V2" EOF如要以模擬測試「僅限稽核」模式部署擴充功能,在不強制執行授權政策的情況下測試政策,可以在
metadata區塊中指定iamEnforcementMode欄位。這可讓您驗證政策,並盡可能降低因設定錯誤而中斷流量的風險:cat >iap-request-authz-extension.yaml <<EOF name: my-iap-request-authz-ext service: iap.googleapis.com failOpen: false timeout: 1s metadata: iapPolicyVersion: "V2" iamEnforcementMode: "DRY_RUN" EOF準備好開始強制執行政策時,請從
metadata區塊中移除iamEnforcementMode: "DRY_RUN"欄位。匯入授權擴充功能。使用
gcloud service-extensions authz-extensions import指令,並搭配下列範例值。gcloud service-extensions authz-extensions import my-iap-request-authz-ext \ --source=iap-request-authz-extension.yaml \ --location=LOCATION
在同一專案中,設定授權政策,將決策委派給擴充功能。
定義授權政策,將
my-iap-request-authz-ext擴充功能與閘道建立關聯。請使用提供的範例值。cat >iap-request-authz-policy.yaml <<EOF name: my-iap-request-authz-policy target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-iap-request-authz-ext" EOF將
PROJECT_ID替換為專案 ID。將授權政策匯入專案。使用
gcloud network-security authz-policies import指令,並搭配下列範例值。gcloud network-security authz-policies import my-iap-request-authz-policy \ --source=iap-request-authz-policy.yaml \ --location=LOCATION
將授權委派給 Model Armor
您可以設定授權擴充功能,將授權政策的內容安全性決策委派給 Model Armor。
以下範例說明如何使用 Agent Gateway 的授權政策,設定這類授權擴充功能。
控制台
如要透過 Google Cloud 控制台為 Agent Gateway 啟用 Model Armor,請按照下列步驟操作:
建立必要的 Model Armor 範本。
請參閱「設定 Agent Gateway」,瞭解如何在建立 Agent Gateway 時,勾選「啟用 Model Armor」核取方塊來啟用 Model Armor。Model Armor 範本支援「用戶端到代理」和「代理到任何位置」模式。
使用 Model Armor 時,您必須授予 Agent Gateway 服務帳戶必要權限,才能使用 Model Armor 範本。服務帳戶的格式為
service-PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com,其中 PROJECT_NUMBER 是您建立閘道的專案編號。即使閘道和範本位於同一個專案,也必須完成這個步驟。授予下列角色:
- 閘道所在專案的
roles/modelarmor.calloutUser和roles/serviceusage.serviceUsageConsumer角色。 - Model Armor 範本所在專案的
roles/modelarmor.user角色。
您必須使用 gcloud CLI 才能完成這個步驟。
gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.user更改下列內容:
GATEWAY_PROJECT_ID:您建立閘道的 專案 ID。GATEWAY_PROJECT_NUMBER:您建立閘道的專案編號。MODEL_ARMOR_PROJECT_ID:Model Armor 範本所在專案的專案 ID。
如果您將閘道用於 Agent Runtime,Agent Runtime 服務代理也需要這些權限,詳情請參閱「透過 Agent Gateway 轉送 Agent Runtime 流量」。
- 閘道所在專案的
gcloud
建立必要的 Model Armor 範本。
使用 Model Armor 時,您必須授予 Agent Gateway 服務帳戶必要權限,才能使用 Model Armor 範本。服務帳戶的格式為
service-PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com,其中 PROJECT_NUMBER 是您建立閘道的專案編號。即使閘道和範本位於同一個專案,也必須完成這個步驟。授予下列角色:
- 閘道所在專案的
roles/modelarmor.calloutUser和roles/serviceusage.serviceUsageConsumer角色。 - 在含有 Model Armor 範本的專案中,具備
roles/modelarmor.user角色。
gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep.iam.gserviceaccount.com \ --role=roles/modelarmor.user更改下列內容:
GATEWAY_PROJECT_ID:您建立閘道的 專案 ID。GATEWAY_PROJECT_NUMBER:您建立閘道的專案編號。MODEL_ARMOR_PROJECT_ID:Model Armor 範本所在專案的專案 ID。
- 閘道所在專案的
設定授權擴充功能,指向 Model Armor。
在 YAML 檔案中定義擴充功能。使用提供的範例值。
cat >ma-content-authz-extension.yaml <<EOF name: my-ma-content-authz-ext service: modelarmor.LOCATION.rep.googleapis.com metadata: model_armor_settings: '[ { "response_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID", "request_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID" } ]' failOpen: false timeout: 1s EOF匯入授權擴充功能。使用
gcloud service-extensions authz-extensions import指令,並搭配下列範例值。gcloud service-extensions authz-extensions import my-ma-content-authz-ext \ --source=ma-content-authz-extension.yaml \ --location=LOCATION
使用擴充功能設定授權政策。
定義授權政策,將擴充功能
my-ma-content-authz-ext與 Agent Gateway 建立關聯。代理至任意目的地
cat >ma-content-authz-policy.yaml <<EOF name: my-ma-content-authz-policy target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-ma-content-authz-ext" httpRules: - to: operations: [ { "paths": [ { "prefix": "/" } ] } ] when: > request.headers['content-type'] == 'application/json' || request.headers['content-type'].startsWith('text/') EOF注意事項:
policyProfile的值已設為CONTENT_AUTHZ。這表示自訂政策供應商會處理要求和回應流量,包括要求主體。httpRules參數示範如何使用 CEL 屬性建立條件,比對要轉送至 Model Armor 評估的特定流量。在這個範例中,規則會比對內容類型為application/json或text/的所有流量。建議您使用這類規則,將 Model Armor 評估範圍限制在相關流量。這樣一來,您就能將支援的 LLM API、MCP 和 A2A 流量轉送至 Model Armor,同時排除代理 gRPC 呼叫等內部流量。
用戶端至代理
cat >ma-content-authz-policy.yaml <<EOF name: my-ma-content-authz-policy target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-ma-content-authz-ext" EOFpolicyProfile的值已設為CONTENT_AUTHZ。這表示自訂政策供應商會處理要求和回應流量,包括要求主體。將授權政策匯入專案。使用
gcloud network-security authz-policies import指令,並搭配下列範例值。gcloud network-security authz-policies import my-ma-content-authz-policy \ --source=ma-content-authz-policy.yaml \ --location=LOCATION
將授權委派給自訂授權擴充功能
您可以設定自訂授權擴充功能,將決策委派給自訂服務。這些自訂擴充功能只能指定完整網域名稱 (FQDN)。
使用 FQDN 目標時,擴充功能會透過 TLS 加密,使用 HTTP2 通訊協定與通訊埠 443 上的端點通訊。不過,擴充功能不會驗證伺服器憑證。因此,為提高安全性,請務必確保解析的端點位於虛擬私有雲網路內。此外,請確認您已在 Agent Gateway 專案和虛擬私有雲網路之間設定 DNS 對接。
如要為特定 FQDN (例如
mycustomauthz.internal.net) 設定授權擴充功能和授權政策,請在擴充功能 YAML 檔案中,將該 FQDN 指定為service的值,如下例所示。這個範例假設您已在虛擬私有雲網路中部署伺服器,並在FULL_DUPLEX_STREAMED主體處理模式中實作ext_proc通訊協定。cat >custom-authz-extension.yaml <<EOF name: my-custom-authz-ext service: mycustomauthz.internal.net failOpen: false timeout: 1s EOF建立授權擴充功能,指向自訂服務。
gcloud beta service-extensions authz-extensions import custom-authz-extension \ --source=custom-authz-extension.yaml \ --location=LOCATION
建立擴充功能後,請設定
CUSTOM授權政策,將決策委派給授權擴充功能。cat >authz-policy.yaml <<EOF name: authz-with-extension target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/custom-authz-extension" EOF建立授權政策。
gcloud network-security authz-policies import authz-policy-with-extension \ --source=authz-policy.yaml \ --location=LOCATION
請注意,如本範例所示,當授權擴充功能使用 CONTENT_AUTHZ 設定檔與授權政策建立關聯時,閘道會叫用擴充功能來處理要求和回應酬載 (標頭和主體),以便對代理流量進行深度內容檢查、提示防護措施和資料清理。根據預設,CONTENT_AUTHZ 政策會使用 FULL_DUPLEX_STREAMED 模式的 Envoy ext_proc 通訊協定處理內文事件。
結合 IAP 授權與 Model Armor 防護機制
為確保安全性,建議您設定一項採用 REQUEST_AUTHZ 政策設定檔的 CUSTOM 授權政策,以及另一項採用 CONTENT_AUTHZ 政策設定檔的 CUSTOM 授權政策。
下列範例使用 IAP 做為集中式要求授權系統,並使用 Model Armor 做為 AI 護欄。如先前範例所示,您可以將這些服務替換為 Service Extensions,使用自己的自訂解決方案。
設定委派給 IAP 的
REQUEST_AUTHZ授權擴充功能,以及指向該擴充功能的授權政策。定義授權擴充功能。
metadata下方的iapPolicyVersion欄位為必填欄位。cat >iap-extension.yaml <<EOF name: iap-extension service: iap.googleapis.com failOpen: false timeout: 1s metadata: iapPolicyVersion: "V2" EOF建立授權擴充功能。
gcloud service-extensions authz-extensions import iap-extension \ --source=iap-extension.yaml \ --location=LOCATION
將
LOCATION替換為擴充功能所在的區域。設定委派給擴充功能的
REQUEST_AUTHZ授權政策。cat >authz-policy-request-authz.yaml <<EOF name: authz-iap target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/iap-extension" EOF更改下列內容:
PROJECT_ID:專案 ID。LOCATION:資源的位置。AGENT_GATEWAY_NAME:Agent Gateway 的名稱。
建立授權政策。
gcloud network-security authz-policies import authz-iap \ --source=authz-policy-request-authz.yaml \ --location=LOCATION
設定
CONTENT_AUTHZ授權擴充功能,委派給 Model Armor,並設定指向該擴充功能的授權政策。定義擴充功能。
cat >ma-extension-file.yaml <<EOF name: ma-extension service: modelarmor.LOCATION.rep.googleapis.com metadata: model_armor_settings: '[ { "response_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID", "request_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID" } ]' failOpen: false timeout: 1s EOF更改下列內容:
LOCATION:Model Armor 範本所在的區域。MODEL_ARMOR_PROJECT_ID:Model Armor 範本所在的專案 ID。RESPONSE_TEMPLATE_ID:回覆範本的 ID。REQUEST_TEMPLATE_ID:要求範本的 ID。
建立授權擴充功能。
gcloud service-extensions authz-extensions import ma-extension \ --source=ma-extension-file.yaml \ --location=LOCATION
設定委派給擴充功能的
CONTENT_AUTHZ授權政策。cat >authz-policy-content-authz.yaml <<EOF name: authz-ma target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/ma-extension" EOF建立授權政策。
gcloud network-security authz-policies import ma-authz-policy \ --source=authz-policy-content-authz.yaml \ --location=LOCATION
授權擴充功能與 CONTENT_AUTHZ 設定檔建立關聯後,就會接收所有 ext_proc 事件,包括要求和回應標頭、主體和結尾。如果以 ext_proc 為基礎的授權擴充功能可同時處理要求時授權和內容授權,建議您使用 CONTENT_AUTHZ 政策設定檔,設定單一 CUSTOM 授權政策。這項政策應指向多功能授權擴充功能。這種做法可透過單一擴充功能和 ext_proc 連線,同時啟用這兩種授權類型,進而改善延遲情形。
將授權委派給語意管理政策
您可以設定授權擴充功能,將授權政策的意圖限制和自然語言限制決策,委派給語意管理政策引擎 (semanticGovernancePolicyEngine)。
如要瞭解如何佈建政策引擎,並在閘道建立必要的 CONTENT_AUTHZ 授權政策和授權擴充功能繫結,請參閱「將政策引擎連結至 Agent Gateway」。
根據 MCP 通訊協定屬性授權
Agent Gateway 會剖析要求中的 MCP 通訊協定酬載,並將擷取的屬性提供給授權政策。
您可以根據 MCP 方法參數 (例如特定工具的名稱) 限制存取權。本節提供兩個範例,分別是 ALLOW 政策和 DENY。
設定授權政策。
ALLOW政策範例這個範例允許存取 MCP 伺服器上的特定工具組合和基本通訊協定功能,但不允許存取提示和資源。
編寫
ALLOW政策時,請務必指定baseProtocolMethodsOption: MATCH_BASE_PROTOCOL_METHODS,確保非存取專屬的 MCP RPC (例如初始化、記錄、完成、通知和連線偵測 (ping)) 繼續運作。否則無法建立 MCP 工作階段。cat >authz-policy-restrict-tools.yaml <<EOF name: my-authz-policy-restrict-tools target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ httpRules: - to: operations: - mcp: baseProtocolMethodsOption: MATCH_BASE_PROTOCOL_METHODS methods: - name: "tools/list" - name: "tools/call" params: - exact: "get_weather" - exact: "get_location" action: ALLOW EOFDENY政策範例這個範例會禁止所有提示/方法存取 Agent Gateway 後方的 MCP 伺服器。
cat >authz-policy-disallow-prompts.yaml <<EOF name: my-authz-policy-disallow-prompts target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ httpRules: - to: operations: - mcp: methods: - name: "prompts" action: DENY EOF建立授權政策。
gcloud network-security authz-policies import AUTHZ_POLICY_NAME \ --source=AUTH_POLICY_YAML_FILE_PATH \ --location=LOCATION
更改下列內容:
AUTHZ_POLICY_NAME:授權政策的名稱。AUTH_POLICY_YAML_FILE_PATH:授權政策 YAML 檔案的路徑。LOCATION:資源的位置。
限制
使用授權政策時,請注意下列限制:
每個閘道的授權政策數量上限取決於閘道模式:
- 如果是代理程式對任何位置 (egress) 閘道,無論政策設定檔 (
REQUEST_AUTHZ或CONTENT_AUTHZ) 為何,每個閘道最多可設定四項授權政策。 - 如果是用戶端對代理 (輸入) 閘道,最多可以設定一項
CONTENT_AUTHZ政策。
詳情請參閱「建議的輸入和輸出設定」。
- 如果是代理程式對任何位置 (egress) 閘道,無論政策設定檔 (
如果您搭配
CONTENT_AUTHZ設定檔使用自訂授權擴充功能,這些擴充功能必須支援ext_proc通訊協定和FULL_DUPLEX_STREAMED模式,才能處理主體事件。如果您設定多項使用相同設定檔的自訂授權政策,則無法保證執行順序。
此外,如要進一步瞭解授權擴充功能的限制,請參閱下列各節:
後續步驟
程式碼實驗室:使用 Agent Platform 管理代理工作負載
瞭解如何透過 Gemini Enterprise Agent Platform 的 Agent Gateway 控管代理工作負載。