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

このドキュメントでは、プロンプトとレスポンスをスクリーニングして Gemini Enterprise Agent Platform の Gemini モデルを保護するように Model Armor を構成する方法について説明します。Model Armor は、Gemini Enterprise Agent Platform と統合することで、プロンプトが 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 SDKFirebase 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 はブロック判定を発行して、機密データがそれ以上の処理に進まないようにします。
  • この統合では、ドキュメントやファイル アップロード(PDF など)を含むプロンプトとレスポンスのサニタイズはサポートされていません。ドキュメントをスクリーニングするには、Model Armor REST API を直接呼び出します。
  • 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: テンプレートのロケーション

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

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

フロア設定では、デフォルトで Stable フィルタ バージョンが使用されます。この設定をオーバーライドする場合は、Gemini モデルへの 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 の安全性フィルタも適用されません。ベースライン モデルの動作のみが有効です。