Model Armor を Gemini Enterprise Agent Platform と統合する

このドキュメントでは、プロンプトとレスポンスをスクリーニングして、Gemini Enterprise Agent Platform 上の Gemini モデルを保護するように Model Armor を構成する方法について説明します。 Gemini Enterprise Agent Platform と統合すると、Model Armor はプロンプトが Gemini モデルに到達する前にインターセプトし、レスポンスがアプリケーションに到達する前にインターセプトします。構成に基づいて、Gemini Enterprise Agent Platform は Model Armor サービスを呼び出します。このサービスは、定義されたポリシーに違反するトラフィックを検査またはブロックし、プロンプト インジェクションや脱獄の検出、責任ある AI フィルタ、Sensitive Data Protection などのセキュリティ対策を適用します。この統合は、プロジェクト レベルの保護に フロア設定を使用するか、リクエストごとの保護に テンプレートを使用することで構成できます。

Model Armor は、Vertex AI の Gemini API 内で generateContent メソッドのプロンプトとレスポンスを保護します。プロンプトとレスポンスのサニタイズ結果を表示するには、Cloud Logging を有効にする必要があります。

Gemini Enterprise Agent Platform サービスへの直接 REST 呼び出しを保護するだけでなく、Model Armor を使用して、Google 生成 AI SDK や Firebase AI Logic SDK など、Vertex AI の Gemini API へのアクセスを提供する他のインターフェースを保護することもできます。

制限事項

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

  • Model Armor が Sensitive Data Protection テンプレートを使用してプロンプトまたはレスポンスをスキャンする場合、Model Armor は、コンテンツがテンプレートで定義されたフィルタ条件に一致するかどうかを確認します。一致した場合、Model Armor は、コンテンツが Sensitive Data Protection フィルタをトリガーしたことを示すフラグを設定します。Sensitive Data Protection はテンプレート構成に基づいてデータを匿名化しますが、Model Armor は、マスク、編集、ハッシュ化されたコンテンツなどの匿名化されたデータを Gemini Enterprise Agent Platform に渡して、さらに処理することはありません。代わりに、適用タイプが INSPECT_AND_BLOCK の場合、Model Armor はブロック判定を発行して、機密データがさらに処理されないようにします。
  • ドキュメントを含むプロンプトとレスポンスのサニタイズはサポートされていません。
  • Gemini Enterprise Agent Platform が、指定された Model Armor テンプレートが存在しないリージョンにリクエストをルーティングすると、リクエストは Template not found エラーで失敗します。
  • Gemini Enterprise Agent Platform は、次の条件で Model Armor サニタイズ ステップをスキップし、リクエストの処理を続行します。

    • Gemini Enterprise Agent Platform が存在するリージョンで Model Armor を使用できない。
    • Model Armor に一時的に到達できない。
    • Model Armor 内でエラーが発生した。

    これらのインスタンスでは、プロンプトとレスポンスのサニタイズなしでリクエストが続行されるため、スクリーニングされていないプロンプトまたはレスポンスが公開されることがあります。

    統合は接続障害時の高可用性を実現するように構築されていますが、INSPECT_AND_BLOCK モードでは、権限や割り当ての問題などの構成エラーが報告されます。

始める前に

Model Armor が Gemini Enterprise Agent Platform の保護に役立つように構成する

Model Armor が Gemini Enterprise Agent Platform を保護する方法は、次の 2 つの方法で構成できます。

  • リクエストごとの保護にテンプレートを使用する: この方法では、Gemini Enterprise Agent Platform 上の Gemini モデルに対する各 generateContent API 呼び出しに特定のテンプレートを適用することで、きめ細かい 制御を実現します。
  • プロジェクト レベルの保護にフロア設定を使用する: この方法では、 プロジェクト内の Gemini Enterprise Agent Platform 上の Gemini モデルに対するすべての generateContent API 呼び出しにフロア設定を適用することで、ベースライン保護を適用します。

違反を検査するだけにするか、ブロックするかを決定するには、適用タイプを 定義します。

テンプレートを使用したリクエストごとの構成

テンプレートを使用すると、Model Armor がプロンプトとレスポンスをスクリーニングする方法を構成し、セキュリティ フィルタの構成を定義できます。まず、テンプレートを作成し、これらのテンプレートを Gemini の generateContent メソッドで使用する必要があります。テンプレートの詳細については、 Model Armor テンプレートの作成と管理をご覧ください。

