エージェンティック・ハーネス設計ガイド — Part 5(最終回)
封じ込めと承認設計
境界を先に敷く。承認は、最後の一手。
「重要な操作は人が承認します」——AIエージェントの導入計画に、ほぼ必ず書かれる一文です。しかしこれを唯一の防護にしてはいけないことが、実測で示されています。Claude Code の許可プロンプトは約 93% が承認されている。人間の監督は、決定論的な環境境界の代わりにはなりません。
シリーズ最終回では、Part 1の6つの構成要素でいう「実行環境」と「再利用・統制」の安全側面——封じ込めと承認——を扱います。
この記事の主張はひとつです。安全は、承認の丁寧さではなく、境界の設計で決まる。承認を厚くするより、そもそも届かない範囲を広く取るほうが、確実で、運用も軽くなります。
1.危険は、3つが揃ったときに生まれる
エージェントのリスクを「AIが暴走する」と捉えると、対策が漠然とします。実際には、特定の条件が揃ったときに経路が生まれるという構造で捉えたほうが設計しやすくなります。
この捉え方の利点は、作業単位で切れることです。「外部の文書を読ませる作業では、その間だけ外部送信の手段を渡さない」「機密を扱う作業では、外部サイトを取得させない」——全部を安全にしようとするより、はるかに現実的に守れます。
2.許可は「宛先のフィルタ」ではなく「能力の付与」
次に、許可の捉え方です。ここは言葉の理解がそのまま設計の甘さになる箇所です。
出発点は既定でゼロアクセス——何にも届かない状態から始め、必要な能力だけを名指しで足していく設計です。「とりあえず全部許可して、後で絞る」は、運用が始まると実際には絞られません。
さらに一段絞れると効果的です。同じサービスへの接続でも、リソースと操作の単位まで限定できれば、渡す能力は小さくなります。読み取りだけを許す、特定のフォルダだけを見せる、書き込みには人の確認を要求する——公開されている実装では、こうした粒度での制御が採られています。
3.隔離の強度は、利用者に合わせる
隔離は1種類ではありません。そして強ければ良いというものでもなく、利用者に合わせて選ぶ対象です。
自作しないほうがよい部分
「許可された通信だけを通すプロキシを自前で作る」という設計は、抜け道を塞ぎきれないことが多く報告されています。パスの検証と実体の解決の順序ひとつで境界が破れるような、細かく難しい領域です。ここは成熟した隔離の仕組みに任せ、自作するならその上のポリシー層にするのが安全です。
関連して、信頼できない入力の扱いにも順序があります。外部から来たデータを解釈するのは、信頼境界を確立した後にする。境界の外で複雑な解析を先に走らせると、そこ自体が攻撃面になります。
4.資格情報を、エージェントに渡さない
隔離と並んで効くのが、そもそも鍵を渡さない構成です。
この構成の効果は明快です。エージェントが乗っ取られても、鍵そのものは渡っていません。できるのは仲介役への依頼だけで、その依頼はポリシーと記録を必ず通ります。
逆に、サンドボックスの中に鍵を置いてしまうと、隔離の強度がそのまま鍵の防御力になります。隔離が破られた瞬間に鍵も渡る、という一本勝負の設計になってしまいます。
5.承認は、境界の代わりにならない
ここで冒頭の話に戻ります。承認は必要ですが、置く場所を間違えると機能しません。
①と②が効いている状態なら、③に回ってくる件数は自然に減ります。逆に①②が薄いと、③にすべてが押し寄せ、件数が増えた結果として1件あたりの判断が薄くなる——これが約93%という数字の背景にある構造です。
承認の設計を考えるときは、まず「この承認は、①か②で置き換えられないか」を問うのが順序になります。
6.承認は、減らすほど質が上がる
それでも残る承認を、どう見せるか。ここにも設計の余地があります。
公開されている実装では、承認待ちの操作について「すべて適用されたらどう見えるか」を先に見せる方式が採られています。エージェントは止まらず先へ進み、人はまとめて判断する。シミュレーションが難しい操作だけ、そのターンで待たせる——という切り分けです。
「今後も承認する」を作る場合は、2つのゲートを両方通す設計にします。作り手が「この操作は自動承認してよい」と定義側で宣言していること、かつ利用者が「この種別は今後も自動でよい」と選んでいること。片方だけで自動承認にすると、作り手か利用者のどちらかが意図しない範囲まで開いてしまいます。
- 承認をまとめる単位は「ターン」にする。1つでも拒否されたら再開せず、次の指示を待つ——拒否の理由を推測させない。
- 順序を保って適用する。人の判断が要る操作を飛び越して先の操作を適用しない。
- 承認を通る経路は1本に絞る。複数あると、必ずどこかで記録が漏れる。
7.読んだことも、同じ記録に残す
監査ログを「書き込みの記録」だと捉えていると、肝心のことが追えなくなります。
エージェントの行動を後から説明するには、結果だけでなく、その判断が何を見て行われたかが要ります。「なぜこの取引先に送ったのか」を追うには、直前に何を参照したかが残っている必要があります。
承認の記録では、「誰の権限で開いたか」を必須項目にするのが効きます。記録するかどうかを実装者の善意に任せず、承認を実行する関数がその情報なしには呼べない形にしておくと、記録漏れが構造的に起きなくなります。自動承認だった場合も、その旨を残します。
8.敷く順番を、間違えない
最後に、実装の順序です。ここは後回しにするほど高くつく性質があります。
とくに②は、機能を足す前に敷いておくのが安い部分です。自動承認や再実行といった機能は、承認の経路を増やす方向に働きます。経路が1本に絞られた後なら安全に足せますが、増えた後で1本にまとめるのは難しくなります。
9.アンチパターン早見表
ここまでの内容を、実装で見かける形にして並べます。
| よくある実装 | 何が問題か | どうするか |
|---|---|---|
| 承認を唯一の安全策にする | 約93%は承認される。回数が増えるほど判断が薄くなる | 先に環境の境界を敷き、承認は不可逆な操作に絞る |
| とりあえず広く許可し、後で絞る | 運用が始まると、実際には絞られない | 既定はゼロアクセス。必要な能力だけ名指しで足す |
| 許可リストを宛先フィルタとして扱う | そのサービスでできること全部を渡している | リソースと操作の単位まで絞る |
| サンドボックスの中に資格情報を置く | 隔離が破られた瞬間、鍵も渡る | 仲介役に持たせ、依頼だけを通す |
| 自作の許可プロキシで隔離を代用する | 抜け道を塞ぎきれない | 成熟した隔離の仕組みを使う |
| 1件ずつ同期で承認を求める | 待たされるほど、中身を見ずに押すようになる | 進めておいて、まとめて判断させる |
| 書き込みだけを監査ログに残す | 何を根拠に判断したかが追えない | 読み取りも同じ連番に載せる |
| 承認経路が複数ある | 記録漏れが起き、後から説明できない | 承認を通る経路を1本に絞る |
Summary
この記事の要点
- 1安全は、承認の丁寧さではなく境界の設計で決まる。届かないものは、そもそも触れない。
- 2危険は「機密に触れる × 信頼できない入力 × 外部へ送信できる」が揃ったときに生まれる。1つ外せば経路は成立しない。
- 3許可は「宛先のフィルタ」ではなく「能力の付与」。何ができるようになるかで判断し、リソースと操作まで絞る。
- 4既定はゼロアクセス。「とりあえず許可して後で絞る」は、絞られないまま運用に入る。
- 5隔離の強度は利用者に合わせる。現場が使うなら、精査ではなく絶対的な境界が要る。
- 6隔離そのものは自作しない。自作するなら、その上のポリシー層にする。
- 7資格情報はエージェントに渡さない。仲介役に持たせ、依頼だけを通す。
- 8承認プロンプトの約93%は承認される。人の承認は最後の一手で、不可逆な操作に絞る。
- 9承認は減らすほど質が上がる。まとめて判断させ、自動承認は作り手と利用者の2ゲートを両方通す。
- 10監査ログには読み取りも載せる。承認の記録は「誰の権限で開いたか」を必須項目にする。
- 11敷く順番は 境界 → ゲート → 記録。後回しにするほど高くつく。
Series complete
シリーズ全5回のまとめ
エージェンティック・ハーネスの設計を、定義から統制まで5回で辿りました。全体像を確認したいときの索引としてお使いください。
Sources
出典・参考文献
本記事は、以下の一次資料をもとに整理しています。数値・仕様は各出典の公開時点のものです。
FAQ
よくある質問
不十分です。Anthropicの報告によれば、Claude Codeの許可プロンプトは約93%が承認されており、承認を求める回数が増えるほど1件あたりの判断は薄くなります。人間の監督は決定論的な環境境界の代替になりません。まず既定でゼロアクセスとし、隔離された実行環境と、必要な能力だけを与える許可設計を先に敷いたうえで、人の承認は金銭・削除・外部送信・公開といった不可逆な操作に絞ります。
「機密データに触れる」「信頼できない入力にさらされる」「外部へ送信できる」の3つが同時に揃ったときです。外部から混入した指示が、機密を外へ運ぶ経路になり得ます。すべてを安全にしようとするより、この3つを同時に揃わせない設計のほうが現実的です。たとえば外部の文書を読ませる作業では、その間だけ外部送信の手段を渡さない、といった切り方をします。
「宛先のフィルタ」ではなく「能力の付与」として捉える必要があります。あるサービスへの接続を許すことは、そのサービスでできること全部——ファイルのアップロード、任意の相手への共有、既存ファイルの削除など——を許すことに等しくなります。判断は「どこへつなぐか」ではなく「何ができるようになるか」で行い、許可の単位をリソースと操作まで絞ります。
利用者の専門性に合わせます。開発者は実行される内容を読んで危険かどうか判断できるため、精査に耐える範囲で弱めの隔離も選べます。一方、業務の現場が使う場合は実行内容の精査を期待できないため、精査ではなく絶対的な境界が必要になります。また、自作の許可プロキシで代用しようとすると抜け道を塞ぎきれないことが多く、成熟した隔離の仕組みを使うのが定石です。
渡さない構成が推奨されます。資格情報は外側の仲介役に持たせ、エージェントは「仲介役に依頼する」ことしかできないようにします。仲介役がポリシーを適用し、何を読んだかを記録し、操作を仲介します。この構成なら、エージェントが乗っ取られても鍵そのものは渡っていません。逆にサンドボックスの中に鍵を置くと、隔離の強度がそのまま鍵の防御力になってしまいます。
回数を減らすことが、そのまま質を上げます。1件ずつ止めて聞くのではなく、エージェントは進めておいて、同じターンで承認待ちになった操作をまとめて判断させる方式が有効です。適用後にどう見えるかを一緒に提示できると、判断の材料が揃います。「今後も承認する」を作る場合は、作り手が自動承認可と宣言していること、かつ利用者がその種別を許可していること——2つのゲートを両方通す設計にします。
Part 4
ツール設計とスキル — 読ませすぎない
ツールが選べない原因は、モデルの能力ではなく設計にある。
関連ガイド
AIエージェントのセキュリティ設計
本シリーズが「止める・再開する」を扱うのに対し、こちらは「守る」側。あわせて読むと全体像が揃います。
実行基盤を、自社で持ちたい方へ
homulaは、AIエージェント実行基盤の要件定義から設計・構築・運用までを支援しています。境界・ゲート・記録の設計は、運用が始まる前に定めておくべき領域です。