Model Armor と Agent Gateway を統合する

Gemini Enterprise Agent Platform は、エンタープライズ グレードの AI エージェントを構築して管理するためのプラットフォームです。Agent Gateway は、AI エージェントが Google Cloud 環境内、および外部エージェント、AI アプリケーション、LLM と接続してやり取りする方法を管理、保護、統制するコントロール プレーンとして機能します。Model Armor と Agent Gateway の統合により、Model Armor のスクリーニング機能が Gemini Enterprise Agent Platform が管理する通信パスに直接組み込まれます。コンテンツが Agent Gateway を通過すると、Model Armor が呼び出され、事前定義されたセキュリティ テンプレートが適用されます。テンプレートは、ポリシーに違反するコンテンツをブロックして秘匿化するように構成することも、コンテンツを検査して検出された違反をログに記録するように構成することもできます。これにより、プロンプト インジェクション、ジェイルブレイク、有害なコンテンツへの露出、センシティブ データの漏洩などのリスクが軽減されます。

Model Armor が Agent Gateway を通過するコンテンツでポリシー違反を検出すると、これらのイベントをログに記録するように構成できます。これらの検出結果は、 Google Cloud コンソールの [Model Armor] ページで確認できます([Model Armor] に移動)。これらの検出結果は、Security Command Center にも表示されます。詳細については、Google Cloud コンソールで検出結果を確認するをご覧ください。

リアルタイム ストリーミング モードを使用する場合、Model Armor はストリーム内の無制限のトークンをサポートしているため、長時間実行されるインタラクションやモデルのレスポンスに適しています。

制限事項

Model Armor を Agent Gateway と統合する場合は、次の制限事項を考慮してください。

  • エージェントのストリーミング サポート: Model Armor は、Agent Development Kit で構築されたエージェントの streamQuery メソッドを使用したストリーミング サニタイズのみをサポートしています。
  • プロジェクト間のテンプレートの使用: 1 つのプロジェクトで Model Armor テンプレートを使用して、別のプロジェクトのサービス(Agent Gateway など)のリクエストをサニタイズする場合、テンプレートをホストするプロジェクトと呼び出し元サービスをホストするプロジェクトの両方で、Model Armor の API 割り当てが十分である必要があります。詳細については、割り当てを管理するをご覧ください。
  • リージョンの整合性: Model Armor と、Model Armor が統合するサービスは、同じ Google Cloud リージョン内にデプロイする必要があります。Model Armor へのクロスリージョン呼び出しはサポートされていません。
  • 下り(外向き)統合の互換性: 下り(外向き)トラフィックに対する Model Armor のインライン保護は、MCP サーバー、OpenAI 形式に準拠するサービス、Agent Gateway を介した A2A との統合に限定されます。
  • Ingress 統合の互換性: Model Armor によるインライン Ingress 保護は、ADK を使用して構築されたエージェントでのみサポートされます。
  • ドキュメントのサポートなし: ドキュメントやファイルのアップロード(PDF など)を含むプロンプトとレスポンスのサニタイズは、このインテグレーションではサポートされていません。ドキュメントをスクリーニングするには、Model Armor REST API を直接呼び出します。
  • サポートされているペイロード: サポートされているペイロードの一覧については、このドキュメントのサポートされているペイロードとサポートされていないペイロードをご覧ください。

ゲートウェイで Model Armor を構成する