Model Armor テンプレートを構成したら、generateContent メソッドを使用して Gemini API を呼び出すときに、テンプレート ID をパラメータとして渡します。Gemini Enterprise Agent Platform は、処理のためにリクエストを Model Armor にルーティングします。

特定のテンプレートを個々の generateContent 呼び出しに適用するには、リクエストに modelArmorConfig オブジェクトを含めます。

  • promptTemplateName: プロンプトをサニタイズする Model Armor テンプレートのリソース名。
  • responseTemplateName: レスポンスをサニタイズする Model Armor テンプレートのリソース名。

次のコードサンプルは、generateContent メソッドへのリクエストを示しています。

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-2.0-flash-001:generateContent" -d '{
"contents": [
    {
        "role": "user",
        "parts": [
            {
                "text": "[YOUR PROMPT HERE]"
            }
        ]
    }
]
, "generationConfig": {
    "responseModalities": ["TEXT"]
    ,"temperature": 0.2
    ,"maxOutputTokens": 1024
    ,"topP": 0.8
},
 "model_armor_config": {
        "prompt_template_name": "projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID",
        "response_template_name": "projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID"
        }
}'

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

  • PROJECT_ID: Google Cloud プロジェクト ID。
  • LOCATION: Gemini エンドポイントの Google Cloud ロケーション。サポートされているロケーションは、europe-west1europe-west2europe-west3asia-southeast1asia-south1 です。
  • TEMPLATE_ID: Model Armor テンプレート ID。

次のコードサンプルは、generateContent メソッドからのレスポンスを示しています。

{
  "promptFeedback": {
    "blockReason": "MODEL_ARMOR",
    "blockReasonMessage": "Blocked by Floor Setting. The prompt violated Responsible AI Safety settings (Harassment, Dangerous), Prompt Injection and Jailbreak filters."
  },
  "usageMetadata": {
    "trafficType": "ON_DEMAND"
  },
  "modelVersion": "gemini-2.0-flash-001",
  "createTime": "2025-03-26T13:14:36.961184Z",
  "responseId": "vP3jZ6DVOqLKnvgPqZL-8Ao"
}

テンプレートの適用タイプを定義する

Model Armor が検出を処理する方法を構成するには、適用タイプを設定します。

次の例は、Inspect only 適用タイプが設定された Model Armor テンプレートの構成を示しています。

export TEMPLATE_CONFIG='{
   "filter_config": {
    "rai_settings": {
     "rai_filters": [{
       "filter_type": "HATE_SPEECH",
       "confidence_level": "MEDIUM_AND_ABOVE"
      }, {
      "filter_type": "HARASSMENT",
      "confidence_level": "MEDIUM_AND_ABOVE"
    }, {
      "filter_type": "DANGEROUS",
      "confidence_level": "MEDIUM_AND_ABOVE"
    },{
      "filter_type": "SEXUALLY_EXPLICIT",
      "confidence_level": "MEDIUM_AND_ABOVE"
    }]
  },
  "pi_and_jailbreak_filter_settings": {
    "filter_enforcement": "ENABLED",
    "confidence_level": "LOW_AND_ABOVE"
  },
  "malicious_uri_filter_settings": {
    "filter_enforcement": "ENABLED"
  }
 },
 "template_metadata": {
    "enforcement_type": "INSPECT_ONLY",
    "multi_language_detection": {
      "enable_multi_language_detection": true
    }
  }
}'

curl -X POST \
    -d "$TEMPLATE_CONFIG"  \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates?template_id=TEMPLATE_ID"

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

  • PROJECT_ID: テンプレートが属するプロジェクトの ID。
  • TEMPLATE_ID: 作成するテンプレートの ID。
  • LOCATION: テンプレートの ロケーション

フロア設定を使用したプロジェクト レベルの構成

フロア設定は、API リクエストから modelArmorConfig パラメータが省略されている場合でも、プロジェクト内のすべての Gemini Enterprise Agent Platform generateContent 呼び出しに適用される保護の最小ベースラインを定義します。フロア設定の設定方法については、 フロア設定を構成するをご覧ください。

Model Armor と Gemini Enterprise Agent Platform の統合を有効にするには、 API または Google Cloud コンソールを使用して、プロジェクト レベルでのみフロア設定を行います。

Gemini Enterprise Agent Platform との統合でフロア設定を構成するには、次のコマンドを実行します。

