# AIエージェントをソフトウェアに組み込むプラクティス
# ツールゲートウェイ・MCP仲介
🎯 エージェントのツール呼び出し、全部「野良API」になっていませんか?
AIエージェントが複数のツールやMCPサーバを直接呼び出す構成は、認可漏れ・二重実行・監査不能の温床です。単一のゲートウェイを挟むだけで、セキュリティの一貫性が劇的に変わります。
🔥 解決する課題
エージェントが外部ツールを直接叩く構成では、認可・レート制限・ログがツールごとにバラバラになります。プロンプトインジェクションで悪意ある引数が混入しても個別ツール側では弾けず、権限昇格や意図しない操作が起きえます。さらに呼び出しログが分散し、「誰の権限で・なぜこのツールが呼ばれたか」の事後追跡コストが跳ね上がります。
💡 提案パターン
全ツール呼び出しを単一のゲートウェイ層に集約し、認可・入力サニタイズ・レート制限・監査ログを一元管理します。タスク種別やユーザ権限に応じてツールを動的にスコーピングし、LLMに不要なツールを見せない設計にします。書込系ツールには操作単位の細粒度認可とHITL承認を、読取系にはカテゴリ単位の緩い認可を適用する非対称ポリシーが鍵です。ツールの追加・削除もゲートウェイの設定変更だけで完結し、エージェント本体のコード変更は不要になります。
✅ 選定条件
使うとき:
- エージェントが複数ツールを呼び出し、少なくとも一つが副作用を持つ
- ユーザ入力や外部データがツール引数に含まれうる(input_trustが低い)
- 「どのツールが・どの引数で・誰の権限で呼ばれたか」の説明義務がある
使わないとき:
- ツールが1つだけかつ読み取り専用で、ゲートウェイのオーバーヘッドが見合わない
- 全ツールが社内信頼済みの実験環境で、まずプロトタイプ速度を優先したい
⚠️ 落とし穴
- ゲートウェイ自体が単一障害点になります。ヘルスチェックと縮退モード(読取のみ許可など)の設計が必須です
- 認可やサニタイズをプロンプトで行ってはいけません。「このツールは使わないで」はインジェクションで迂回されます
- レート制限はセッション単位だけでは不十分です。大量セッション攻撃に備え、グローバル単位との二層で設けましょう
🔧 実装方針
- ゲートウェイのポリシーをYAML等の宣言的定義で管理し、ツールごとにtype(read/write)・認可粒度・レート制限・サニタイズ・ログレベルを設定します
- タスク種別・ユーザ権限・会話フェーズに応じてLLMに露出するツールを動的にスコーピングし、不要なツールを選択肢から除外します
- ヘルスチェックと縮退モード(読取のみ許可)を設け、ゲートウェイ障害時にもシステム全体が停止しない設計にします
- MCPサーバ間のスキーマ不統一をゲートウェイ層で正規化し、エージェントには一貫したインターフェースを提供します
- 高リスクなコード実行はサンドボックスへルーティングし、長時間セッションには短命の権限リースで権限範囲を時間制限します
#
AIエージェント# #
ソフトウェアアーキテクチャ#