有名テック企業の技術ブログを、ひとつのフィードで。
フィード
32件
こんにちは、AI・機械学習チームの須藤です。 この記事はAI・機械学習チームブログリレー14日目の記事です。 13日目は田中さんによる「スタートアップCTOが、M3のAIチームに転職して3か月。感じた不安と、その答え。」でした。 www.m3tech.blog 突然ですが、私は今年に入ってからランニングを始めました。1月頃はキロ8〜9分ペースで2〜3km走るのがやっとでしたが、毎日続けているうちに最近はキロ4分台で走れるようになり、20km程度であれば走れるようになってきました。今年の目標はマラソン大会に出場することです。継続は力ですね。 最近買ったadizero evo sl woven。AIエージェントが自走するということは人間も走らないといけない(?)。 はじめに Claude Codeのサンドボックス機能 基本的な設定と使い方 はじめ方 設定のカスタマイズ Managed設定 サンドボックスの動作検証 ファイルシステムの制限 ネットワークの制限 まとめ We are hiring! はじめに さて、最近はAIエージェントが急速に普及し、開発の仕方が大きく変わってきているのを感じています。私自身もここ1年で働き方がだいぶ変わってしまいました。コードを書くのはClaude Codeに任せて、自分は設計の壁打ちやレビューに集中するような形になっています。 最近私が考えているのは、いかに人間が運用のボトルネックにならないようにするか、という点です。品質と安全性を保ちながら、AIが自律的に動ける範囲を広げられないかを模索しています。 ただ、AIに自律的にコマンドを実行させる以上、安全性への不安もつきまといます。Claude Codeは実行前に承認を求めてくれますが、公式ドキュメントにも「承認疲れ」*1という言葉があるように、承認を繰り返しているうちに、人はどうしても内容を確認しなくなってしまいがちです。また、その承認が本当に正しい操作なのかを判断するのは、慣れたエンジニアでも難しいことがあります。Claude Codeはエンジニア以外でも使う機会が増えており、普段開発をしていない人にとってはなおさらです。 さらに、ユーザーが意図しなくても被害を受けるケースもあります。間接的プロンプトインジェクションと呼ばれる攻撃があり、悪意ある指示をAIに読み込ませることで意図しない操作をさせるものです。たとえば、画像やPDFに人の目には見えない形でプロンプトを埋め込む手法や、GitHubのPRレビュー画面には表示されないがソースファイルには悪意ある指示が埋め込まれているケースなどがあります。 Claude Codeにはこうしたリスクを軽減する「サンドボックス機能」が用意されています。本記事ではこの機能を実際に試してみた内容を紹介します。 Claude Codeのサンドボックス機能 Claude Codeのサンドボックス機能は、Bashコマンドの実行環境をOSレベルで分離することで、より安全なエージェント実行を実現します。あらかじめ境界を定義しておくことで、その範囲内ではClaude Codeが自由に動作できる仕組みになっています。 具体的には、ファイルシステムアクセスを特定のディレクトリに制限し、ネットワークアクセスはサンドボックス外で動作するプロキシサーバーを通じて制御します。これらの制限はOSレベルの分離機能を用いて実現されており、macOSではSeatbelt、Linux / WSL2ではBubblewrapが使われるそうです。*2 基本的な設定と使い方 はじめ方 Claude Codeを起動し、/sandboxコマンドを実行することでサンドボックスを有効化できます。 /sandbox 実行するとモード選択メニューが開くので、モードを選択します。 Configure Mode: 1. Sandbox BashTool, with auto-allow 2. Sandbox BashTool, with regular permissions 3. No Sandbox Auto-allow mode: Commands will try to run in the sandbox automatically, and attempts to run outside of the sandbox fallback to regular permissions. Explicit ask/deny rules are always respected. 各モードは次の通りです。 Sandbox BashTool, with auto-allow:サンドボックス内で実行されるコマンドが自動承認されるモードです。サンドボックス外へのアクセスが必要な場合は通常の許可フローにフォールバックします。 Sandbox BashTool, with regular permissions:サンドボックス化されている場合でも、すべてのコマンドで通常の許可フローが走るモードです。 後ほど説明しますが、サンドボックスではアクセス可能なファイルやネットワークのドメインを制限でき、Claude Code自体のAllow/Denyルールと組み合わせることで、やっていいこと・やってはいけないことをあらかじめ定義できます。auto-allowモードでは、こうした境界の範囲内でClaude Codeが自律実行することが想定されています。 両モードともサンドボックスによるファイルシステムとネットワークの制限は同様に適用されます。違いは、サンドボックス化されたコマンドが自動承認されるか明示的な許可が必要かどうかのみだそうです。 なお、Linux / WSL2 の場合は bubblewrap や socat などの追加パッケージが必要です。不足している場合は /sandbox 実行時にインストール手順が表示されるので、それに従ってインストールしてください。 設定のカスタマイズ settings.json に次のように書くことでサンドボックスの動作をカスタマイズできます。 { "sandbox": { "enabled": true, "failIfUnavailable": true, "autoAllowBashIfSandboxed": false, "allowUnsandboxedCommands": false, "filesystem": { "allowWrite": ["~/.kube", "/tmp/build"], "denyRead": ["~/.ssh"] }, "network": { "allowedDomains": ["*.npmjs.org"] } } } 設定項目 説明 enabled サンドボックスの有効・無効。/sandbox コマンドでも有効化できるが、こちらに書いておくとClaude Code起動時から有効になる failIfUnavailable サンドボックスが起動できない場合にエラーで終了する(false の場合は警告を出してサンドボックスなしで続行) autoAllowBashIfSandboxed サンドボックス内のコマンドを自動承認するか(前述のauto-allowモードに相当) allowUnsandboxedCommands サンドボックス外でのコマンド実行を許可するか(false にするとエスケープハッチを無効化) filesystem.allowWrite 書き込みを許可するパスの追加 filesystem.denyRead 読み取りを拒否するパス network.allowedDomains アクセスを許可するドメイン ファイルシステム、ネットワークのデフォルトの動作は次の通りです。 ファイルシステム 読み取り:コンピュータ全体への読み取りが可能 書き込み:カレントディレクトリとそのサブディレクトリのみ ネットワーク allowedDomains に登録済みのドメインにはユーザーの承認なしにClaude Codeがアクセスできます 未登録ドメインへアクセスしようとするとユーザーに承認プロンプトが表示されます allowManagedDomainsOnly を設定すると、allowedDomains 以外のドメインへのアクセスは即時エラーになります(Managed設定でのみ設定可能) 詳細な設定項目については公式ドキュメントを参照してください。 Managed設定 Managed設定はIT管理者が組織内の全ユーザーに適用できる設定で、ユーザー側でオーバーライドできません。*3*4 配信方法はいくつかありますが、たとえば次のようなシステムディレクトリへのファイル配置で実現可能です。 OS パス macOS /Library/Application Support/ClaudeCode/managed-settings.json Linux / WSL /etc/claude-code/managed-settings.json Windows C:\Program Files\ClaudeCode\managed-settings.json サンドボックスの文脈では、次の設定が特に有効です。 サンドボックスの強制 sandbox.enabled: true を設定すると、ユーザーがサンドボックスを無効化できなくなります。 許可ドメイン以外の即時ブロック sandbox.network.allowManagedDomainsOnly: true を設定すると、allowedDomains に登録されていないドメインへのアクセスが承認プロンプトなしに即時エラーになります。前述の通りこの設定はManaged設定でのみ有効です。 MCPの制限 後述しますが、サンドボックスのネットワーク制限はBashサブプロセスにのみ適用されます。MCPのネットワークアクセスを制御したい場合は、allowedMcpServers と allowManagedMcpServersOnly: true を組み合わせることで、使用できるMCPサーバーを管理者が制御できます。 サンドボックスの動作検証 ファイルシステムの制限 まずはファイルシステムの制限を試してみます。Claude Code外のターミナルで検証用ファイルを作成しておきます。 echo "This is a test file for sandbox verification." > read_test.txt settings.json に denyRead を設定し、read_test.txt への読み取りを拒否してみました。 { "sandbox": { "filesystem": { "denyRead": ["./read_test.txt"]