Configura le policy di governance semantica

Configura le norme di governance semantica e il Policy Engine

Questa sezione tratta la transizione dalla preparazione dell'infrastruttura alla creazione delle norme.

Prerequisiti

Prima di configurare le norme di governance semantica, completa i seguenti passaggi.

Abilita le API richieste

Prima di iniziare, abilita le API richieste per le norme di governance semantica e i relativi componenti di rete:

gcloud services enable \
    aiplatform.googleapis.com \
    agentregistry.googleapis.com \
    networkservices.googleapis.com \
    networksecurity.googleapis.com \
    compute.googleapis.com \
    dns.googleapis.com \
    --project=PROJECT_ID

Concedi le autorizzazioni IAM al account di servizio Vertex AI (solo binding gestito da Google)

Se utilizzi l'opzione Associazione gestita da Google durante il provisioning, concedi al account di servizio Vertex AI (P4SA) i ruoli necessari per creare l'endpoint Private Service Connect (PSC) (roles/compute.networkAdmin) e il set di record DNS (roles/dns.admin) nel tuo progetto. Se utilizzi l'opzione Binding autogestito, puoi saltare questo passaggio perché crei tu stesso queste risorse di rete.

Crea l'identità di servizio (idempotente) e concedi i ruoli:

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"

I comandi di rimozione corrispondenti si trovano in Rimuovi le associazioni IAM nella sezione di pulizia.

Requisiti di idoneità per gli agenti

Per essere visualizzato nel selettore di agenti di una norma di governance semantica nella consoleCloud de Confiance , il motore di ragionamento di un agente deve essere stato implementato con entrambi identity_type=AGENT_IDENTITY e agent_gateway_config impostati. Se manca uno dei due, la console Cloud de Confiance filtra l'agente dal selettore. L'API e gcloud restituiscono invece un errore esplicito.

Per eseguire il deployment di un agente che soddisfi questi requisiti, segui le istruzioni riportate in Instradare il traffico di Agent Runtime tramite Agent Gateway. Entrambi i campi sono immutabili in un motore di ragionamento esistente, quindi un agente di cui è stato eseguito il deployment senza questi campi deve essere ridistribuito. L'applicazione di patch non funzionerà.

Per verificare l'idoneità di un agente esistente, conferma che il motore di ragionamento spec.effectiveIdentity inizia con 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"

Località supportate

Il motore delle policy di governance semantica e le norme di governance semantica sono supportati nelle seguenti località regionali:

Area geografica Regioni disponibili
Americhe us-central1, us-east1, us-east4, us-west1
Europa europe-southwest1, europe-west1, europe-west4, europe-west8

Provisioning e abilitazione

Attiva il Policy Engine delle norme di governance semantica. In questo modo viene eseguito il provisioning dell'ambiente runtime necessario. In genere, il provisioning richiede circa 2-3 minuti. Tuttavia, quando la domanda è elevata o il pool di preriscaldamento si sta riempiendo, il provisioning può richiedere fino a 20 minuti. Scegli una delle seguenti opzioni di provisioning:

  • Binding gestito da Google: Google crea le risorse di rete sottostanti nel tuo progetto Cloud de Confiance by S3NS e ne gestisce automaticamente il ciclo di vita.
  • Binding autogestito: crei e gestisci le risorse di rete necessarie (network, subnetwork e dnsZoneName) direttamente nel tuo progetto Cloud de Confiance by S3NS .

Dopo aver completato il provisioning, devi collegare il motore dei criteri a Agent Gateway.

Associazione gestita da 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"

Sostituisci quanto segue:

  • GATEWAY_NAME con un nome gateway univoco.
  • DNS_NAME con il nome della zona DNS privata da utilizzare.
  • PROJECT_ID con l'ID progetto Cloud de Confiance by S3NS (projects/PROJECT_ID/global/networks/default). Se utilizzi una rete e una subnet personalizzate, sostituisci i percorsi delle risorse network e subnetwork completi di conseguenza.
Recupera il nome host DNS generato automaticamente