gcloud

gcloud model-armor floorsettings update \
  --full-uri=projects/PROJECT_ID/locations/global/floorSetting \
  --add-integrated-services=VERTEX_AI

このコマンドでは、デフォルトで INSPECT_ONLY 適用モードが有効になります。モードを INSPECT_AND_BLOCK に変更するには、次のコマンドを実行します。

gcloud model-armor floorsettings update \
  --full-uri=projects/PROJECT_ID/locations/global/floorSetting \
  --vertex-ai-enforcement-type=INSPECT_AND_BLOCK

統合サービスから Gemini Enterprise Agent Platform を削除するには、次のコマンドを実行します。

gcloud model-armor floorsettings update \
  --full-uri=projects/PROJECT_ID/locations/global/floorSetting \
  --remove-integrated-services=VERTEX_AI

構成済みの統合サービスをすべてフロア設定から削除するには、次のコマンドを実行します。

gcloud model-armor floorsettings update \
  --full-uri=projects/PROJECT_ID/locations/global/floorSetting \
  --clear-integrated-services

PROJECT_ID は、フロア設定のプロジェクトの ID に置き換えます。

REST

curl -X PATCH \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -d '{"filterConfig" : {"piAndJailbreakFilterSettings": { "filterEnforcement": "ENABLED"}}, "integratedServices": ["AI_PLATFORM"], "aiPlatformFloorSetting":{"inspectOnly":true, "enableCloudLogging":true}, "enableFloorSettingEnforcement":true}' \
  "https://modelarmor.googleapis.com/v1/projects/PROJECT_ID/locations/global/floorSetting"

PROJECT_ID は、フロア設定を含むプロジェクトの ID に置き換えます。

フロア設定を構成して Gemini Enterprise Agent Platform サニタイズを有効にすると、Model Armor は、指定されたフィルタ設定を使用して、プロジェクトの Gemini エンドポイントに対するすべての generateContent API 呼び出しをサニタイズします。

次のコードサンプルは、generateContent メソッドの使用方法を示しています。

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-2.5-flash:generateContent" -d '{
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-2.5-flash:generateContent" -d '{
"contents": [
  {
      "role": "user",
      "parts": [
          {
              "text": ""
          }
      ]
  }
]
, "generationConfig": {
  "responseModalities": ["TEXT"]
  ,"temperature": 0.2
  ,"maxOutputTokens": 1024
  ,"topP": 0.8
}
}'

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

  • PROJECT_ID: 実際の Google Cloud プロジェクト ID。
  • LOCATION: Gemini エンドポイントの Google Cloud ロケーション。サポートされているロケーションについては、Model Armor API のロケーションをご覧ください。

次のコードサンプルは、generateContent メソッドからのレスポンスを示しています。

{
"promptFeedback": {
  "blockReason": "MODEL_ARMOR",
  "blockReasonMessage": "Blocked by Floor Setting. The prompt violated
  Responsible AI Safety settings (Harassment, Dangerous), Prompt Injection
  and Jailbreak filters."
},
"usageMetadata": {
  "trafficType": "ON_DEMAND"
},
"modelVersion": "gemini-2.5-flash",
"createTime": "2025-03-26T13:14:36.961184Z",
"responseId": "vP3jZ6DVOqLKnvgPqZL-8Ao"
}

フロア設定の適用タイプを定義する

Model Armor が検出を処理する方法を構成するには、 適用タイプINSPECTまたはINSPECT_AND_BLOCKに設定します。次の例は、INSPECT_AND_BLOCK 適用タイプを使用したフロア設定の構成を示しています。

gcloud

gcloud model-armor floorsettings update \
  --full-uri=projects/modelarmor-api-test/locations/global/floorSetting \
  --vertex-ai-enforcement-type=INSPECT_AND_BLOCK

REST

export FLOOR_SETTING='{
  "filterConfig": {
    "raiSettings": {
      "raiFilters": [
        { "filterType": "HATE_SPEECH", "confidenceLevel": "LOW_AND_ABOVE" },
        { "filterType": "DANGEROUS", "confidenceLevel": "LOW_AND_ABOVE" },
        { "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "LOW_AND_ABOVE" },
        { "filterType": "HARASSMENT", "confidenceLevel": "LOW_AND_ABOVE" }
      ]
    },
    "sdpSettings": {
      "basicConfig": { "filterEnforcement": "ENABLED" }
    },
    "piAndJailbreakFilterSettings": {
      "filterEnforcement": "ENABLED",
      "confidenceLevel": "LOW_AND_ABOVE"
    },
    "maliciousUriFilterSettings": { "filterEnforcement": "ENABLED" }
  },
  "integratedServices": ["AI_PLATFORM"],
  "aiPlatformFloorSetting": {
    "inspectAndBlock": true,
    "enableCloudLogging": true
  },
  "enableFloorSettingEnforcement": true
}'

