Skip to Content
Docs06. セキュリティツール権限設計とサンドボックス

この記事の音声は準備中です。

音声の一覧・再生リストへ

ツール権限設計とサンドボックス

この記事の目的

「モデルは騙されうる」を前提に、被害の上限を決める側 — ツールの権限とサンドボックス(sandbox) — を設計できるようになります。最小権限・ユーザー権限の継承・承認ゲートの配置、コード実行やコンピュータ操作型に必須の隔離環境、外部 MCPツールやデータソースを LLM アプリケーションに接続するための標準プロトコル。概要は ツール使用、接続の実務は ツール接続標準(MCP とエコシステム) サーバーを信頼する条件を扱います。

対象読者

  • Agent に書き込み系ツール・コード実行・外部サービス接続を持たせるエンジニア
  • Agent の権限設計をレビューするテックリード・セキュリティ担当者

前提知識

本文

概要: 権限は「渡した分だけ悪用されうる」と考える

プロンプトインジェクションモデルへの入力に紛れ込ませた指示で、開発者の意図した挙動を上書きする攻撃。ユーザー入力による直接型と、Agent が読む外部コンテンツ経由の間接型がある。(プロンプトインジェクション)を完全には防げない以上、セキュリティ設計の主戦場は「騙されたときに何ができてしまうか」の側にあります。原則は 1 つです — Agent の権限は、騙された・誤ったときに許容できる被害の範囲まで。

出発点として、「この Agent が悪意ある操作者に乗っ取られたら何ができるか」を書き出してみてください。その答えがそのまま、権限設計の現状評価になります。

詳細: 権限設計の 4 原則

原則内容実装例
最小権限タスクに必要なツールだけを渡す。「あると便利」は渡さないタスク種別ごとにツールセットを分ける。照会タスクに書き込みツールを渡さない
スコープの限定ツールが触れるデータを、対象ユーザー・対象テナントの範囲に絞る検索・取得系ツールの実装側で権限フィルタを掛ける(モデルへの指示で絞らない)
リスクの分離副作用・外部送信・非信頼入力・機微データアクセスを別の軸で分類外部取得を伴う読み取りは送信経路(GET 引数・応答 URL の取得を含む)。機微データの読み取りにもアクセスログと量の上限
ユーザー権限の継承Agent は「呼び出したユーザーの権限」で動く。ユーザーを超える権限を持たせない実効権限 = ユーザー権限 ∩ Agent の職務。subject と actor を分けた委任トークンを使い、ユーザートークンのパススルーを避ける(認証・認可)

4 つ目は混乱した代理人(confused deputy)問題への対策です。Agent が全権のサービスアカウントで動いていると、権限の低いユーザーが「Agent 経由なら」他人のデータに届いてしまいます。認可の判定は Agent への指示ではなく、ツールの実装とその先のシステムで行います。

詳細: 承認ゲートの配置

すべての操作に承認を求めると承認疲れで形骸化します(Human-in-the-Loop 設計)。基準は 2 軸です。

  • 取り消せるか — 取り消せない操作(送信・削除・決済)は承認必須の第一候補
  • 影響範囲 — 件数・金額・対象(社外に見えるか)で閾値を切る(例: 10 件超の一括更新、閾値以上の金額)

さらに、信頼できないコンテンツを処理した直後の危険操作は、通常なら自動承認できる操作でも承認対象に格上げする設計が有効です(間接インジェクションの典型経路を塞ぐため)。

詳細: サンドボックス — コード実行と画面操作は隔離が前提

モデルが生成したコードの実行と、コンピュータ操作型 Agent画面(スクリーンショット)を観測し、マウス・キーボード操作で GUI を直接操作する Agent の類型。(コンピュータ操作型・マルチモーダル Agent)の動作環境は、本番システム・開発者の端末から隔離された使い捨て環境で行うことを前提にします。

制御内容
実行環境の分離コンテナ・VM 等の使い捨て環境。ホストのファイルシステム・認証情報に触れない
ネットワーク制限外向き通信(エグレス)を許可リストで絞る。任意の宛先への送信はデータ持ち出しの経路になる(データ漏えい対策)
資源制限CPU・メモリAgent が「覚えている」ように見えるデータの総称。短期記憶(コンテキスト)・作業状態・長期記憶(外部ストレージ)の 3 層に分けて設計する。・実行時間・ディスクの上限(暴走・DoS 対策)
専用アカウントコンピュータ操作型には専用の最小権限アカウント・専用ブラウザプロファイルを使い、開発者・ユーザー本人のセッションを操作させない

「サンドボックス内で全部できる」ことは問題ではありません。サンドボックスの意味は、中で何が起きても外に影響しないことにあります。逆に、サンドボックスから本番の認証情報が見える構成は、隔離の意味を失わせます。

詳細: 外部 MCP サーバーを信頼する条件

外部の MCP サーバーの接続は、第三者のコードとプロンプト(ツール説明文)の導入です(ツール接続標準(MCP とエコシステム))。権限設計の観点から最低限の条件を挙げます。

  • ローカル stdio — 提供元・版・配布物ハッシュを固定し、隔離環境で起動します。ホストの環境変数・ファイル・資格情報・エグレスを最小化します。stdio は隔離そのものではありません
  • リモート — 版を固定できない場合は、名前・説明・入力スキーマの差分を検知し、変更されたツールは再審査まで無効化します。送信先・許可ツール・トークンを絞り、未審査の変更を自動採用しません
  • ツール一覧の絞り込み — サーバーが提供する全ツールを渡さず、必要なものだけを許可リストで通します
  • 認証情報のスコープ最小化 — サーバーに渡すトークンの権限は、そのサーバーの用途に必要な範囲だけにします
  • 信頼できないサーバーのツール結果は信頼できないコンテンツとして扱う — 結果経由の間接インジェクションを前提に、処理後の危険操作へ承認を挟みます

設計判断: 権限は静的に決めず、状況で絞る

実務での注意点

アンチパターン

チェックリスト

  • 「この Agent が乗っ取られたら何ができるか」に答えられる(= 権限の棚卸しがある)
  • タスクに不要なツールが渡っていない(特に書き込み系)
  • データアクセスの認可がツール実装側で強制されている(モデルへの指示に依存していない)
  • Agent がユーザーの権限を超えられない(全権サービスアカウントでない)
  • 取り消せない・影響の大きい操作に承認ゲートがある
  • コード実行・画面操作が隔離環境(エグレス・資源制限付き)で行われる
  • サンドボックスから本番の認証情報・データに触れない
  • 外部取得を伴う読み取りを送信経路として扱い、機微データの読み取りにログと量の上限がある
  • MCP のローカル stdio は隔離し、リモートの版を固定できない場合は差分検知・再審査までの無効化を備える

関連トピック

参考資料

TODO・未確認事項