Quando esegui il provisioning dell'engine con l'associazione gestita da Google, Google crea automaticamente un endpoint Private Service Connect (PSC) e registra un record DNS A nella tua zona DNS privata. L'FQDN di questo record funge da SGP_DNS_HOSTNAME e viene compilato nel campo di sola uscita dnsRecord della configurazione del gateway.

Per recuperare il nome host DNS generato automaticamente:

gcloud

Esegui questo comando per descrivere la configurazione del Policy Engine:

gcloud beta ai semantic-governance-policy-engine describe \
    --location=LOCATION \
    --project=PROJECT_ID

REST

Invia una richiesta GET per recuperare la risorsa del motore:

curl "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/semanticGovernancePolicyEngine" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)"

Nella risposta, individua il campo dnsRecord in gatewayConfigs.GATEWAY_NAME.dnsRecord. Salva questo FQDN, ti servirà come SGP_DNS_HOSTNAME quando connetti il Policy Engine ad Agent Gateway.

Binding autogestito

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

Questo comando restituisce un'operazione a lunga esecuzione. Puoi eseguire il polling dello stato dell'operazione sostituendo OPERATION con il valore name della risposta:

curl "https://LOCATION-aiplatform.googleapis.com/v1beta1/OPERATION" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json"

In alternativa, controlla lo stato generale dell'engine finché il campo state non restituisce 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"

Configurazione della rete (solo autogestita)

Dopo il provisioning del motore delle policy, configura i componenti di rete necessari per consentire ad Agent Gateway di comunicare con il motore delle policy.

Mentre Google crea automaticamente l'endpoint PSC in un progetto tenant gestito da Google per il percorso gestito da Google, per il percorso autogestito devi creare e gestire manualmente l'endpoint PSC nel tuo Cloud de Confiance by S3NS progetto.

1. Esegui il provisioning della rete VPC e della subnet

In questo passaggio, crei una rete VPC, una subnet e una subnet solo proxy per il traffico agentic. Gli intervalli IP mostrati (10.11.12.0/24 e 10.11.13.0/24) sono esempi. Puoi utilizzare qualsiasi intervallo privato RFC 1918 adatto alla progettazione della tua rete.

  1. Crea la rete VPC:

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

    Sostituisci NETWORK_NAME con il nome della tua rete VPC (ad esempio, agent-network).

  2. Crea la subnet:

    gcloud compute networks subnets create SUBNET_NAME \
        --network=NETWORK_NAME \
        --region=LOCATION \
        --range=10.11.12.0/24 \
        --project=PROJECT_ID
    

    Sostituisci SUBNET_NAME con il nome della subnet (ad esempio, agent-subnet).

  3. Crea la subnet solo proxy (obbligatoria per i bilanciatori del carico gestiti):

    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
    

    Sostituisci PROXY_SUBNET_NAME con il nome della subnet solo proxy (ad esempio, agent-proxy-subnet).

2. Esegui il provisioning della zona DNS privata

Crea una zona DNS privata per consentire ad Agent Gateway di risolvere il nome host del Policy Engine:

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: il nome della zona DNS (ad esempio, my-private-zone).
  • internal.example.com.: il nome DNS della zona, incluso il punto finale.

3. Crea collegamento di rete

Crea un collegamento di rete per consentire ad Agent Gateway di connettersi alle risorse nel tuo VPC. La preferenza di connessione deve essere impostata su 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: il nome del collegamento di rete (ad esempio sgp-nw-attachment).
  • SUBNET_NAME: la subnet creata nel passaggio 1.

4. Crea IP statico, endpoint PSC e record DNS

Prenota un indirizzo IP statico, crea un endpoint Private Service Connect (PSC) che punta al service attachment del Policy Engine e crea un record DNS per renderlo raggiungibile.

# 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

Sostituisci quanto segue:

  • STATIC_IP_NAME: il nome dell'indirizzo IP prenotato (ad esempio, sgp-psc-ip).
  • PSC_ENDPOINT_NAME: il nome dell'endpoint PSC (ad esempio, sgp-psc-endpoint).
  • PSC_SERVICE_ATTACHMENT: il valore pscServiceAttachment salvato dalla risposta di provisioning.
  • SGP_DNS_HOSTNAME: un nome host nella tua zona DNS privata, nel formato LOCATION.DNS_ZONE_SUFFIX, dove DNS_ZONE_SUFFIX è il nome DNS che hai specificato durante la creazione della zona DNS privata. Ad esempio, se la tua posizione è us-west1 e il suffisso della zona DNS è internal.example.com, utilizza us-west1.internal.example.com.

