セマンティック ガバナンス ポリシーを構成する

セマンティック ガバナンス ポリシーと Policy Engine を構成する

このセクションでは、インフラストラクチャの準備からポリシーの作成への移行について説明します。

前提条件

セマンティック ガバナンス ポリシーを構成する前に、次の手順を完了します。

必要な 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

Vertex AI サービス アカウントに IAM 権限を付与する(Google 管理のバインディングのみ)

プロビジョニング中に Google 管理のバインディング オプションを使用する場合は、プロジェクトに Private Service Connect(PSC)エンドポイント(roles/compute.networkAdmin)と DNS レコードセット(roles/dns.admin)を作成するために必要なロールを Vertex AI サービス アカウント(P4SA)に付与します。セルフマネージド バインディング オプションを使用する場合は、ネットワーク リソースを自分で作成するため、この手順をスキップできます。

サービス ID を作成(べき等)してロールを付与します。

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 コンソールのセマンティック ガバナンス ポリシーのエージェント セレクタに表示されるようにするには、エージェントの推論エンジンが 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 プロジェクトに基盤となるネットワーク リソースを作成し、そのライフサイクルを自動的に管理します。
  • セルフマネージド バインディング: 必要なネットワーク リソース(network、subnetwork、dnsZoneName)を Cloud de Confiance by S3NS プロジェクトで直接作成して管理します。

プロビジョニングが完了したら、Policy Engine を 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 を保存します。Policy Engine を 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. VPC ネットワークとサブネットをプロビジョニングする

この手順では、VPC ネットワーク、サブネット、エージェント トラフィック用のプロキシ専用サブネットを作成します。表示されている IP 範囲(10.11.12.0/24 と 10.11.13.0/24)は例です。ネットワーク設計に適合する RFC 1918 プライベート範囲を使用できます。

  1. VPC ネットワークを作成します。

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

    NETWORK_NAME は、VPC ネットワークの名前に置き換えます(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. プロキシ専用サブネットを作成します(マネージド ロードバランサに必要)。

    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 は、プロキシ専用サブネットの名前に置き換えます(例: agent-proxy-subnet)。

2. プライベート DNS ゾーンをプロビジョニングする

Agent Gateway が Policy Engine のホスト名を解決できるように、限定公開 DNS ゾーンを作成します。

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 が VPC 内のリソースに接続できるように、ネットワーク アタッチメントを作成します。接続設定は 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 で VPC 接続を構成する

ネットワーク リソースを作成したら、Agent Gateway にネットワーク アタッチメントと DNS ピアリングを登録して、プライベート ネットワーク経由で Policy Engine にアクセスできるようにする必要があります。

詳細な手順については、Agent Gateway 設定ガイドの VPC 接続を構成するをご覧ください。少なくとも、次のことを行う必要があります。

  • ステップ 3 で作成したネットワーク アタッチメントを Agent Gateway の下り(外向き)構成に登録します。
  • DNS ピアリングを登録して、ゲートウェイがステップ 4 で作成したプライベート DNS ホスト名を解決できるようにします。

Policy Engine を Agent Gateway に接続する

ネットワークを構成したら、Agent Gateway が評価のためにトラフィックを Policy Engine に転送できるように、認可拡張機能と認可ポリシーを作成する必要があります。

  1. 認可拡張機能を作成する: Policy Engine の DNS ホスト名を指す認可拡張機能を作成します。ネットワークの構成(ステップ 4)で DNS レコードを作成したのと同じ SGP_DNS_HOSTNAME を使用します。これは、Agent Gateway が評価のためにトラフィックを Policy Engine に送信するメカニズムです。

    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 はトラフィックを Policy Engine に送信して評価します。

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

    このコマンドは、長時間実行オペレーションを返します。オペレーションが完了するまで待ってから、次の手順に進みます。

ポリシーを作成する

Policy Engine が有効になると、エージェントの技術的および行動上のガードレールを定義できます。

  1. 範囲を定義する: ポリシーがエージェントのすべてのアクションに適用されるか、特定のツールを対象とするかを判断します。
  2. 制約を作成する: ビジネスルールを平易な英語で指定します。

コンソール

  1. Cloud de Confiance コンソールで、[セマンティック ガバナンス ポリシー] ページに移動します。

    [セマンティック ガバナンス ポリシー] ページに移動

  2. [+ ポリシーを追加] をクリックします。
  3. [ポリシーを追加] サイドパネルで、次のように構成します。
    • 名前: ポリシーの一意の ID を入力します。名前に使用できるのは、小文字、数字、ハイフンのみです。
    • 説明: (省略可)ポリシーの目的の簡単な説明を入力します。
    • エージェントの選択: このルールが適用される特定のエージェントまたはすべてのエージェントを選択します。選択ツールが空の場合や、想定しているエージェントが表示されない場合は、エージェントの資格要件をご覧ください。
    • アクセス ターゲット:
      • すべての操作に制約を適用するには、[すべてのツールに制約を適用する] チェックボックスをオンにします。
      • 特定のリソースをターゲットにするには、プルダウン メニューから [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 タブをご覧ください)。情報漏洩のリスクと複数のポリシーを含む拒否メッセージをご覧ください。
  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)。この値は、次のコマンドが --agent に渡す完全修飾エージェント名 projects/PROJECT_ID/locations/LOCATION/agents/AGENT_ID の AGENT_ID セグメントに使用します。

