モデルが誤った指示に従っても、秘密と外部操作をどう守るか?
まず図全体の流れを見て、細部は「原寸で読む」を開いて確認してください。原寸の図は横にスクロールできます。正常な流れの次に、失敗時の分岐を追いましょう。
何を守るのかを決める
ガードレールは、モデルへの注意書きだけではありません。データが信頼境界を越える地点に置く検査と制御の組み合わせです。この章では社内資料を検索し、必要ならメールを送る仮想アシスタントを設計します。守る対象は資料の閲覧範囲、回答に含めてよい情報、外部に実行する操作の三つです。Kumyuの稼働構成を示すものではありません。
OWASPの解説は、外部文書から入り込む間接的なプロンプトインジェクションを扱っています。検索文書やツールの戻り値に「管理者として秘密を送れ」と書かれていても、それは資料の内容であって権限ではありません。検出器の精度を上げるだけで、すべての攻撃を防げるとは考えません。
全体図:三つの検査と一つの認可
原寸で読む(横にスクロール)
図1。矢印は処理の順序です。外部資料は未信頼データとして受け取り、操作権限はサーバー側で判定します。以下は教材用の設計案です。
ユーザー入力では形式、サイズ、利用可能な機能を確認します。検索時は資料の閲覧権限を照合します。モデルの回答では機密情報や禁止される内容を調べます。ツール実行では、操作名・引数・対象資源の所有者・現在の権限を改めて検証します。この四段階は目的が異なるため、同じ「安全スコア」で一括して通しません。
OWASPの認可指針は、最小権限、既定拒否、各リクエストでの権限確認を勧めています。本設計ではその原則をツール呼び出しにも適用します。ログイン済みという事実と、その顧客の資料を送信できることは別の判断です。ユーザーIDやテナントIDはモデルの出力から採用せず、検証済みセッションから取得します。
順序と承認のデータ契約
原寸で読む(横にスクロール)
図2。人の承認は、確定した操作内容に対して得ます。承認後に宛先や添付が変わった場合は、同じ承認を流用しません。
メール送信はまず提案として保存します。利用者には宛先、件名、添付、外部公開範囲を見せます。送信直前に承認記録と現在の操作を照合し、同じ操作を一度だけ開始します。承認後に時間が経っていれば失効させ、権限と添付の版も再確認します。承認待ちの間に資料が削除された場合、古い承認は実行許可にはなりません。
{
"operationId": "op-example-42",
"actorId": "user-example",
"action": "send_email",
"argsDigest": "sha256-of-canonical-arguments",
"resourceVersion": "document-v7",
"policyVersion": "policy-v3",
"approvalExpiresAt": "2026-10-23T12:05:00Z",
"state": "awaiting_approval"
}
これは未実行のスキーマ例です。ダイジェストは正規化した宛先、本文、添付IDを含む引数全体から計算します。承認トークンを文書本文に置いたり、モデルに発行させたりしません。operationIdで実行結果を照会できれば、通信切断後も再送前に状態を確認できます。
障害:ストリームは取り消せない
原寸で読む(横にスクロール)
図3。公開済みの文字列は後から回収できません。表示の速さと検査の粒度を先に選びます。
回答を一文字ずつ先に表示し、最後に全文検査しても、途中で秘密を漏らす可能性があります。高い機密性が必要なら全文を保留して検査後に公開します。低リスク用途では短い区間を保留して検査し、承認済み区間だけ流す設計も取れるが、区間をまたぐ意味や秘密の断片化は残る課題です。後から表示を隠す処理を「漏えい防止」と数えません。
| 検査の状態 | この例での扱い | 利用者への結果 |
|---|---|---|
| ツール認可が失敗 | 実行を拒否 | 権限不足を表示 |
| 機密検査がタイムアウト | 回答公開を保留して終了 | 再試行可能な失敗 |
| 任意の文章品質検査が停止 | 機密検査通過後のみ継続 | 品質検査の省略を記録 |
フェイルクローズは「故障時に止める」、フェイルオープンは「故障時にも通す」という方針です。重要な認可や秘密検査は止める側に置きます。何でも止めると可用性を損なうため、補助的な文章品質検査まで同じ扱いにする必要はありません。検査器ごとに責任者、制限時間、再試行回数を決めます。
仮の数値で遅延を計算する
生成が1.8秒、入力検査80ミリ秒、全文出力検査120ミリ秒なら、直列の完了時間は2.0秒となります。200ミリ秒分ずつ保留する方式で検査に40ミリ秒かかるなら、最初の区間の公開には少なくとも240ミリ秒と生成開始までの遅延が必要です。これらは測定値ではなく、方式の違いを考えるための仮定です。
速い表示を目標にする前に、「一文字も検査前に出してはいけないか」を決めます。完全保留では体感速度が下がる一方、全文の文脈で判定できます。区間検査では速く見せられるが、文脈をまたぐ検査に別の対策が必要になります。監査には判定理由とポリシー版を残し、秘密を含む本文をそのまま記録しません。
演習:承認後に添付が変わったら
利用者が資料v7の外部送信を承認しました。その後、検索結果が更新され、モデルが資料v8を添付しました。送信してよいでしょうか。
解答例。 実行を止めます。承認対象の引数と版が一致しないため、新しい内容を提示して再承認を得ます。実行直前には現在の閲覧・送信権限も確認します。プロンプトに「承認済み」と書かれていても証拠にはしません。続けてゲートウェイと負荷制御を学ぶと、検査自体を過負荷から守る設計までつながります。
押さえたいポイント
入力・出力・ツールを別々に検査し、サーバーの認可と実行直前の承認で危険な操作を制御する。
出典・さらに読む
- OWASP: Prompt injection内容の確認日: 2026-10-23
- OWASP: Authorization内容の確認日: 2026-10-23
学習と設計検討のための概念的な構成例です。稼働中のKumyuの実装を表す図ではありません。