sanitize 判定が実際に何をリダクトし、何をしないか、そして
ツールが返すコンテンツをどの制御が統制するかです。
1. mcp サーフェスでの「sanitize」の意味
エージェントが MCP ゲートウェイ経由でツールを呼び出すとき、 すべてのtools/call はディスパッチ前に mcp サーフェス上で評価されます。マッチした
ルールは、作成可能なファイアウォール判定 — allow、
audit、deny、sanitize、pending_approval、または cap_cost — のひとつを持ち
ます。sanitize 判定はリダクトするものです:
- 呼び出しの引数(モデルがツールに渡した JSON)に対して、一連のシークレット形状 検出器を実行します。
- 各マッチは
[redacted:openai_key]のような正規トークンに置き換えられ、書き換え られた引数がサーバーに転送されるものになります。 - ツールは依然として実行されます —
sanitizeは非ブロッキングの通過判定です。 エージェントはクラッシュしません;ただ生のシークレットをツールに決して渡さないだけ です。
sk- 形式の API
キー、Bearer トークン、US SSN、Luhn 有効なカード番号、メール)をカバーし、ルールは
そのマッチが [redacted:custom] としてレンダリングされるカスタム正規表現を追加でき
ます。
inbound サーフェス — リクエストが宣言するアドバタイズされた
tools[]、任意の
ツールが呼ばれる前 — では、リダクトする呼び出し時の引数がないため、そこでの
sanitize 判定はフェイルクローズして deny にエスカレートします。Sanitize は、
書き換えるべきライブの引数ペイロードがある場所 — mcp と response サーフェス — でのみ
意味を持ちます。2. 具体的なルール 1 つ
引数に OpenAI 形式のキーを含む任意のツール呼び出しを、ブロックするのではなく、キーを スクラブして転送したいとします。sanitize 判定を持つルールを mcp サーフェス上で、
そのシークレット形状を検出するよう設定して作成します。これをコンソール
(Firewall → policy → rules)から行います;書き込みには Developer+ が必要です。
ルールは、概念的に:
| フィールド | 値 |
|---|---|
| サーフェス | mcp |
tool_name_glob | *(または 1 つのサーバーにスコープ、例:github.*) |
| 判定 | sanitize |
| Sanitize プリセット | 有効化するシークレット検出器 |
sanitize 判定、サーフェス、マッチしたルールを記録します。
3. ツール結果は信頼されていない — モデル応答で統制する
ここが、ほとんどの「出力をサニタイズ」設定が間違える部分です。sanitize 判定は
引数のみに触れます。ツールの結果 — MCP サーバーが返すテキストや JSON — は、
ファイアウォール判定によって決して書き換えられません。
OrcaRouter はツール結果のコンテンツをモデルへの信頼されていない入力として扱います。
侵害された、あるいはポイズニングされた MCP サーバーは、シークレット、PII レコード、
あるいはデータに見せかけたプロンプトインジェクションペイロードを返せます。その
コンテンツの制御は、output ステージ — モデルがツール結果を取り込んだ後に評価
されるモデルの応答 — に対するガードレールです。
応答に表面化するシークレットを捕捉する
応答に表面化するシークレットを捕捉する
Secrets & API-Key Blocker プリセット(カテゴリ
secrets)を持つガードレールを
アタッチします。これは AWS / OpenAI / GitHub 形式のクレデンシャルをブロックします;
PEM キー、Slack/Stripe トークン、Google キー、JWT のために Private Keys &
Cloud Tokens とペアにします。output ステージのブロックは guardrail_blocked
(HTTP 400)を返し、リクエストのクォータを払い戻します。応答内の PII をリダクトする
応答内の PII をリダクトする
PII Shield プリセットは、型付きエンティティ —
[EMAIL]、[SSN]、
[CREDIT_CARD]、… — をマスクし、マッチした値をタグとしてレンダリングします。
input ステージのマスキングはすべてのリクエスト(ストリーミングかどうかにかかわらず)
でライブです:モデルが見る前にリクエストをマスクします。output ステージの
マスキングは、非ストリーミング応答でのみモデル応答を書き換えます;
ストリーミング応答のインバンド書き換えはロードマップ上にあるため、マスクルールは
まだストリームされた応答をリダクトしません。ツール結果に乗るインジェクションを無力化する
ツール結果に乗るインジェクションを無力化する
ポイズニングされた結果は「以前の指示を無視せよ」形式のテキストを運べます。
Prompt-Injection Basics 安全プリセット(キーワード/正規表現)に加えて、
インジェクション意図をスコアする
llm_judge ルールがここでの制御です。
MCP ツールポイズニングと
プロンプトインジェクションを参照して
ください。output 強制とストリーミング。 output ステージのブロックは、ストリーミングと
非ストリーミングの両方の応答で強制されます — ストリームでは、マッチしたときに
ブロックがストリームを切断し、汎用のブロック通知を発します。output ステージの
マスクは、非ストリーミング応答にのみ適用されます;ストリーミング応答の
インバンド書き換えはロードマップ上にあるため、マスクルールはまだストリームされた応答を
リダクトしません。
4. 各制御がどこにあるか
2 つのサーフェスのコンパクトな地図です。正しいノブを正しいリスクに配線できるように:| 統制したいもの… | 制御 | どこ |
|---|---|---|
| ツール呼び出しの引数内のシークレット | ファイアウォール sanitize 判定(mcp サーフェス) | ファイアウォールルール |
| ツールの結果内のシークレット/PII/インジェクション | output ステージのガードレール | ガードレール |
5. アタッチと観察
両方の制御はワークスペーススコープで、名前付き、順序付けされ、両方とも同じ 2 通りで アタッチします:- キーごと — エージェントが使うキーに
firewall_policy_id(sanitize ルール用)とguardrail_id(output ポリシー用)を 設定します。 - ワークスペースデフォルト — ポリシー/ガードレールをワークスペースデフォルトと してマークすると、すべてのキーがそれを継承します。
6. 次のステップ
MCP ツールの許可リスト化
サーバーをデフォルト拒否にし、レビューしたツールだけを許可します。
ファイアウォールルール
完全なルール DSL — 判定、グロブ、args-match、sanitize 設定。
ガードレール
コンテンツポリシー、プリセット、PII エンティティ、output ステージの強制。
MCP ツールポイズニング
そもそもツール結果を信頼されていないものにする脅威。