セマンティック ガバナンス ポリシー コマンドを実行する前に、リージョン 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

複数のポリシーを含む拒否メッセージ

1 つのリクエストが複数のポリシーで拒否をトリガーすると、ポリシー エンジンは、これらのポリシーで構成された拒否メッセージを結合してから、ユーザーに応答を返します。次の動作が適用されます。

  • 拒否判定のポリシーからの拒否メッセージは、空白行で区切られてまとめて表示されます。
  • 重複するメッセージは 1 回表示されます。
  • 一部のファイアリング ポリシーに拒否メッセージが構成され、他のポリシーに構成されていない場合、一般的な行「このリクエストは別のビジネス ポリシーにより拒否されました」が追加され、拒否メッセージのないポリシーをカバーします。
  • リクエストごとに最大 5 件の拒否メッセージが表示されます。それ以上のメッセージは省略されます。

ドライラン モードの有効化

ドライラン モード(DRY_RUN)を有効にできます。ドライランは、ポリシーを適用せずに評価できる監査専用モードまたはシミュレーション モードです。このモードでは、Policy Engine はすべてのツール呼び出しを制約に照らして評価し、判定をログに記録しますが、アクションをブロックすることはありません。これにより、適用を有効にする前に制約をテストして検証できます。

ドライラン モードを有効にするには、認可拡張機能のメタデータに 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": {}
    }'

ポリシー評価ログを表示する

Policy Engine は、各評価の構造化ログエントリをプロジェクトの Cloud Logging に書き込みます。エントリには、全体的な verdict と、各ツールまたはアクションの verdict と rationale を含む evaluations 配列が記録されます。

  1. コンソールから: [ポリシー] ページで、ポリシーを選択します。
  2. [詳細] パネルの [オブザーバビリティ] セクションで、[Cloud Logging] > [詳細を表示] をクリックします。
  3. ログ エクスプローラの場合: クエリ ボックスに 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: Policy Engine が各ツールまたはアクションに対して特定の判定に達した理由。
  • token_usage: 評価で使用されたモデルトークンの数。

リクエスト トレースを有効にする

ポリシー エンジンは、評価するリクエストごとにトレースをプロジェクトの Cloud Trace にエクスポートします。これにより、リクエストごとのレイテンシとポリシーの適用を検査できます。これらのトレースを受信するには、Cloud Trace API を有効にして、トレースを書き込む権限を Vertex AI サービス アカウント(P4SA)に付与します。

  1. Cloud Trace API を有効にします。

    gcloud services enable cloudtrace.googleapis.com \
        --project=PROJECT_ID
    
  2. Vertex AI サービス アカウントに Cloud Trace エージェント ロール(roles/cloudtrace.agent)を付与します。このロールは、トレース書き込み権限(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)"

Policy Engine のプロビジョニングを解除する

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

Policy Engine を 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
サブネットと VPC を削除する
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

ポリシーの適用をデバッグする

症状 考えられる原因 確認ポイント
ツール呼び出しが許可されたが、ブロックが想定されていた ポリシーがスコープとエージェントに一致しないか、制約が緩すぎる 評価ログで、ポリシーが一致したことを確認し、判定を読み取ります。NLC を調整します。
ツール呼び出しが拒否されたが、許可されるはずである 制約が厳しすぎるか、ルールが競合している ログの 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 とセマンティック ガバナンス ポリシーの両方でサポートされているリージョンを使用します。
SEMANTIC_GOVERNANCE_POLICY_AGENT_NOT_FOUND 指定されたエージェントが見つかりませんでした。 指定されたプロジェクトとロケーションのエージェント レジストリにエージェントが存在することを確認します。
SEMANTIC_GOVERNANCE_POLICY_AGENT_NOT_CONFIGURED エージェントに有効な RuntimeIdentity がありません。 ポリシーを適用する前に、有効なランタイム ID を使用してエージェントを構成します。
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 セマンティック ガバナンス ポリシー エンジン サービスは、リクエストされたロケーションでは使用できません。 セマンティック ガバナンス ポリシー エンジン サービスで、サポートされているロケーションのいずれかを使用します。

次のステップ