メインコンテンツへスキップ
シークレットは、あるべきでない場所に行き着きます。開発者が「デバッグの手伝い」の ために .env ファイルをプロンプトに貼り付けます。取得されたドキュメントが 埋め込まれた API キーを運びます。「設定を表示して」と頼まれたモデルが、AWS アクセスキーをそのままクライアントにエコーし返します。エージェントが、引数に ライブトークンを焼き込んだツール呼び出しを構築します。これらのひとつひとつが、 クレデンシャルが逃げ出す経路です — アップストリームプロバイダのログへ、クライアントの トランスクリプトへ、あるいはサードパーティツールへ。 このページは、OrcaRouter のガードレールエージェントファイアウォールを使って、アプリケーション コードを変更せずに LLM シークレット漏洩を防ぐ方法を扱います。
検出は、すべてのバインド済みキーの手前 — ゲートウェイで行われます。そのため、 単一のポリシーが、SDK 変更なしに、すべてのプロバイダ、すべてのモデル、すべての エージェントをカバーします。

1. シークレットはどこで漏れるか

クレデンシャルは、リクエストの 3 つの異なるポイントで逃げ出します:
クレデンシャルは、モデルが実行される前にリクエスト内にあります — 貼り付けられた キー、.env のスニペット、取得された RAG チャンク内のトークン。チェックしないと アップストリームプロバイダに到達し、彼らのログに残る可能性があります。Secrets Blocker 入力ガードレールで止めます (§2)。
モデルがシークレットをクライアントに送り返します — コンテキストからキーを反芻するか、 クレデンシャル形状の文字列を幻覚します。出力シークレットルールで捕捉します (§3)。
エージェントが、引数にトークンを入れたツール呼び出しを構築します。ファイアウォールの sanitize 判定が、呼び出しがディスパッチされる前に引数からマッチした部分文字列を リダクトします(§4)。
最初の 2 つはコンテンツチェック(ガードレール)です;3 つ目はアクションチェック (ファイアウォール)です。多層防御のために 3 つすべてを重ねてください。

2. Secrets Blocker — プロンプト内のクレデンシャルを止める

Secrets Blockersecrets カテゴリ下のガードレールプリセットで、input ステージで実行されます。リクエストをクレデンシャル形状 — AWS アクセスキー、OpenAI 形式のキー、GitHub トークン — についてスキャンし、呼び出しがゲートウェイを離れる前に ブロックします。クレデンシャルはモデルに決して到達しません。 コンソールで一度記述し、キーをアタッチすれば、そのキーを通るすべてのリクエストが スクリーニングされます:
1

ガードレールを作成

コンソールで /console/guardrails を開き、New guardrail をクリックし、 secrets カテゴリから Secrets & API-Key Blocker プリセットを適用します。 一般的なクレデンシャル形状向けの入力ステージブロックルールを持つガードレールを シードします — そこから自由に編集できます。
2

キーをアタッチ

/console/token を開き、API キーを編集し、Guardrail ドロップダウンから ガードレールを選択します — または、ワークスペースデフォルトに設定して、すべての 未アタッチキーがそれを継承するようにします。
3

リクエストを送信

その sk-orca-... キーで、これまでと全く同様にゲートウェイを呼び出します:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "messages": [
      {"role": "user", "content": "why is AKIAIOSFODNN7EXAMPLE rejected"}
    ]
  }'
AWS キー形状がガードレールを発動させ、リクエストは HTTP 400 guardrail_blocked で拒否されます。キーはモデルに決して到達しません。
ブロックされたリクエストはクォータを消費しません — 入力ステージのブロックは メータリングの前に発火します — そして skip-retry とマークされるため、同じ プロンプトを再実行してもまたブロックされるだけで、フォールバックチャネルを焼くことは ありません。
より広いカバレッジが必要ですか? secrets カテゴリは、PEM 秘密鍵、Slack と Stripe トークン、Google API キー、JWT をブロックする Private Keys & Cloud Tokens プリセットも出荷しています。両方を適用してください — ガードレールは任意の数の ルールを保持できます。JWT とクレデンシャル形状を型付きエンティティとして([JWT] / [AWS_ACCESS_KEY] タグ付きで)捕捉するには、jwtaws_access_keyapi_key_openai をカバーする pii ルールがエンティティ駆動の代替手段です; ガードレールリファレンスを 参照してください。
ファイアウォールの tight 自律性レベルは、 PII Shield と破壊的シェル拒否と並んで、その姿勢の一部として Secrets Blocker ガードレールをオンにします。ルールを手で記述する代わりにひとつのスイッチが欲しいなら、 それが高速な道です。クレデンシャルチェック自体は常にガードレールです — ファイアウォールの引数スキャナではありません。

3. モデル出力内のシークレットをブロックする