ゲートウェイで Model Armor を構成する手順は次のとおりです。

  1. Model Armor テンプレートを作成するプロジェクトで Model Armor API を有効にします。
  2. ゲートウェイを追加するリージョンに 1 つ以上の Model Armor テンプレートを作成します。上り(内向き)トラフィックと下り(外向き)トラフィックの両方に同じテンプレートを使用できます。

    テンプレート名をメモします。Google Cloud コンソールでテンプレートの名前をコピーするには、テンプレートの詳細を表示し、テンプレート名の横にある [クリップボードにコピー] をクリックします。

    AI エージェントまたは Agent Gateway を含むプロジェクトとは異なるプロジェクトで Model Armor テンプレートを作成し、VPC Service Controls を使用する場合は、両方のプロジェクトが同じ VPC Service Controls サービス境界内にある必要があります。

  3. Model Armor テンプレートが保存されているリージョンに Agent Gateway を設定します。クライアントからエージェント(内向き)ゲートウェイには、内向きトラフィック用に作成した Model Armor テンプレートを指定します。[Agent-to-Anywhere(下り(外向き))ゲートウェイ] には、下り(外向き)トラフィック用に作成した Model Armor テンプレートを指定します。両方のトラフィック フローに同じテンプレートを使用できます。

  4. 適切なサービス エージェントに必要な IAM ロールを付与します。

    • クライアントからエージェント(上り(内向き)): AI Platform Reasoning Engine サービス エージェント サービス エージェントに次のロールを付与します。

      • AI エージェントを含むプロジェクトの Model Armor Callout ユーザー(roles/modelarmor.calloutUser)ロール。

      • Model Armor テンプレートを含むプロジェクトの Model Armor ユーザー(roles/modelarmor.user)ロール。

      gcloud projects add-iam-policy-binding AGENT_RUNTIME_PROJECT_ID \
          --member=serviceAccount:service-AGENT_RUNTIME_PROJECT_NUMBER@gcp-sa-aiplatform-re. \
          --role=roles/modelarmor.calloutUser
      gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \
          --member=serviceAccount:service-AGENT_RUNTIME_PROJECT_NUMBER@gcp-sa-aiplatform-re. \
          --role=roles/modelarmor.user
      

      次のように置き換えます。

      • AGENT_RUNTIME_PROJECT_ID: エージェントを作成したプロジェクトのプロジェクト ID。
      • AGENT_RUNTIME_PROJECT_NUMBER: エージェントを作成したプロジェクトのプロジェクト番号。
      • MODEL_ARMOR_PROJECT_ID: Model Armor テンプレートを含むプロジェクトのプロジェクト ID。
    • エージェントから任意の場所(下り(外向き)): Service Extensions サービス エージェントに次のロールを付与します。

      • ゲートウェイを含むプロジェクトの Model Armor Callout ユーザー(roles/modelarmor.calloutUser)ロールと Service Usage コンシューマー(roles/serviceusage.serviceUsageConsumer)ロール。
      • Model Armor テンプレートを含むプロジェクトの Model Armor ユーザー(roles/modelarmor.user)ロール。
      gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \
          --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
          --role=roles/modelarmor.calloutUser
      gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \
          --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
          --role=roles/serviceusage.serviceUsageConsumer
      gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \
          --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \
          --role=roles/modelarmor.user
      

      次のように置き換えます。

      • GATEWAY_PROJECT_ID: ゲートウェイを作成したプロジェクトのプロジェクト ID。
      • GATEWAY_PROJECT_NUMBER: ゲートウェイを作成したプロジェクトのプロジェクト番号。
      • MODEL_ARMOR_PROJECT_ID: Model Armor テンプレートを含むプロジェクトのプロジェクト ID。

      手順については、Model Armor に認可を委任するをご覧ください。

    ロールを付与する方法の一般的な情報については、単一の IAM ロールを付与するをご覧ください。

上り(内向き)トラフィックと下り(外向き)トラフィック

Agent Gateway と Model Armor の統合のコンテキストでは、内向きと外向きという用語は、AI エージェントのインタラクションの観点から使用されます。

  • 内向きトラフィック(クライアントからエージェント): クライアントとエージェント間の通信フローを指します。Model Armor は、クライアントからエージェントへの受信リクエストと、エージェントからクライアントへの送信レスポンスの両方を保護できます。
  • 下り(外向き)トラフィック(Agent-to-Anywhere): エージェントと外部システム間の通信フローを指します。Model Armor は、エージェントから外部システムへの送信リクエストと、外部システムからエージェントへの受信レスポンスの両方を保護できます。

クライアントからエージェントへ(内向き)の保護

Model Armor が評価に使用するテンプレートを定義します。

  • クライアント(エンドユーザーまたは呼び出し元アプリケーション)から AI エージェントへの受信リクエスト。
  • AI エージェントからクライアントに返される送信レスポンス。

1 つのテンプレートを両方向に適用することも、方向ごとに異なるテンプレートを構成することもできます。

クライアントからエージェントへのトラフィック フロー

  1. クライアントがエージェントにプロンプトを送信します。Agent Gateway がリクエストをインターセプトし、ペイロードを Model Armor に送信します。
  2. Model Armor がリクエストをスクリーニングします。ブロックされた場合、クライアントはエラーを受け取ります。
  3. 許可された場合、リクエストは AI エージェントに到達します。
  4. AI エージェントが回答を生成します。Agent Gateway は、このレスポンスがクライアントに到達する前にインターセプトします。
  5. Model Armor がレスポンスをスクリーニングし、Agent Gateway がその判定に基づいてレスポンスを許可またはブロックします。

エージェントから任意の宛先へ(外向き)の保護

Model Armor が評価に使用するテンプレートを定義します。

  • AI エージェントから外部システムへの送信リクエスト。
  • 外部システムから AI エージェントに返される受信レスポンス。

この保護は、次のようなシステムとの通信に適用されます。

  • 外部 LLM とサードパーティ AI エージェント
  • Model Context Protocol(MCP)サーバー
  • その他の AI エージェント

エージェントから任意の宛先へのトラフィック フロー

  1. AI エージェントが外部システムにリクエストを開始します。Agent Gateway が送信トラフィックをインターセプトします。
  2. Model Armor は送信ペイロードをスクリーニングします。ブロックされた場合、接続は終了します。
  3. 許可されている場合、リクエストは外部システムに送信されます。
  4. 外部システムがレスポンスを返します。Agent Gateway は、この受信レスポンスをインターセプトします。
  5. Model Armor がレスポンス ペイロードをスクリーニングし、Agent Gateway がエージェントへの到達を許可するか、ブロックします。

