設定語意管理政策和政策引擎
本節說明從基礎架構準備到政策編寫的轉換過程。
必要條件
設定語意管理政策前,請先完成下列步驟。
啟用必要的 API
開始之前,請先啟用語意管理政策及其網路元件所需的 API:
gcloud services enable \
aiplatform.googleapis.com \
agentregistry.googleapis.com \
networkservices.googleapis.com \
networksecurity.googleapis.com \
compute.googleapis.com \
dns.googleapis.com \
--project=PROJECT_ID
將 IAM 權限授予 Vertex AI 服務帳戶 (僅限 Google 代管繫結)
如果在佈建期間使用 Google 代管繫結選項,請授予 Vertex AI 服務帳戶 (P4SA) 必要的角色,以便在專案中建立 Private Service Connect (PSC) 端點 (roles/compute.networkAdmin) 和 DNS 記錄集 (roles/dns.admin)。如果您使用「Self-managed binding」(自行管理繫結) 選項,則可略過這個步驟,因為您會自行建立這些網路資源。
建立服務身分 (冪等) 並授予角色:
export PROJECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
gcloud beta services identity create \
--service=aiplatform.googleapis.com \
--project=PROJECT_ID
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:service-${PROJECT_NUM}@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
--role="roles/compute.networkAdmin"
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:service-${PROJECT_NUM}@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
--role="roles/dns.admin"
對應的移除指令位於「清除」部分的「移除 IAM 繫結」中。
代理資格規定
如要顯示在Cloud de Confiance 控制台的 semantic governance policy 代理選取器中,代理的推論引擎必須同時設定 identity_type=AGENT_IDENTITY 和 agent_gateway_config 並部署。如果缺少其中一項, Cloud de Confiance 控制台會將代理從選取器中篩除。API 和 gcloud 會改為傳回明確錯誤。
如要部署符合這些需求的代理,請按照「透過 Agent Gateway 轉送 Agent Runtime 流量」一文操作。現有推論引擎的這兩個欄位都不可變更,因此如果部署的代理不含這些欄位,就必須重新部署,無法透過修補方式處理。
如要確認現有代理是否符合資格,請確認其推論引擎的 spec.effectiveIdentity 開頭為 agents.global.:
gcloud ai reasoning-engines describe REASONING_ENGINE_ID \
--region=LOCATION \
--project=PROJECT_ID \
--format='value(spec.effectiveIdentity)' \
| grep -q '^agents.global.' \
&& echo "Eligible" || echo "Not eligible"
支援的地區
語意管理政策引擎和語意管理政策支援下列區域位置:
| 地理位置 | 可用地區 |
|---|---|
| 美洲 | us-central1、us-east1、us-east4、us-west1 |
| 歐洲 | europe-southwest1、europe-west1、europe-west4、europe-west8 |
佈建和啟用
啟用語意管理政策引擎。這會佈建必要的執行階段環境。佈建作業通常會在 2 到 3 分鐘內完成。不過,如果需求量大或暖機集區正在重新填補,佈建作業最多可能需要 20 分鐘。選擇下列其中一種佈建方式:
- Google 代管繫結:Google 會在 Cloud de Confiance by S3NS 專案中建立基礎網路資源,並自動管理其生命週期。
- 自行管理繫結:直接在 Cloud de Confiance by S3NS 專案中建立及管理必要的網路資源 (
network、subnetwork和dnsZoneName)。
完成佈建後,請務必將政策引擎連結至 Agent Gateway。
Google 代管繫結
REST
curl -X PATCH \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine?updateMask=gatewayConfigs" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{ "gatewayConfigs": {
"GATEWAY_NAME": {
"network": "NETWORK_NAME",
"subnetwork": "SUBNETWORK_NAME",
"dnsZoneName": "DNS_NAME" }
}
}'
gcloud
gcloud beta ai semantic-governance-policy-engine update \
--location=LOCATION \
--project=PROJECT_ID \
--gateway-config="name='GATEWAY_NAME',network=NETWORK_NAME,subnetwork=SUBNETWORK_NAME,dns-zone-name=DNS_NAME"
更改下列內容:
GATEWAY_NAME:不重複的閘道名稱。DNS_NAME:要使用的私人 DNS 區域名稱。PROJECT_ID替換為 Cloud de Confiance by S3NS 專案 ID (projects/PROJECT_ID/global/networks/default)。如果您使用自訂網路和子網路,請據此替換完整的network和subnetwork資源路徑。
擷取自動產生的 DNS 主機名稱
使用 Google 代管繫結佈建引擎時,Google 會自動建立 Private Service Connect (PSC) 端點,並在私人 DNS 區域中註冊 DNS A 記錄。這筆記錄的 FQDN 會做為 SGP_DNS_HOSTNAME,並填入閘道設定的 dnsRecord 唯輸出欄位。
如要擷取自動產生的 DNS 主機名稱,請按照下列步驟操作:
gcloud
執行下列指令,說明政策引擎設定:
gcloud beta ai semantic-governance-policy-engine describe \
--location=LOCATION \
--project=PROJECT_ID
REST
傳送 GET 要求,擷取引擎資源:
curl "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
在回應中,找出 gatewayConfigs.GATEWAY_NAME.dnsRecord 下方的 dnsRecord 欄位。請儲存這個 FQDN,將政策引擎連線至 Agent Gateway 時,會需要將其設為 SGP_DNS_HOSTNAME。
自行管理的繫結
REST
curl -X PATCH "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"name": "projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine"
}'
gcloud
gcloud beta ai semantic-governance-policy-engine update \
--location=LOCATION \
--project=PROJECT_ID
這個指令會傳回長時間執行的作業。如要輪詢作業狀態,請將 OPERATION 替換為回應中的 name 值:
curl "https://LOCATION-aiplatform.googleapis.com/v1beta1/OPERATION" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
或者,您也可以檢查整體引擎狀態,直到 state 欄位傳回 ACTIVE 為止:
curl "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
設定網路 (僅限自行管理)
佈建政策引擎後,請設定 Agent Gateway 與政策引擎通訊所需的網路元件。
Google 會在 Google 代管的租戶專案中,自動建立 Google 代管路徑的 PSC 端點,但如果是自行管理路徑,您必須在自己的 Cloud de Confiance by S3NS 專案中手動建立及管理 PSC 端點。
1. 佈建虛擬私有雲網路和子網路
在這個步驟中,您將建立虛擬私有雲網路、子網路,以及僅限 Proxy 的子網路,用於代理流量。顯示的 IP 範圍 (10.11.12.0/24 和 10.11.13.0/24) 僅為示例。您可以使用任何符合網路設計的 RFC 1918 私人範圍。
建立虛擬私有雲網路:
gcloud compute networks create NETWORK_NAME \ --subnet-mode=auto \ --project=PROJECT_ID將
NETWORK_NAME替換為虛擬私有雲網路的名稱 (例如agent-network)。建立子網路:
gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --region=LOCATION \ --range=10.11.12.0/24 \ --project=PROJECT_ID將
SUBNET_NAME替換為子網路名稱 (例如agent-subnet)。建立僅限 Proxy 的子網路 (代管負載平衡器必須具備):
gcloud compute networks subnets create PROXY_SUBNET_NAME \ --network=NETWORK_NAME \ --region=LOCATION \ --range=10.11.13.0/24 \ --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE \ --project=PROJECT_ID將
PROXY_SUBNET_NAME替換為 Proxy 專用子網路的名稱 (例如agent-proxy-subnet)。
2. 佈建私人 DNS 區域
建立私人 DNS 區域,允許 Agent Gateway 解析政策引擎的主機名稱:
gcloud dns managed-zones create DNS_ZONE_NAME \
--description="Private zone for my internal agentic VPC services" \
--dns-name="internal.example.com." \
--visibility=private \
--networks=NETWORK_NAME \
--project=PROJECT_ID
Replace the following:
DNS_ZONE_NAME:DNS 區域的名稱 (例如my-private-zone)。internal.example.com.:區域的 DNS 名稱,包括結尾的點號。
3. 建立網路連結
建立網路連結,允許 Agent Gateway 連線至虛擬私有雲中的資源。連線偏好設定必須設為 ACCEPT_AUTOMATIC。
gcloud compute network-attachments create NETWORK_ATTACHMENT_NAME \
--region=LOCATION \
--subnets=SUBNET_NAME \
--connection-preference=ACCEPT_AUTOMATIC \
--project=PROJECT_ID
Replace the following:
NETWORK_ATTACHMENT_NAME:網路連結的名稱 (例如sgp-nw-attachment)。SUBNET_NAME:您在步驟 1 建立的子網路。
4. 建立靜態 IP、PSC 端點和 DNS 記錄
預留靜態 IP 位址,建立指向政策引擎服務連結的 Private Service Connect (PSC) 端點,並建立 DNS 記錄,確保端點可連線。
# Reserve a static IP address
gcloud compute addresses create STATIC_IP_NAME \
--region=LOCATION \
--subnet=SUBNET_NAME \
--purpose=GCE_ENDPOINT \
--project=PROJECT_ID
# Capture the reserved IP address
IP=$(gcloud compute addresses describe STATIC_IP_NAME \
--region=LOCATION \
--project=PROJECT_ID \
--format=value(address))
# Create the PSC endpoint
gcloud compute forwarding-rules create PSC_ENDPOINT_NAME \
--region=LOCATION \
--network=NETWORK_NAME \
--address=STATIC_IP_NAME \
--target-service-attachment=PSC_SERVICE_ATTACHMENT \
--project=PROJECT_ID
# Create a DNS A record for the policy engine
gcloud dns record-sets create SGP_DNS_HOSTNAME \
--zone=DNS_ZONE_NAME \
--type=A \
--ttl=300 \
--rrdatas=$IP \
--project=PROJECT_ID
更改下列內容:
STATIC_IP_NAME:預留 IP 位址的名稱 (例如sgp-psc-ip)。PSC_ENDPOINT_NAME:PSC 端點的名稱 (例如sgp-psc-endpoint)。PSC_SERVICE_ATTACHMENT:從佈建回應中儲存的pscServiceAttachment值。SGP_DNS_HOSTNAME:私人 DNS 區域下的主機名稱,格式為LOCATION.DNS_ZONE_SUFFIX,其中DNS_ZONE_SUFFIX是您在建立私人 DNS 區域時指定的 DNS 名稱。舉例來說,如果您的位置是us-west1,DNS 區域後置字串是internal.example.com,請使用us-west1.internal.example.com。
5. 在 Agent Gateway 設定虛擬私有雲連線
建立網路資源後,您必須在 Agent Gateway 註冊網路連結和 DNS 對接,才能透過私人網路連至政策引擎。
如需詳細操作說明,請參閱 Agent Gateway 設定指南中的「設定虛擬私有雲連線」。您至少必須:
- 使用 Agent Gateway 輸出設定,註冊在步驟 3 建立的網路連結。
- 註冊 DNS 對接,讓閘道可以解析在步驟 4 建立的私人 DNS 主機名稱。
將政策引擎連結至 Agent Gateway
設定網路後,您必須建立授權擴充功能和授權政策,Agent Gateway 才能將流量轉送至政策引擎進行評估。
建立授權擴充功能:建立指向政策引擎 DNS 主機名稱的授權擴充功能。請使用您在「設定網路」(步驟 4) 中建立 DNS 記錄時使用的
SGP_DNS_HOSTNAME。代理閘道會透過這項機制,將流量傳送至政策引擎進行評估。gcloud
在 YAML 檔案 (
authz-ext.yaml) 中定義擴充功能設定,然後匯入:name: AUTHZ_EXTENSION_NAME service: SGP_DNS_HOSTNAME authority: SGP_DNS_HOSTNAME failOpen: false loadBalancingScheme: LOAD_BALANCING_SCHEME_UNSPECIFIEDgcloud service-extensions authz-extensions import AUTHZ_EXTENSION_NAME \ --source=authz-ext.yaml \ --location=LOCATION \ --project=PROJECT_IDREST
curl -X POST \ "https://networkservices.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzExtensions?authzExtensionId=AUTHZ_EXTENSION_NAME" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "service": "SGP_DNS_HOSTNAME", "authority": "SGP_DNS_HOSTNAME", "failOpen": false, "loadBalancingScheme": "LOAD_BALANCING_SCHEME_UNSPECIFIED" }'將
SGP_DNS_HOSTNAME替換為您在「設定網路」步驟 4 中建立 A 記錄的 DNS 主機名稱。這個指令會傳回長時間執行的作業。請等待作業完成後再繼續操作。
建立授權政策:建立授權政策,將擴充功能繫結至 Agent Gateway。這會指示 Agent Gateway 透過政策引擎傳送流量,以便進行評估。
gcloud
在 YAML 檔案 (
authz-policy.yaml) 中定義授權政策設定,然後匯入:name: AUTHZ_POLICY_NAME target: loadBalancingScheme: LOAD_BALANCING_SCHEME_UNSPECIFIED resources: - projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME httpRules: - to: operations: - paths: - prefix: / when: "!request.headers['content-type'].startsWith('application/grpc') && (request.path.endsWith(':generateContent') || request.path.endsWith(':streamGenerateContent'))" action: CUSTOM policyProfile: CONTENT_AUTHZ customProvider: authzExtension: resources: - projects/PROJECT_ID/locations/LOCATION/authzExtensions/AUTHZ_EXTENSION_NAMEgcloud network-security authz-policies import AUTHZ_POLICY_NAME \ --source=authz-policy.yaml \ --location=LOCATION \ --project=PROJECT_IDREST
curl -X POST \ "https://networksecurity.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzPolicies?authzPolicyId=AUTHZ_POLICY_NAME" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "target": { "loadBalancingScheme": "LOAD_BALANCING_SCHEME_UNSPECIFIED", "resources": ["projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME"] }, "httpRules": [{ "to": { "operations": [{"paths": [{"prefix": "/"}]}] }, "when": "!request.headers['"'"'content-type'"'"'].startsWith('"'"'application/grpc'"'"') && (request.path.endsWith('"'"':generateContent'"'"') || request.path.endsWith('"'"':streamGenerateContent'"'"'))" }], "action": "CUSTOM", "policyProfile": "CONTENT_AUTHZ", "customProvider": { "authzExtension": { "resources": ["projects/PROJECT_ID/locations/LOCATION/authzExtensions/AUTHZ_EXTENSION_NAME"] } } }'這個指令會傳回長時間執行的作業。請等待作業完成後再繼續操作。
建立政策
政策引擎啟用後,即可為代理定義技術和行為護欄。
- 定義範圍:判斷政策是否適用於代理執行的所有動作,或僅限特定工具。
- 編寫限制條件:以淺顯易懂的英文提供業務規則。
控制台
- 前往 Cloud de Confiance 控制台的「Semantic governance policies」(語意治理政策) 頁面。
- 按一下「+ 新增政策」。
- 在「Add Policy」(新增政策) 側邊面板中,設定下列項目:
- Name:輸入政策的專屬 ID。名稱只能使用小寫英文字母、數字和連字號。
- 說明:(選用) 簡短說明政策用途。
- 選取代理:選取要套用這項規則的特定代理或所有代理。如果挑選器空白或缺少預期的代理,請參閱「代理資格規定」。
- 存取目標:
- 如要將限制套用至所有動作,請勾選「Apply constraints to all tools」(將限制套用至所有工具) 核取方塊。
- 如要指定特定資源,請從下拉式選單中選取「MCP 伺服器」和個別「工具」。
- 限制:以自然語言輸入業務規則 (最多 5,000 個字元)。
- 拒絕訊息:(選用) 輸入訊息 (最多 1,000 個字元),在要求因這項政策而遭拒時,向使用者顯示這則訊息,而非政策依據。在 REST API 中,這會對應至政策資源上的
agentResponseCustomization.denialMessage;使用 Google Cloud CLI 時,請在gcloud beta ai semantic-governance-policies create或gcloud beta ai semantic-governance-policies update上使用--agent-response-denial-message(請參閱下方的「gcloud」gcloud分頁)。請參閱「資訊外洩風險」和「多項政策的拒絕訊息」。
- 點選「建立」。
gcloud
您可以使用 gcloud beta ai semantic-governance-policies create 指令,在代理範圍 (適用於所有工具) 或工具範圍設定限制。
找出服務專員 ID
如要建立政策,您需要從 Agent Registry 取得代理的專屬 ID。列出專案中的代理,找出 ID:
gcloud alpha agent-registry agents list \
--project=PROJECT_ID \
--location=LOCATION
代理 ID 是 name 欄位的最後一個區段 (例如 agentregistry-00000000-0000-0000-abcd-012345678901)。請將這個值用於完整代理名稱 projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID 的 AGENT_ID 區段,下列指令會將這個名稱傳遞至 --agent。
執行語意管理政策指令前,請先設定區域 API 端點覆寫:
gcloud config set api_endpoint_overrides/aiplatform \
https://LOCATION-aiplatform.googleapis.com/
建立代理程式範圍政策
gcloud beta ai semantic-governance-policies create POLICY_ID \
--location=LOCATION \
--display-name="Semantic governance policy for ShippingAgent-1" \
--description="Applies to all tool calls from the Cymbal shipping assistant agent" \
--agent=projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID \
--natural-language-constraint="Always use UPS as the shipping provider for shipments within the USA. Always use DHL as the shipping provider for shipments within the EU." \
--project=PROJECT_ID
如要設定拒絕訊息 (請參閱「控制台」分頁下方的「拒絕訊息」項目符號,以及「具有多項政策的拒絕訊息」),請新增 --agent-response-denial-message:
gcloud beta ai semantic-governance-policies create POLICY_ID \
--location=LOCATION \
--display-name="Semantic governance policy for ShippingAgent-1" \
--agent=projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID \
--natural-language-constraint="Always use UPS as the shipping provider for shipments within the USA. Always use DHL as the shipping provider for shipments within the EU." \
--agent-response-denial-message="Sorry, I can only book shipments through the approved carriers for your region." \
--project=PROJECT_ID
您也可以使用 gcloud beta ai semantic-governance-policies update,在現有政策中新增或更新 --agent-response-denial-message。
尋找 MCP 伺服器
gcloud alpha agent-registry mcp-servers list \
--project=PROJECT_ID \
--location=LOCATION
建立工具範圍政策
gcloud beta ai semantic-governance-policies create POLICY_ID \
--location=LOCATION \
--display-name="DISPLAY_NAME" \
--description="DESCRIPTION" \
--agent=projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID \
--mcp-tools="mcp-server=MCP_SERVER,tools=TOOL_NAME" \
--natural-language-constraint="NLC_TEXT" \
--project=PROJECT_ID
有多項政策的拒絕訊息
如果單一要求觸發多項政策的拒絕,政策引擎會先合併這些政策設定的拒絕訊息,再將回應傳回給使用者。系統會按照以下方式運作:
- 系統會一併顯示各項政策的拒絕訊息和拒絕判定,並以空白行分隔。
- 重複的訊息只會顯示一次。
- 如果部分觸發政策已設定拒絕訊息,其他政策則未設定,系統會附加一般訊息「這項要求因其他業務政策而遭拒」,涵蓋未設定拒絕訊息的政策。
- 每項要求最多顯示 5 則拒絕訊息,其餘訊息會省略。
啟用模擬測試模式
您可以啟用模擬測試模式 (DRY_RUN)。模擬測試是僅限稽核或模擬模式,可讓您評估政策,而不強制執行。在這種模式下,政策引擎會根據限制評估所有工具呼叫,並記錄判定結果,但不會封鎖動作。這樣一來,您就能先測試及驗證限制,再啟用強制執行功能。
如要啟用模擬測試模式,請將 sgpEnforcementMode: DRY_RUN 新增至授權擴充功能的中繼資料:
curl -X PATCH \
"https://networkservices.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzExtensions/AUTHZ_EXTENSION_NAME?updateMask=metadata" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"metadata": {
"sgpEnforcementMode": "DRY_RUN"
}
}'
在模擬測試模式下:
- 無論判定結果為何,系統都會允許所有工具呼叫。
- 系統會記錄裁決和理由,供您查看。
- 您可以查看記錄,找出哪些動作會遭到封鎖,並在切換至強制執行模式前,調整限制。
如要切換回一般強制執行模式,請從中繼資料中移除 sgpEnforcementMode:
curl -X PATCH \
"https://networkservices.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/authzExtensions/AUTHZ_EXTENSION_NAME?updateMask=metadata" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"metadata": {}
}'
查看政策評估記錄
政策引擎會將每項評估的結構化記錄項目,寫入專案的 Cloud Logging。項目會記錄整體 verdict 和 evaluations 陣列,其中包含每個工具或動作的 verdict 和 rationale。
- 透過控制台:在「Policies」(政策) 頁面中選取政策。
- 在「Details」(詳細資料) 面板的「Observability」(觀測能力) 區段中,依序點選「Cloud Logging」>「View details」(查看詳細資料)。
在 Logs Explorer 中:在查詢方塊中輸入
semantic-governance-policy,或使用下列明確篩選器:logName="projects/PROJECT_ID/logs/semantic-governance-policy"
以下是記錄項目範例:
{
"jsonPayload": {
"token_usage": 1859,
"verdict": "ALLOW",
"token_usage_breakdown": {"output": 43, "thinking": 0, "input": 1816, "total": 1859},
"evaluations": [
{
"toolName": "process_refund",
"verdict": "ALLOW",
"actionName": "process_refund",
"rationale": "The action is aligned with the user's request to process a refund and complies with the constraints regarding order ID length."
}
]
},
"resource": {"type": "global", "labels": {"project_id": "PROJECT_NUMBER"}},
"logName": "projects/PROJECT_ID/logs/semantic-governance-policy"
}
關鍵欄位:
verdict:整體決策,ALLOW或DENY。evaluations[].rationale:政策引擎對各項工具或動作做出特定判定的理由。token_usage:評估作業消耗的模型權杖數量。
啟用要求追蹤
政策引擎會將評估的每項要求追蹤記錄匯出至專案中的 Cloud Trace,方便您檢查每項要求的延遲時間和政策強制執行情形。如要接收這些追蹤記錄,請啟用 Cloud Trace API,並授予 Vertex AI 服務帳戶 (P4SA) 寫入追蹤記錄的權限。
啟用 Cloud Trace API:
gcloud services enable cloudtrace.googleapis.com \ --project=PROJECT_ID將 Cloud Trace 代理程式角色 (
roles/cloudtrace.agent) 授予 Vertex AI 服務帳戶。這個角色只會授予追蹤記錄寫入權限 (cloudtrace.traces.patch):export PROJECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)") gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:service-${PROJECT_NUM}@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \ --role="roles/cloudtrace.agent"
兩者都設定完成後,請透過代理傳送要求,並在專案的 Trace 探索工具中查看追蹤記錄。
管理政策設定
語意管理政策開始運作後,您可以刪除個別政策,或中斷引擎與 Agent Gateway 的連線。
刪除政策
如要移除個別政策,而不影響整體語意管理政策整合:
gcloud beta ai semantic-governance-policies delete POLICY_ID \
--location=LOCATION \
--project=PROJECT_ID
或者,您也可以使用下列 curl 指令:
curl -X DELETE \
"https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicies/POLICY_ID" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)"
取消佈建政策引擎
REST
curl -X POST "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine:deprovision" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" \
-d '{}'
gcloud
gcloud beta ai semantic-governance-policy-engine deprovision \
--location=LOCATION \
--project=PROJECT_ID
中斷政策引擎與 Agent Gateway 的連線
您可以中斷政策引擎與 Agent Gateway 的連線,停止根據限制評估工具呼叫。
刪除將語意管理政策強制執行作業繫結至 Agent Gateway 的授權政策:
gcloud network-security authz-policies delete AUTHZ_POLICY_NAME \
--location=LOCATION \
--project=PROJECT_ID
如要日後重新連結政策引擎,請按照「將政策引擎連結至 Agent Gateway」一節的說明,重新建立授權政策。
(選用) 刪除授權擴充功能
刪除設定期間建立的授權擴充功能。
gcloud network-services authz-extensions delete AUTHZ_EXTENSION_NAME \
--location=LOCATION \
--project=PROJECT_ID
(選用) 清理客戶管理的資源
取消佈建引擎只會拆除 Google 代管的支援資源。如果不再需要設定期間在自有專案中建立的資源,請手動刪除。
移除私人 DNS 區域
gcloud dns managed-zones delete DNS_ZONE_NAME \
--project=PROJECT_ID
移除子網路和虛擬私有雲
gcloud compute networks subnets delete SUBNET_NAME \
--region=LOCATION \
--project=PROJECT_ID
gcloud compute networks delete NETWORK_NAME \
--project=PROJECT_ID
(選用) 移除 IAM 繫結
如果您已將權限授予 Vertex AI 服務帳戶 (P4SA),可以移除這些權限:
export PROJECT_NUM=$(gcloud projects describe PROJECT_ID --format="value(projectNumber)")
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="serviceAccount:service-${PROJECT_NUM}@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
--role="roles/compute.networkAdmin"
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="serviceAccount:service-${PROJECT_NUM}@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
--role="roles/dns.admin"
gcloud projects remove-iam-policy-binding PROJECT_ID \
--member="serviceAccount:service-${PROJECT_NUM}@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com" \
--role="roles/cloudtrace.agent"
(選用) 停用 Cloud Trace API
gcloud services disable cloudtrace.googleapis.com --project=PROJECT_ID
(選用) 停用 Agent Platform API
gcloud services disable aiplatform.googleapis.com --project=PROJECT_ID
偵錯政策違規處置
| 問題 | 可能原因 | 檢查項目 |
|---|---|---|
| 工具呼叫已允許,但預期會遭到封鎖 | 政策與範圍和代理不符,或限制過於寬鬆 | 在評估記錄中,確認政策相符並閱讀判定結果; |
| 工具呼叫遭拒,但預期應允許 | 限制過於嚴格或規則衝突 | 讀取記錄中的 rationale;調整 NLC;在模擬測試模式中反覆執行 |
| 完全沒有 | 引擎未啟用或閘道未繫結 | 確認引擎「state」為「ACTIVE」,且授權政策和/或擴充功能存在 |
如要對非預期的判定結果進行偵錯,請按照下列步驟操作:
錯誤目錄
下表列出管理語意管理政策時可能遇到的錯誤,以及解決步驟:
| 錯誤名稱 | 說明 | 建議做法 |
|---|---|---|
SEMANTIC_GOVERNANCE_POLICY_ALREADY_EXISTS |
您指定的政策 ID 已存在於這項專案和位置。 | 請使用不重複的政策 ID,或使用 PATCH 要求更新現有政策。 |
SEMANTIC_GOVERNANCE_POLICY_ETAG_MISMATCH |
要求中的 etag 與目前的資源版本不符。 | 嘗試更新前,請先擷取最新版政策,取得目前的 ETag。 |
SEMANTIC_GOVERNANCE_POLICY_AGENT_REQUIRED |
要求中缺少 agent 欄位。 |
指定要套用這項政策的代理資源名稱。 |
SEMANTIC_GOVERNANCE_POLICY_CONSTRAINT_REQUIRED |
缺少「natural_language_constraint」欄位。 |
在限制欄位中,以淺顯易懂的英文提供業務規則。 |
SEMANTIC_GOVERNANCE_POLICY_AGENT_INVALID_NAME |
代理資源名稱格式不正確。 | 請確認格式:projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID。 |
SEMANTIC_GOVERNANCE_POLICY_AGENT_UNSUPPORTED_REGION |
Agent Registry 不支援為代理指定的區域。 | 請使用 Agent Registry 和語意管理政策皆支援的區域。 |
SEMANTIC_GOVERNANCE_POLICY_AGENT_NOT_FOUND |
找不到指定的代理。 | 確認代理程式存在於指定專案和位置的代理程式登錄檔中。 |
SEMANTIC_GOVERNANCE_POLICY_AGENT_NOT_CONFIGURED |
代理缺少有效的 RuntimeIdentity。 |
請先為代理程式設定有效的執行階段身分,再套用政策。 |
SEMANTIC_GOVERNANCE_POLICY_MCP_SERVER_NOT_FOUND |
找不到指定的 MCP 伺服器。 | 確認 MCP 伺服器已在專案的 Agent Registry 中註冊。 |
SEMANTIC_GOVERNANCE_POLICY_MCP_SERVER_INVALID_NAME |
MCP 伺服器資源名稱格式錯誤。 | 請確認格式:projects/PROJECT_ID/locations/LOCATION/mcpServers/SERVER_ID。 |
SEMANTIC_GOVERNANCE_POLICY_MCP_SERVER_UNSUPPORTED_REGION |
不支援為 MCP 伺服器指定的區域。 | 請為 MCP 伺服器使用支援的地區。 |
SEMANTIC_GOVERNANCE_POLICY_REGISTRY_DENIED |
缺少權限,因此系統無法查詢代理登錄檔。 | 啟用 Agent Registry API,並確認帳戶具備 agentregistry.viewer 角色。 |
SEMANTIC_GOVERNANCE_POLICY_ENGINE_NOT_ENABLED_IN_REGION |
政策引擎在要求的區域中未啟用。 | 請按照「佈建和啟用」一節的步驟,在您所在區域啟用引擎。 |
SEMANTIC_GOVERNANCE_POLICY_ENGINE_SERVICE_NOT_AVAILABLE_IN_LOCATION |
所選位置不提供語意管理政策引擎服務。 | 請使用語意管理政策引擎服務支援的位置。 |
後續步驟
- 進一步瞭解 Vertex AI gcloud CLI 指令。
- 在記錄檔探索工具中監控政策判定結果。