5. Configura la connettività VPC su Agent Gateway

Dopo aver creato le risorse di rete, devi registrare il collegamento di rete e il peering DNS sul tuo Agent Gateway in modo che possa raggiungere il Policy Engine tramite la rete privata.

Per istruzioni dettagliate, consulta Configura la connettività VPC nella guida alla configurazione di Agent Gateway. Come minimo, devi:

  • Registra il collegamento di rete creato nel passaggio 3 con la configurazione di uscita di Agent Gateway.
  • Registra il peering DNS in modo che il gateway possa risolvere il nome host DNS privato creato nel passaggio 4.

Connetti il Policy Engine ad Agent Gateway

Dopo aver configurato la rete, devi creare un'estensione di autorizzazione e una policy di autorizzazione in modo che Agent Gateway possa inoltrare il traffico a Policy Engine per la valutazione.

  1. Crea l'estensione dell'autorizzazione: crea un'estensione dell'autorizzazione che punta al nome host DNS del Policy Engine. Utilizza lo stesso SGP_DNS_HOSTNAME per cui hai creato un record DNS in Configurazione della rete (passaggio 4). Questo è il meccanismo con cui Agent Gateway invia il traffico al motore delle policy per la valutazione.

    gcloud

    Definisci la configurazione dell'estensione in un file YAML (authz-ext.yaml) e importala:

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

    Sostituisci SGP_DNS_HOSTNAME con il nome host DNS per cui hai creato un record A in Configurazione della rete (passaggio 4).

    Questo comando restituisce un'operazione a lunga esecuzione. Attendi il completamento dell'operazione prima di procedere.

  2. Crea la policy di autorizzazione: crea una policy di autorizzazione che colleghi l'estensione all'Agent Gateway. In questo modo, Agent Gateway invia il traffico al motore delle policy per la valutazione.

    gcloud

    Definisci la configurazione della policy di autorizzazione in un file YAML (authz-policy.yaml) e importala:

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

    Questo comando restituisce un'operazione a lunga esecuzione. Attendi il completamento dell'operazione prima di procedere.

Crea un criterio

Una volta attivo il motore delle norme, puoi definire i guardrail tecnici e comportamentali per i tuoi agenti.

  1. Definisci l'ambito: determina se la policy si applica a tutte le azioni intraprese da un agente o se ha come target uno strumento specifico.
  2. Crea i vincoli: fornisci le regole aziendali in un linguaggio semplice.

Console

  1. Nella console Cloud de Confiance , vai alla pagina norme di governance semantica.

    Vai alla pagina delle norme di governance semantica

  2. Fai clic su + Aggiungi policy.
  3. Nel riquadro laterale Aggiungi criterio, configura quanto segue:
    • Nome: inserisci un ID univoco per la policy. Il nome può contenere solo lettere minuscole, numeri e trattini.
    • Descrizione: (facoltativo) inserisci una breve descrizione dello scopo della policy.
    • Selezione dell'agente: seleziona l'agente specifico o tutti gli agenti a cui si applica questa regola. Se il selettore è vuoto o manca un agente che ti aspetti, consulta i requisiti di idoneità degli agenti.
    • Destinazioni di accesso:
      • Per applicare il vincolo a ogni azione, seleziona la casella di controllo Applica vincoli a tutti gli strumenti.
      • Per scegliere come target risorse specifiche, seleziona un server MCP e i singoli strumenti dai menu a discesa.
    • Vincoli: inserisci le regole aziendali in linguaggio naturale (fino a 5000 caratteri).
    • Messaggio di rifiuto: (facoltativo) inserisci un messaggio (massimo 1000 caratteri) da mostrare agli utenti quando questa policy nega una richiesta, al posto della motivazione della policy. Nell'API REST, questo valore viene mappato a agentResponseCustomization.denialMessage nella risorsa policy; con Google Cloud CLI, utilizza --agent-response-denial-message su gcloud beta ai semantic-governance-policies create o gcloud beta ai semantic-governance-policies update (vedi la scheda gcloud di seguito). Consulta Rischio di esposizione delle informazioni e Messaggi di rifiuto con più norme.
  4. Fai clic su Crea.

