.env ファイルをプロンプトに貼り付けます。取得されたドキュメントが
埋め込まれた API キーを運びます。「設定を表示して」と頼まれたモデルが、AWS
アクセスキーをそのままクライアントにエコーし返します。エージェントが、引数に
ライブトークンを焼き込んだツール呼び出しを構築します。これらのひとつひとつが、
クレデンシャルが逃げ出す経路です — アップストリームプロバイダのログへ、クライアントの
トランスクリプトへ、あるいはサードパーティツールへ。
このページは、OrcaRouter のガードレールと
エージェントファイアウォールを使って、アプリケーション
コードを変更せずに LLM シークレット漏洩を防ぐ方法を扱います。
検出は、すべてのバインド済みキーの手前 — ゲートウェイで行われます。そのため、
単一のポリシーが、SDK 変更なしに、すべてのプロバイダ、すべてのモデル、すべての
エージェントをカバーします。
1. シークレットはどこで漏れるか
クレデンシャルは、リクエストの 3 つの異なるポイントで逃げ出します:プロンプト内(input)
プロンプト内(input)
クレデンシャルは、モデルが実行される前にリクエスト内にあります — 貼り付けられた
キー、
.env のスニペット、取得された RAG チャンク内のトークン。チェックしないと
アップストリームプロバイダに到達し、彼らのログに残る可能性があります。Secrets
Blocker 入力ガードレールで止めます
(§2)。レスポンス内(output)
レスポンス内(output)
モデルがシークレットをクライアントに送り返します — コンテキストからキーを反芻するか、
クレデンシャル形状の文字列を幻覚します。出力シークレットルールで捕捉します
(§3)。
ツール呼び出し引数内
ツール呼び出し引数内
エージェントが、引数にトークンを入れたツール呼び出しを構築します。ファイアウォールの
sanitize 判定が、呼び出しがディスパッチされる前に引数からマッチした部分文字列を
リダクトします(§4)。
2. Secrets Blocker — プロンプト内のクレデンシャルを止める
Secrets Blocker は secrets カテゴリ下のガードレールプリセットで、input ステージで実行されます。リクエストをクレデンシャル形状 — AWS アクセスキー、OpenAI 形式のキー、GitHub トークン — についてスキャンし、呼び出しがゲートウェイを離れる前に ブロックします。クレデンシャルはモデルに決して到達しません。 コンソールで一度記述し、キーをアタッチすれば、そのキーを通るすべてのリクエストが スクリーニングされます:ガードレールを作成
コンソールで
/console/guardrails を開き、New guardrail をクリックし、
secrets カテゴリから Secrets & API-Key Blocker プリセットを適用します。
一般的なクレデンシャル形状向けの入力ステージブロックルールを持つガードレールを
シードします — そこから自由に編集できます。キーをアタッチ
/console/token を開き、API キーを編集し、Guardrail ドロップダウンから
ガードレールを選択します — または、ワークスペースデフォルトに設定して、すべての
未アタッチキーがそれを継承するようにします。[JWT] /
[AWS_ACCESS_KEY] タグ付きで)捕捉するには、jwt、aws_access_key、
api_key_openai をカバーする pii ルールがエンティティ駆動の代替手段です;
ガードレールリファレンスを
参照してください。
3. モデル出力内のシークレットをブロックする
シークレットはレスポンス内でも漏れ出せます — モデルがコンテキストからキーをエコー するか、クレデンシャル形状の文字列を発行します。output ステージにルールを追加して、 モデルの返信がクライアントに戻る前にスクリーニングします。 secrets カテゴリは、まさにこのために Code Secret in Output プリセットを 出荷しています:PEM 秘密鍵、AWS アクセスキー、OpenAI 形式のシークレットトークン向けの 出力ステージブロックルール。出力 マスキング(マッチを型付きタグに置き換え、レスポンス全体を拒否するのではない)
は現在、非ストリーミングレスポンスにのみ適用されます。出力内のクレデンシャルには、
block アクションがストリーミングトラフィック上で信頼できる選択です。それに依存する
前に、ガードレールの Test タブでステージ/ストリームの組み合わせを証明してください。
4. ツール呼び出し引数からシークレットをサニタイズする
エージェントがツール呼び出しを構築するとき、クレデンシャルが引数に紛れ込むことが あります。ファイアウォールの sanitize 判定は、ツール呼び出しの引数から マッチした部分文字列をリダクトし、クリーニングされた呼び出しを転送します — 書き換える ライブの呼び出し時引数があるresponse と mcp サーフェスで。
sanitize ルールは、その sanitize_json 設定でリダクトする検出器を指定します —
組み込みプリセットのセットとオプションのカスタム正規表現。マッチした素材は
[redacted:<preset>] に置き換えられます(カスタムマッチは [redacted:custom]):
aws_access_key、
aws_secret_key、openai_key、anthropic_key、bearer_token(加えて PII 向けの
email、ssn_us、credit_card)です。サニタイズルールは少なくとも 1 つのプリセット
またはカスタムパターンを指定しなければなりません — 空のサニタイザは保存時に拒否
されます。
Secrets Blocker ガードレール(§2)は、
リクエストボディ内のクレデンシャルに対する主要な防御であり続けます — ファイアウォール
サニタイザは、特にツール呼び出し引数内に現れるシークレットに対するアクション層の
補完です。
5. 3 つの防御を重ねる
| シークレットの場所 | 止める層 | アクション |
|---|---|---|
| プロンプト内 | Secrets Blocker(入力ガードレール) | block |
| モデルの返信内 | 出力シークレットルール(出力ガードレール) | block |
| ツール呼び出し引数内 | ファイアウォールサニタイザ | sanitize |
6. 何が発火したかを観察する
発火したすべてのガードレールルールはマッチ — ルール型、アクション、ステージ、 詳細文字列 — をワークスペースの Matches フィード(GET /api/guardrail/match、Member)に
記録します。マッチした部分文字列は 「Log raw content」がオンのときだけ記録されます。
これはデフォルトでオフ — プライバシー保守的な姿勢で、Matches フィード自体が
シークレットが蓄積する場所にならないようにするためです。トリアージのために部分文字列が
特に必要でない限り、クレデンシャルルールではオフのままにしてください。
ファイアウォールのサニタイズ決定はファイアウォールの Events フィード
(GET /api/workspace/firewall/events、Developer+)に残り、シークレットとルール
ブロブは決してログされません。
7. 次に進む先
ガードレールリファレンス
ルール型、PII エンティティ、プリセット、テストサンドボックス、eval ハーネスの
完全版。
ファイアウォールルールリファレンス
マッチング言語 — ツールグロブ、引数句、サニタイザ。
PII 漏洩
兄弟のコンテンツ脅威:プロンプトとレスポンス内の個人データ。
データ持ち出し
漏洩したクレデンシャルがアウトバウンドの持ち出し呼び出しのペイロードになるとき。
ガードレール vs ファイアウォール
どのプレーンがどのクラスの漏洩を止めるか、そしてそれらがどう組み合わさるか。
セキュアエージェント ベースライン
これらの防御を一緒にオンにするスターター姿勢。