curl -X PATCH \
    -d "$FLOOR_SETTING" \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://modelarmor.googleapis.com/v1/projects/PROJECT_ID/locations/global/floorSetting"

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

  • PROJECT_ID: フロア設定のプロジェクトの ID。
  • LOCATION: フロア設定の ロケーション

API 呼び出しでインライン適用をテストする

統合をテストして、Gemini Enterprise Agent Platform API の generateContent メソッドを呼び出します。構成されたフロア設定に違反するように設計されたプロンプトを使用します。

curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://${VERTEX_AI_LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${VERTEX_AI_LOCATION}/publishers/google/models/gemini-2.5-flash:generateContent" -d '{
"contents": [
    {
        "role": "user",
        "parts": [
            {
                "text": ""
            }
        ]
    }
]
, "generationConfig": {
    "responseModalities": ["TEXT"]
    ,"temperature": 0.2
    ,"maxOutputTokens": 1024
    ,"topP": 0.8
}
}'

統合が想定どおりに機能している場合、Model Armor がプロンプトを違反と識別すると、API は blockReason フィールドが MODEL_ARMOR に設定されたレスポンスを返します。

レスポンスの例を次に示します。

    {
    "promptFeedback": {
      "blockReason": "MODEL_ARMOR",
      "blockReasonMessage": "Blocked by Floor Setting. The prompt violated Responsible AI Safety settings..."
    },
    "usageMetadata": { "trafficType": "ON_DEMAND" },
    "modelVersion": "gemini-2.5-flash"
    }

インタラクションと優先順位のルール

Gemini Enterprise Agent Platform で Model Armor を使用する場合は、複数のレベルで安全構成を定義できます。このような場合、Model Armor と Gemini Enterprise Agent Platform は特定の優先順位に従います。

  1. Model Armor テンプレート: API リクエスト構成で明示的に 指定された構成が最も 優先されます。これらの設定は、その特定のリクエストの他の競合する構成をオーバーライドします。

  2. Model Armor のフロア設定: API リクエストでオーバーライド構成が 指定されていない場合は、Model Armor のフロア設定が 適用されます。

  3. Gemini Enterprise Agent Platform の安全フィルタ: Gemini Enterprise Agent Platform に組み込まれているデフォルトの安全フィルタの優先順位は最も低くなります。特定の Model Armor テンプレートまたはフロア設定を定義しない場合にのみ適用されます。

この階層型アプローチでは、Gemini Enterprise Agent Platform の固有の安全機能がベースラインとして使用されながら、広範な組織全体の最小基準(フロア設定を使用)とリクエストごとの制御(テンプレートを使用)が組み合わされます。

Model Armor と Gemini Enterprise Agent Platform の安全機能の動作は、構成の指定方法によって異なります。

テンプレートが構成されているか Gemini Enterprise Agent Platform の安全フィルタが構成されているか フロア設定が構成されているか 行動
はい はい すべて エラーが発生します。同じリクエストでテンプレート構成と Gemini Enterprise Agent Platform の安全フィルタの両方を指定することはできません。
はい いいえ すべて Model Armor は、modelArmorConfig で指定されたテンプレートを使用して実行されます。Gemini Enterprise Agent Platform の安全フィルタは無視されます。リクエスト テンプレートはフロア設定をオーバーライドします。
いいえ はい はい 両方とも実行されます。Model Armor はフロア設定ポリシーを使用してスキャンし、Gemini Enterprise Agent Platform は安全フィルタを評価します。最も制限の厳しい結果が適用されます。
いいえ いいえ はい Model Armor は、アクティブなフロア設定ポリシーを使用して実行されます。
いいえ はい いいえ Gemini Enterprise Agent Platform の安全フィルタのみが評価されます。 Model Armor は呼び出されません。
いいえ いいえ いいえ リクエストごとの Model Armor も Gemini Enterprise Agent Platform の安全フィルタも適用されません。ベースライン モデルの動作のみが有効です。