gcloud

Puoi configurare un vincolo nell'ambito dell'agente (si applica a tutti gli strumenti) o nell'ambito dello strumento utilizzando il comando gcloud beta ai semantic-governance-policies create.

Trova il tuo ID agente

Per creare una policy, devi disporre dell'ID univoco dell'agente dal registro degli agenti. Elenca gli agenti nel tuo progetto per trovare l'ID:

gcloud alpha agent-registry agents list \
    --project=PROJECT_ID \
    --location=LOCATION

L'ID agente è l'ultimo segmento del campo name (ad esempio, agentregistry-00000000-0000-0000-abcd-012345678901). Utilizza questo valore per il segmento AGENT_ID del nome dell'agente completo (projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID) che i comandi seguenti passano a --agent.

Prima di eseguire i comandi delle norme di governance semantica, imposta l'override dell'endpoint API regionale:

gcloud config set api_endpoint_overrides/aiplatform \
    https://LOCATION-aiplatform.googleapis.com/
Crea una policy con ambito agente
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

Per configurare un messaggio di rifiuto (consulta il punto elenco Messaggio di rifiuto nella scheda Console e Messaggi di rifiuto con più policy), aggiungi --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

Puoi anche aggiungere o aggiornare --agent-response-denial-message in una norma esistente con gcloud beta ai semantic-governance-policies update.

Trovare il server MCP
gcloud alpha agent-registry mcp-servers list \
    --project=PROJECT_ID \
    --location=LOCATION
Crea una policy con ambito dello strumento
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

Messaggi di rifiuto con più policy

Quando una singola richiesta attiva rifiuti da più policy, il motore delle policy combina i messaggi di rifiuto configurati in queste policy prima di restituire la risposta all'utente. Si applica dunque il seguente comportamento:

  • I messaggi di rifiuto di ogni policy con un verdetto di rifiuto vengono mostrati insieme, separati da righe vuote.
  • I messaggi duplicati vengono mostrati una sola volta.
  • Se alcune norme di attivazione hanno un messaggio di rifiuto configurato e altre no, viene aggiunta una riga generica "Questa richiesta è stata rifiutata a causa di altre norme aziendali" per coprire le norme senza un messaggio.
  • Per ogni richiesta vengono visualizzati al massimo 5 messaggi di rifiuto; gli altri vengono omessi.

Attivare la modalità dry run

Puoi attivare la modalità dry run (DRY_RUN). Dry run è una modalità di sola simulazione o controllo che ti consente di valutare le policy senza applicarle. In questa modalità, il Policy Engine valuta tutte le chiamate degli strumenti in base ai vincoli e registra i verdetti, ma non blocca mai le azioni. In questo modo puoi testare e convalidare i vincoli prima di attivare l'applicazione.

Per attivare la modalità dry run, aggiungi sgpEnforcementMode: DRY_RUN ai metadati dell'estensione di autorizzazione:

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

In modalità dry run:

  • Tutte le chiamate di strumenti sono consentite indipendentemente dal verdetto.
  • I verdetti e le motivazioni vengono registrati per la revisione.
  • Puoi esaminare i log per identificare le azioni che sarebbero state bloccate e perfezionare i vincoli prima di passare alla modalità di applicazione forzata.

Per tornare alla modalità di applicazione normale, rimuovi sgpEnforcementMode dai metadati:

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": {}
    }'

Visualizza i log di valutazione delle policy

Il motore delle policy scrive una voce di log strutturata per ogni valutazione in Cloud Logging nel tuo progetto. La voce registra un verdict complessivo e un array evaluations con un verdict e un rationale per ogni strumento o azione.

  1. Dalla console:nella pagina Policy, seleziona una policy.
  2. Nel riquadro Dettagli, nella sezione Osservabilità, fai clic su Cloud Logging > Visualizza dettagli.
  3. In Esplora log, digita semantic-governance-policy nella casella della query o utilizza il seguente filtro esplicito:

    logName="projects/PROJECT_ID/logs/semantic-governance-policy"

