設定語意管理政策

設定語意管理政策和政策引擎

本節說明從基礎架構準備到政策編寫的轉換過程。

必要條件

設定語意管理政策前,請先完成下列步驟。

啟用必要的 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 私人範圍。

  1. 建立虛擬私有雲網路:

    gcloud compute networks create NETWORK_NAME \
        --subnet-mode=auto \
        --project=PROJECT_ID
    

    將 NETWORK_NAME 替換為虛擬私有雲網路的名稱 (例如 agent-network)。

  2. 建立子網路:

    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)。

  3. 建立僅限 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 才能將流量轉送至政策引擎進行評估。

  1. 建立授權擴充功能:建立指向政策引擎 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_UNSPECIFIED
    
    gcloud service-extensions authz-extensions import AUTHZ_EXTENSION_NAME \
        --source=authz-ext.yaml \
        --location=LOCATION \
        --project=PROJECT_ID
    

    REST

    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 主機名稱。

    這個指令會傳回長時間執行的作業。請等待作業完成後再繼續操作。

  2. 建立授權政策:建立授權政策,將擴充功能繫結至 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_NAME
    
    gcloud network-security authz-policies import AUTHZ_POLICY_NAME \
        --source=authz-policy.yaml \
        --location=LOCATION \
        --project=PROJECT_ID
    

    REST

    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"]
            }
          }
        }'
    

    這個指令會傳回長時間執行的作業。請等待作業完成後再繼續操作。

建立政策

政策引擎啟用後,即可為代理定義技術和行為護欄。

  1. 定義範圍:判斷政策是否適用於代理執行的所有動作,或僅限特定工具。
  2. 編寫限制條件:以淺顯易懂的英文提供業務規則。

控制台

  1. 前往 Cloud de Confiance 控制台的「Semantic governance policies」(語意治理政策) 頁面。

    前往「Semantic governance policies」頁面

  2. 按一下「+ 新增政策」。
  3. 在「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分頁)。請參閱「資訊外洩風險」和「多項政策的拒絕訊息」。
  4. 點選「建立」。

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。

  1. 透過控制台:在「Policies」(政策) 頁面中選取政策。
  2. 在「Details」(詳細資料) 面板的「Observability」(觀測能力) 區段中,依序點選「Cloud Logging」>「View details」(查看詳細資料)。
  3. 在 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) 寫入追蹤記錄的權限。

  1. 啟用 Cloud Trace API:

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. 將 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」,且授權政策和/或擴充功能存在

如要對非預期的判定結果進行偵錯,請按照下列步驟操作:

  1. 在政策評估記錄中查看判定結果和理由。
  2. 追蹤要求:請參閱「啟用要求追蹤」。
  3. 使用模擬測試模式安全地驗證變更。
  4. 確認部署作業:引擎狀態為 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 所選位置不提供語意管理政策引擎服務。 請使用語意管理政策引擎服務支援的位置。

後續步驟