請參閱本頁,瞭解如何使用 Service Extensions,將 Agent Gateway 的授權委派給 Identity-Aware Proxy、Model Armor 和其他自訂授權引擎。
授權政策和擴充功能
授權政策可讓您對 Agent Gateway 發布的端點流量,強制執行集中式存取控管和管理政策。如要處理複雜的存取控管、內容安全和控管決策,您可以使用 Agent Gateway 透過授權擴充功能設定授權政策,將授權和內容安全決策委派給您選擇的指定授權引擎。
授權擴充功能會攔截通過 Agent Gateway 部署作業的要求,並即時對指定授權服務發出 gRPC 呼叫。這項服務可檢查、修改或封鎖流量,再將流量導向目的地。您可以將授權委派給 Identity-Aware Proxy、Model Armor 和語意控管政策等 Google Cloud 服務,也可以委派給您選擇的任何自訂授權引擎。
授權政策會使用政策設定檔,判斷傳送至授權擴充功能的流量資料類型:
- 以要求為準的授權 (
REQUEST_AUTHZ):在處理任何應用程式酬載之前,評估 HTTP 要求標頭。這個設定檔用於身分驗證和存取控管,例如將授權委派給 Identity-Aware Proxy。 - 內容型授權 (
CONTENT_AUTHZ):評估完整的 HTTP 要求和回應酬載。這個設定檔用於深入檢查內容和 AI 安全性,例如委派給 Model Armor,確保提示和回覆安全無虞,或委派給語意控管政策,強制執行自然語言限制。
自訂授權引擎可使用 REQUEST_AUTHZ 或 CONTENT_AUTHZ 擴充功能,視檢查標頭或完整應用程式酬載而定。
您可以分別為要求型和內容型政策設定授權擴充功能,也可以在閘道上合併兩者,全面提升安全性。如需建議設定,請參閱「建議的輸入和輸出設定」。
如要進一步瞭解授權政策、政策設定檔及其用途,請參閱「授權政策總覽」。
建議的輸入和輸出設定
如要確保整個代理程式生命週期安全無虞,建議採用下列多閘道架構模式:
用戶端至代理閘道:用戶端至代理 (輸入) 閘道僅支援單一
CONTENT_AUTHZ政策。也就是說,您無法在 Ingress 上同時使用 Model Armor 和語意控管政策。強烈建議使用 Model ArmorCONTENT_AUTHZ政策,防範提示詞注入攻擊。不過,如要改用語意控管政策擴充功能,請務必確認閘道上未設定 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 和語意控管政策則篩選傳出的回覆。
輸出政策評估
在輸出閘道上設定多項授權政策時,系統會根據政策設定檔類型依序評估政策:
REQUEST_AUTHZ(以標頭為準) 政策:系統會優先評估這類政策。舉例來說,IAP 擴充功能會先檢查呼叫代理程式的 mTLS 身分,並驗證其 IAM 允許政策,然後才處理任何內容。如果要求未通過這項檢查,系統會立即拒絕。CONTENT_AUTHZ(內容相關) 政策:這類政策會接著接受評估。如果要求通過標頭檢查,系統會將酬載串流至以內容為基礎的授權擴充功能 (例如語意控管政策引擎),進行深入的內容檢查和法規遵循評估。
事前準備
開始前,請確認符合下列規定:
Agent Gateway 已部署完成。請參閱「設定代理程式閘道」。
您必須對已部署的 Agent Gateway 資源具備
networkservices.agentGateways.useIAM 權限,才能將授權政策附加至閘道。
透過擴充功能設定授權政策
本節說明如何設定授權政策,將授權和內容安全決策委派給 Identity-Aware Proxy、Model Armor 和其他自訂服務。
將授權委派給 IAP
您可以設定要求授權擴充功能,將授權政策的存取決策委派給 IAP。
下列步驟說明如何為 Agent Gateway 執行個體設定授權政策,並使用授權擴充功能。
事前準備:關閉「Disable binding access policy to resource」(禁止將存取權政策繫結至資源) (
constraints/iam.managed.disableAccessPolicyBindings) 受管理機構政策限制的強制執行功能。這項布林值限制預設會為新機構啟用,並禁止您將 IAM 統一存取權政策繫結至資源。詳情請參閱「使用布林值規則更新政策」。為代理和工具建立必要的 IAM 輸出政策。詳情請參閱「建立 IAM 代理程式政策」。
請參閱「在 Agent-to-Anywhere (Egress) 模式中設定 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 範本。
如要啟用 Model Armor,請參閱「設定 Agent Gateway」,並在建立 Agent Gateway 時勾選「啟用 Model Armor」核取方塊。Client-to-Agent 和 Agent-to-Anywhere 模式都支援 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角色,其中包含閘道。 - 專案中的
roles/modelarmor.user角色,內含 Model Armor 範本。
您必須使用 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角色,其中包含閘道。 - 專案中的
roles/modelarmor.user角色,該專案包含 Model Armor 範本。
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 目標時,擴充功能會使用 HTTP2 通訊協定和 TLS 加密,與通訊埠 443 上的端點通訊。不過,擴充功能不會驗證伺服器憑證。 因此,為提升安全性,您必須確保解析的端點位於虛擬私有雲網路內。此外,請確認您已在 Agent Gateway 專案和 VPC 網路之間設定 DNS 對接。
如要為特定 FQDN (例如
mycustomauthz.internal.net) 設定授權擴充功能和授權政策,請在擴充功能 YAML 檔案中將該 FQDN 指定為service的值,如下列範例所示。本範例假設您已在 VPC 網路中部署伺服器,並以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 政策設定檔的自訂授權政策,以及具有 CONTENT_AUTHZ 政策設定檔的另一個自訂授權政策。
以下範例使用 IAP 做為集中式要求授權系統,並使用 Model Armor 做為 AI 防護措施。如先前的範例所示,您可以將這些項目都換成服務擴充功能,使用自己的自訂解決方案。
設定
REQUEST_AUTHZ授權擴充功能,委派給 IAP,以及指向該擴充功能的授權政策。定義授權擴充功能。
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,確保初始化、記錄、完成、通知和 Ping 等非存取專屬 MCP RPC 仍可運作。否則將無法建立 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:資源的位置。
限制
使用授權政策時,請注意下列限制:
每個閘道的授權政策數量上限取決於閘道模式:
- 如果是 Agent-to-Anywhere (輸出) 閘道,每個閘道最多可設定四項授權政策,無論政策設定檔是
REQUEST_AUTHZ或CONTENT_AUTHZ皆然。 - 如果是「用戶端到代理程式」(輸入) 閘道,最多可以設定一項
CONTENT_AUTHZ政策。
詳情請參閱「建議的輸入和輸出設定」。
- 如果是 Agent-to-Anywhere (輸出) 閘道,每個閘道最多可設定四項授權政策,無論政策設定檔是
如果您使用
CONTENT_AUTHZ設定檔的自訂授權擴充功能,這些擴充功能必須支援ext_proc通訊協定和FULL_DUPLEX_STREAMED模式,才能處理主體事件。如果您設定多項使用相同設定檔的自訂授權政策,系統不保證執行順序。
此外,如要進一步瞭解授權擴充功能的限制,請參閱下列章節:
後續步驟
程式碼研究室:透過 Agent Platform 管理代理程式工作負載
瞭解如何透過 Gemini Enterprise Agent Platform 上的 Agent Gateway,控管代理工作負載。