Il seguente esempio è una voce di log di esempio:

{
  "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"
}

Campi chiave:

  • verdict: Decisione complessiva, ALLOW o DENY.
  • evaluations[].rationale: La motivazione per cui il Policy Engine ha raggiunto un determinato verdetto per ogni strumento o azione.
  • token_usage: il numero di token del modello utilizzati per la valutazione.

Abilita il tracciamento delle richieste

Il Policy Engine esporta una traccia per ogni richiesta che valuta in Cloud Trace nel tuo progetto, in modo da poter ispezionare la latenza per richiesta e l'applicazione delle policy. Per ricevere queste tracce, abilita l'Cloud Trace API e concedi al account di servizio Vertex AI (P4SA) l'autorizzazione per scrivere tracce.

  1. Abilita l'Cloud Trace API:

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. Concedi il ruolo Cloud Trace Agent (roles/cloudtrace.agent) al account di servizio Vertex AI. Questo ruolo concede solo l'autorizzazione di scrittura delle tracce (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"
    

Una volta configurati entrambi, invia una richiesta tramite l'agente e visualizza le tracce in Esplora tracce per il tuo progetto.

Gestire la configurazione delle policy

Dopo l'esecuzione delle norme di governance semantica, puoi eliminare singole norme o scollegare il motore dall'Agent Gateway.

Eliminare una policy

Per rimuovere una singola policy senza influire sull'integrazione complessiva delle norme di governance semantica:

gcloud beta ai semantic-governance-policies delete POLICY_ID \
    --location=LOCATION \
    --project=PROJECT_ID

In alternativa, utilizza il seguente comando 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)"

Eseguire il deprovisioning di un motore delle policy

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

Scollega il motore delle policy da Agent Gateway

Puoi disconnettere il Policy Engine dal tuo Agent Gateway per impedire che le chiamate di strumenti vengano valutate in base ai tuoi vincoli.

Elimina il criterio di autorizzazione che associa l'applicazione della policy di governance semantica al tuo gateway dell'agente:

gcloud network-security authz-policies delete AUTHZ_POLICY_NAME \
    --location=LOCATION \
    --project=PROJECT_ID

Per riconnettere il Policy Engine in un secondo momento, ricrea la policy di autorizzazione come descritto in Connettere il Policy Engine ad Agent Gateway.

(Facoltativo) Elimina l'estensione dell'autorizzazione

Elimina l'estensione dell'autorizzazione creata durante la configurazione.

gcloud network-services authz-extensions delete AUTHZ_EXTENSION_NAME \
    --location=LOCATION \
    --project=PROJECT_ID

(Facoltativo) Esegui la pulizia delle risorse gestite dal cliente

Il deprovisioning del motore elimina solo le risorse di backend gestite da Google. Se non sono più necessarie, devi eliminare manualmente le risorse create nel tuo progetto durante la configurazione.

Rimuovi la zona DNS privata
gcloud dns managed-zones delete DNS_ZONE_NAME \
    --project=PROJECT_ID
Rimuovi la subnet e il VPC
gcloud compute networks subnets delete SUBNET_NAME \
    --region=LOCATION \
    --project=PROJECT_ID

gcloud compute networks delete NETWORK_NAME \
    --project=PROJECT_ID
(Facoltativo) Rimuovi le associazioni IAM

Se hai concesso autorizzazioni al account di servizio Vertex AI (P4SA), puoi rimuoverle:

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"
(Facoltativo) Disabilita l'Cloud Trace API
gcloud services disable cloudtrace.googleapis.com --project=PROJECT_ID
(Facoltativo) Disabilita l'API Agent Platform
gcloud services disable aiplatform.googleapis.com --project=PROJECT_ID

Esegui il debug dell'applicazione delle policy

Sintomo Probabile causa Aspetti da controllare
Chiamata allo strumento consentita, ma era previsto un blocco I criteri non corrispondevano all'ambito e all'agente o il vincolo era troppo permissivo Nel log di valutazione, verifica la corrispondenza della policy e leggi il verdetto; perfeziona l'NLC
Chiamata allo strumento negata, ma prevista Vincolo troppo rigido o regole in conflitto Leggi rationale nel log, ottimizza la classificazione NLC e itera in modalità dry run
Nessun verdetto Il motore non è attivo o il gateway non è associato Verifica che il motore state sia ACTIVE e che esistano la policy di autorizzazione, l'estensione o entrambe

