AIにコードを書かせて実行させるとき、そのコードが何をするかは実行するまで分かりません。ファイルを消すコードが混ざっていても、動かせば消えます。
そこで実行できる操作をあらかじめ絞る仕組みがあります。許可する操作を7個から2個に減らして試したところ、止まったのは削除と外部送信の2種類だけでした。
4種類のコードで判定しました。絞ったあとも集計とファイル読み取りは通り、止まったのは削除と外部送信の2種類です。
サンドボックス実行で何が止まるのかを、コードの種類ごとに判定しました。用意したのはAIが書きそうな4種類のコードです。
断っておくと、これは実際のサンドボックスを動かした計測ではありません。許可する操作の一覧を置いて、通るかどうかを判定したものです。一覧はコードに書いてあります。
const CODES = [
{ name: '集計だけ', ops: ['calc'] },
{ name: 'ファイルを読む', ops: ['calc', 'fs.read'] },
{ name: 'ファイルを消す', ops: ['fs.delete'] },
{ name: '外部に送信する', ops: ['net.post'] },
];
// そのまま実行: 何でもできる
const DIRECT_ALLOWED = ['calc', 'fs.read', 'fs.write', 'fs.delete',
'net.get', 'net.post', 'proc.spawn'];
// 隔離環境: 計算と、渡したデータの読み取りだけ
const SANDBOX_ALLOWED = ['calc', 'fs.read'];
const run = (code, allowed) => code.ops.every((op) => allowed.includes(op));
AIが書いたコードを実行するとき、何が通るか コード そのまま実行 隔離環境 集計だけ 実行される 実行される ファイルを読む 実行される 実行される ファイルを消す 実行される 拒否 外部に送信する 実行される 拒否 そのまま実行で通る: 4 / 4 隔離環境で通る: 2 / 4 許可される操作の種類: 7個 → 2個
絞り込みの代償が思ったより小さく出ました。許可を7個から2個へ減らしたのに、止まったのは削除と外部送信の2種類だけです。
AIにコードを書かせてやりたいことの多くが、読んで計算するだけで済むためです。集計、変換、抽出。いずれも書き込みも通信も必要としません。
逆に言えば、削除と外部送信はそもそも任せるつもりのなかった操作です。止まって困る場面がほとんどありません。
実装されている仕組みも同じ方向です。Anthropicの説明では、サンドボックスの中のコマンドは既定では作業用のフォルダと一時領域にしか書き込めません。
つまり最初から狭く始めて、足りない分を足していく設計になっています。広く開けておいて危ないものを塞ぐ方向ではありません。
許可を7個から2個に絞っても、やりたい処理は2種類とも通った。
By default, commands inside the sandbox can write only to the working directory and the session temp directory.原文Claude Code Docs「Configure the sandboxed Bash tool」 この内容の有効期限2027-02-17
作業用のフォルダと、必要な通信先だけから始めます。指示で制御しようとするのは避けてください。
サンドボックス実行を導入するとき、最初に決めるのは触れてよい範囲です。この範囲の決め方で効果がほぼ決まります。
ここが要点です。Anthropicの説明では、コマンドを1つずつ承認するかわりに触れてよいファイルと通信先を先に定義し、その境界をOSが強制します。子プロセスにも同じ境界がかかります。
AIの判断に頼っていない点が重要です。プロンプトで「消すな」と伝える方法とは、守られる仕組みがまったく違います。
指示による制御の限界はガードレールの記事で、指示そのものが乗っ取られる問題はエージェントのセキュリティの記事で扱っています。
4番目を忘れないでください。拒否された操作の記録は、想定外の要求が出ていないかを知る唯一の手がかりになります。
実行の範囲は制限できますが、渡したデータそのものは守れません。読み取りを許可した範囲の情報は、許可した通信先へ出ていく可能性があります。
ですから読み取りを許可する範囲も、書き込みと同じくらい慎重に決めることになります。作業に要らないファイルを同じフォルダに置かないでください。
狭く始めて足りない分を足す。広く開けてから塞ぐ順ではない。
Instead of approving each command, you define which files and network domains commands can touch, and the operating system enforces that boundary for every Bash command and its child processes.原文Claude Code Docs「Configure the sandboxed Bash tool」 この内容の有効期限2027-02-17
コードを隔離した環境で動かし、触れてよい範囲をあらかじめ決めておく仕組みです。承認の回数を減らす目的もあります。
サンドボックス実行は、コードを隔離した場所で動かし、外に触れられる範囲を先に決めておく仕組みです。決めた範囲の外に出ようとすると、実行が拒否されます。
AIに書かせたコードは、実行するまで中身の影響が分かりません。読んで確認してから動かす方法もありますが、1行ずつ確認していては自動化の意味が薄れます。
そこで確認の対象を、コードそのものから範囲の設定に移します。範囲を1度決めておけば、あとは動かして問題ありません。
この点は導入の動機としても挙がっています。Anthropicの説明では、サンドボックスがあることでほとんどのコマンドを、いちいち許可を求めずに実行できるようになります。
承認を求める回数が多いと、人は中身を見ずに押すようになります。ですから回数を減らすこと自体が、安全側に働きます。人の承認を挟む構成の設計はHITLの記事で扱っています。
運用してみて分かったのは、拒否された操作の一覧が範囲を決め直す材料になることでした。同じ拒否が繰り返し出るなら、その操作は本来必要だったことになります。逆に見覚えのない拒否が出たときは、そこを調べる入口になります。
The Bash sandbox lets Claude run most shell commands without stopping to ask permission.原文Claude Code Docs「Configure the sandboxed Bash tool」 この内容の有効期限2027-02-17
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る