詳細については、ゲートウェイで Model Armor を構成するをご覧ください。

ストリーミング リクエストを追跡してデバッグする

ストリーミング リクエストのトラッキングとデバッグを容易にするため、Model Armor は相関 ID とトレース ID を使用します。

トレース ID を使用する

トレース ID は、分散システム内の複数のサービスを移動する単一のリクエストのすべてのイベントを接続します。これには、Model Armor が Agent Gateway リソースのリクエストパス内で適用するセキュリティ対策が含まれます。

各トレースには 1 つ以上のスパンが含まれ、各スパン ID はトレース内の特定のオペレーションまたは作業単位を表します。リクエストの実行中に生成されたログは、作業を実行するオペレーションの特定のスパン ID に関連付けられます。

トレース ID は次の 2 つの方法で処理されます。

  • 自動: Google Cloud Observability が有効になっている場合、Agent Gateway はトレース ID を自動的に生成し、システム全体に伝播します。
  • ユーザー指定: リクエストで traceparent HTTP ヘッダーを使用して独自のトレース ID を指定することで、システム生成のトレース ID をオーバーライドできます。

    次のコードサンプルは、streamQuery メソッドへのリクエストでカスタム トレース ID を渡す方法を示しています。

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      -H "traceparent: 00-98adffecc8dd095968a06c44216190f6-5b565a8342378cd7-01" \
      "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID:streamQuery?alt=sse"
    

    次のように置き換えます。

    • LOCATION: 推論エンジンが配置されているリージョン。
    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
    • REASONING_ENGINE_ID: 推論エンジンの ID。

トレース ID を使用する方法は、呼び出し元から Agent Gateway を介して Model Armor やダウンストリーム エージェントまで、エンドツーエンドでログとトレースを関連付けるために推奨される方法です。これは、デバッグ、セキュリティ アクションの把握、パフォーマンスのモニタリングに不可欠です。詳細については、Model Armor のトレーススパンを表示するをご覧ください。

特定のトレース ID のサニタイズ オペレーション ログを表示するには、ログ エクスプローラで次のクエリを使用します。

jsonPayload.@type="type.googleapis.com/google.cloud.modelarmor.logging.v1.SanitizeOperationLogEntry"
trace:TRACE_ID

TRACE_ID は、リクエストのトレース ID に置き換えます。

相関 ID を使用する

相関 ID は、最初のリクエストから最終レスポンスまで、1 つのストリーミング サニタイズ セッションに関連する Cloud Logging のすべてのログエントリをリンクします。これは、主に Model Armor ログ内で使用される内部識別子です。特に、上り(内向き)ストリーミング セッションで使用されます。詳細については、ログと関連イベントを関連付けるをご覧ください。

サポートされているペイロードとサポートされていないペイロード

このセクションでは、Model Armor がサニタイズするペイロードの種類について説明します。

クライアントからエージェントへの(内向き)トラフィック

ADK プロトコルを使用するクライアントからエージェントへの(内向き)トラフィックの場合、Model Armor は、Agent Development Kit(ADK)を使用して構築され、Agent Runtime で実行されているエージェントの reasoningEngines.streamQuery リクエストとレスポンスのみをサニタイズします。

他のすべての ReasoningEngine ペイロードと ReasoningEngine エラー レスポンスは Model Armor に送信されません。ADK 以外のペイロード(Langchain ペイロードなど)も Model Armor に送信されません。

エージェントから任意の宛先への(外向き)トラフィック

エージェントから任意の場所への(下り)トラフィックでは、次のペイロードがサポートされています。

A2A ペイロード

Model Armor は、A2A v1 プロトコルの次のペイロードのみをサニタイズします。

Model Armor では、次の A2A ペイロードをサニタイズなしで許可します。

MCP ペイロード

Model Armor は、次の MCP ペイロードのみをサニタイズします。

  • tools/call のリクエストとレスポンス
  • prompts/get のリクエストとレスポンス
  • MCP ツールの実行エラー(悪意のある MCP ツールの作成者によるプロンプト インジェクションのターゲット)

Model Armor では、次のペイロードはサニタイズされずに許可されます。

  • tools/list
  • resources/*
  • notifications/*
  • MCP 向けの Streamable HTTP / SSE
  • MCP プロトコル エラー(ツール実行エラー以外のすべてのエラーなど)

外部 LLM ペイロード

Model Armor は、OpenAI API プロトコル(下り(外向き))の次のペイロードのみをサニタイズします。これには、openai.com の GPT モデルと、OpenAI API 互換の LLM サーバー(vLLM など)を介した他のモデルが含まれます。ここに記載されていないペイロードは、サニタイズなしで許可されます。