シークレットはレスポンス内でも漏れ出せます — モデルがコンテキストからキーをエコー するか、クレデンシャル形状の文字列を発行します。output ステージにルールを追加して、 モデルの返信がクライアントに戻る前にスクリーニングします。 secrets カテゴリは、まさにこのために Code Secret in Output プリセットを 出荷しています:PEM 秘密鍵、AWS アクセスキー、OpenAI 形式のシークレットトークン向けの 出力ステージブロックルール。
{
  "type": "regex",
  "stage": "output",
  "action": "block",
  "pattern": "AKIA[0-9A-Z]{16}"
}
出力 block は非ストリーミングとストリーミングの両方のレスポンスで強制されます — ストリームでは、スキャナが、ブロックされたコンテンツがクライアントに到達する前に レスポンスを途中で切断します。出力ブロックは事前消費されたクォータを返金します。
出力 マスキング(マッチを型付きタグに置き換え、レスポンス全体を拒否するのではない) は現在、非ストリーミングレスポンスにのみ適用されます。出力内のクレデンシャルには、 block アクションがストリーミングトラフィック上で信頼できる選択です。それに依存する 前に、ガードレールの Test タブでステージ/ストリームの組み合わせを証明してください。

4. ツール呼び出し引数からシークレットをサニタイズする

エージェントがツール呼び出しを構築するとき、クレデンシャルが引数に紛れ込むことが あります。ファイアウォールの sanitize 判定は、ツール呼び出しの引数から マッチした部分文字列をリダクトし、クリーニングされた呼び出しを転送します — 書き換える ライブの呼び出し時引数がある responsemcp サーフェスで。 sanitize ルールは、その sanitize_json 設定でリダクトする検出器を指定します — 組み込みプリセットのセットとオプションのカスタム正規表現。マッチした素材は [redacted:<preset>] に置き換えられます(カスタムマッチは [redacted:custom]):
{
  "priority": 10,
  "label": "Redact AWS keys from tool args",
  "stage": "response",
  "tool_name_glob": "*",
  "verdict": "sanitize",
  "sanitize_json": {
    "presets": ["aws_access_key", "aws_secret_key", "openai_key", "anthropic_key", "bearer_token"],
    "custom": []
  }
}
サニタイザが利用できるシークレット形状プリセットは、aws_access_keyaws_secret_keyopenai_keyanthropic_keybearer_token(加えて PII 向けの emailssn_uscredit_card)です。サニタイズルールは少なくとも 1 つのプリセット またはカスタムパターンを指定しなければなりません — 空のサニタイザは保存時に拒否 されます。
サニタイズは引数をリダクトし、結果はリダクトしません。 エージェントが記述した ツール呼び出しの引数をクリーニングします;ツールが返すコンテンツはスクラブ しません。そして inbound サーフェス — 呼び出し時の引数がまだない — では、 サニタイズは deny にエスカレートします。マッチング言語については ファイアウォールルールリファレンスを 参照してください。
Secrets Blocker ガードレール(§2)は、 リクエストボディ内のクレデンシャルに対する主要な防御であり続けます — ファイアウォール サニタイザは、特にツール呼び出し引数内に現れるシークレットに対するアクション層の 補完です。

5. 3 つの防御を重ねる

シークレットの場所止める層アクション
プロンプト内Secrets Blocker(入力ガードレール)block
モデルの返信内出力シークレットルール(出力ガードレール)block
ツール呼び出し引数内ファイアウォールサニタイザsanitize
新しいルールはまずシャドウモード(ファイアウォール)または flag アクション (ガードレール)でロールアウトします。events / Matches フィードを監視して、実際の クレデンシャルに発火し、無害な類似物には発火しないことを確認してから、強制アクションに 切り替えます。

6. 何が発火したかを観察する

発火したすべてのガードレールルールはマッチ — ルール型、アクション、ステージ、 詳細文字列 — をワークスペースの Matches フィード(GET /api/guardrail/match、Member)に 記録します。マッチした部分文字列は 「Log raw content」がオンのときだけ記録されます。 これはデフォルトでオフ — プライバシー保守的な姿勢で、Matches フィード自体が シークレットが蓄積する場所にならないようにするためです。トリアージのために部分文字列が 特に必要でない限り、クレデンシャルルールではオフのままにしてください。 ファイアウォールのサニタイズ決定はファイアウォールの Events フィード (GET /api/workspace/firewall/events、Developer+)に残り、シークレットとルール ブロブは決してログされません。

7. 次に進む先

ガードレールリファレンス

ルール型、PII エンティティ、プリセット、テストサンドボックス、eval ハーネスの 完全版。

ファイアウォールルールリファレンス

マッチング言語 — ツールグロブ、引数句、サニタイザ。

PII 漏洩

兄弟のコンテンツ脅威:プロンプトとレスポンス内の個人データ。

データ持ち出し

漏洩したクレデンシャルがアウトバウンドの持ち出し呼び出しのペイロードになるとき。

ガードレール vs ファイアウォール

どのプレーンがどのクラスの漏洩を止めるか、そしてそれらがどう組み合わさるか。

セキュアエージェント ベースライン

これらの防御を一緒にオンにするスターター姿勢。