Per eseguire il debug di un verdetto imprevisto:

  1. Controlla l'esito e la motivazione nei log di valutazione delle policy.
  2. Traccia la richiesta: consulta Attivare la tracciabilità delle richieste.
  3. Convalida le modifiche in sicurezza con la modalità dry run.
  4. Conferma l'implementazione: lo stato del motore è ACTIVE e l'associazione del gateway è stabilita.

Catalogo degli errori

La tabella seguente elenca gli errori che potresti riscontrare durante la gestione delle norme di governance semantica, insieme ai passaggi per risolverli:

Nome dell'errore Descrizione Azione suggerita
SEMANTIC_GOVERNANCE_POLICY_ALREADY_EXISTS L'ID policy che hai specificato esiste già in questo progetto e in questa località. Utilizza un ID policy univoco o una richiesta PATCH per aggiornare la policy esistente.
SEMANTIC_GOVERNANCE_POLICY_ETAG_MISMATCH L'etag nella richiesta non corrisponde alla versione attuale della risorsa. Recupera l'ultima versione della policy per ottenere l'etag attuale prima di tentare l'aggiornamento.
SEMANTIC_GOVERNANCE_POLICY_AGENT_REQUIRED Il campo agent non è presente nella richiesta. Specifica il nome della risorsa dell'agente a cui si applica questa policy.
SEMANTIC_GOVERNANCE_POLICY_CONSTRAINT_REQUIRED Il campo natural_language_constraint non è presente. Fornisci le regole aziendali in inglese semplice nel campo del vincolo.
SEMANTIC_GOVERNANCE_POLICY_AGENT_INVALID_NAME Il nome della risorsa dell'agente non è valido. Verifica il formato: projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID.
SEMANTIC_GOVERNANCE_POLICY_AGENT_UNSUPPORTED_REGION La regione specificata per l'agente non è supportata da Agent Registry. Utilizza una regione supportata sia da Agent Registry sia dalle norme di governance semantica.
SEMANTIC_GOVERNANCE_POLICY_AGENT_NOT_FOUND Impossibile trovare l'agente specificato. Verifica che l'agente esista nel registro degli agenti per il progetto e la località specificati.
SEMANTIC_GOVERNANCE_POLICY_AGENT_NOT_CONFIGURED All'agente manca un RuntimeIdentity valido. Configura l'agente con un'identità di runtime valida prima di applicare un criterio.
SEMANTIC_GOVERNANCE_POLICY_MCP_SERVER_NOT_FOUND Impossibile trovare il server MCP specificato. Verifica che il server MCP sia registrato in Agent Registry per il progetto.
SEMANTIC_GOVERNANCE_POLICY_MCP_SERVER_INVALID_NAME Il nome della risorsa del server MCP non è valido. Verifica il formato: projects/PROJECT_ID/locations/LOCATION/mcpServers/SERVER_ID.
SEMANTIC_GOVERNANCE_POLICY_MCP_SERVER_UNSUPPORTED_REGION La regione specificata per il server MCP non è supportata. Utilizza una regione supportata per il server MCP.
SEMANTIC_GOVERNANCE_POLICY_REGISTRY_DENIED Il sistema non può eseguire query sul registro degli agenti a causa di autorizzazioni mancanti. Abilita l'API Agent Registry e assicurati che il tuo account disponga del ruolo agentregistry.viewer.
SEMANTIC_GOVERNANCE_POLICY_ENGINE_NOT_ENABLED_IN_REGION Il motore delle policy non è attivo nella regione richiesta. Segui i passaggi descritti in Provisioning e attivazione per attivare il motore nella tua regione.
SEMANTIC_GOVERNANCE_POLICY_ENGINE_SERVICE_NOT_AVAILABLE_IN_LOCATION Il servizio del Policy Engine di governance semantica non è disponibile nella località richiesta. Utilizza una delle località supportate per il servizio del motore delle norme di governance semantica.

Passaggi successivi