AI活用

CodexのSandbox・Approval設定|ファイル編集・ネットワーク・危険操作を安全に制御

CodexのSandboxとApprovalを解説。read-only・workspace-write・danger-full-access、untrusted・on-request・never、config.toml、ネットワーク、MCP・CIの安全設定まで紹介します。

この記事の目次
  1. 結論:通常開発はworkspace-write+on-request、調査はread-onlyから始める
  2. SandboxとApprovalの違い
  3. Sandbox modeの3種類
  4. read-only
  5. workspace-write
  6. danger-full-access
  7. Approval policyの使い分け
  8. untrusted
  9. on-request
  10. never
  11. 用途別の組み合わせ
  12. CLIで一時的に設定する
  13. config.tomlへ保存する
  14. 調査用プロファイルを作る
  15. workspace-writeで書き込める範囲を確認する
  16. ネットワークアクセスを分ける
  17. ネットワークなしでできること
  18. ネットワークが必要になりやすいこと
  19. 依存パッケージ追加を安全にする
  20. Git操作を制御する
  21. データベースとデプロイをCodexの外側でも止める
  22. MCPと外部ツールの承認
  23. CIでneverを使う場合
  24. 完全回避オプションを使わない
  25. Webアプリ開発のおすすめプリセット
  26. 調査
  27. 通常実装
  28. CIレビュー
  29. 設定を確認するチェックリスト
  30. よくあるトラブル
  31. ファイルを編集できない
  32. npm installが失敗する
  33. neverなのに操作が失敗する
  34. 承認が頻繁に表示される
  35. 読み取り専用なのに外部サービスが変更された
  36. あわせて読みたい記事
  37. よくある質問
  38. まとめ
  39. 参考リンク

CodexのSandboxとApprovalは、AIがファイル、コマンド、ネットワークへどこまでアクセスできるかを制御する安全設定です。AGENTS.mdに「危険な操作をしない」と書くだけではなく、OSレベルの制限と承認ポリシーで実行そのものを止められます。

Sandboxは「技術的に許可する範囲」、Approvalは「どの場面で人間へ確認するか」を決めます。2つは別の設定です。たとえば承認ポリシーをneverにしても、Sandbox外の操作が自動許可されるわけではなく、許可されていない操作は失敗します。

この記事では、read-onlyworkspace-writedanger-full-accessの違い、untrustedon-requestneverの使い分け、CLIとconfig.tomlの設定、Webアプリ開発での安全なプリセットを解説します。

情報確認日:2026年7月11日(日本時間)

結論:通常開発はworkspace-write+on-request、調査はread-onlyから始める

この記事の結論

  • コード調査はread-onlyを基本にする
  • 通常のローカル開発はworkspace-writeon-requestを候補にする
  • ネットワークは必要なタスクだけ有効にする
  • danger-full-accessや承認・Sandboxの完全回避を通常環境で使わない
  • 本番資格情報、デプロイ、DB変更、課金操作はCodexの外側でも制限する

SandboxとApprovalの違い

設定 決めること
Sandbox mode OS上で技術的に許可する操作範囲 読み取りのみ、作業領域へ書き込み、制限なし
Approval policy 操作を実行する前に人間へ確認する条件 信頼できない操作で確認、必要時に確認、確認しない

Approvalで「許可」を押しても、Sandboxが実行を許さない場合は、より広い権限へ昇格する承認が必要になります。逆にSandboxで書き込み可能でも、Approvalポリシーによって確認が表示される場合があります。

Sandbox modeの3種類

read-only

ファイルの読み取りやコード探索を中心にし、作業領域への書き込みを許可しません。レビュー、影響範囲調査、設計相談、ログ分析に向いています。

  • Pull Requestの読み取りレビュー
  • 認証フローやデータフローの調査
  • 依存関係や設定の確認
  • 既存テストの一覧化

workspace-write

指定された作業領域へ書き込みを許可します。通常の機能追加、バグ修正、テスト作成に向きます。作業領域外やネットワークは別の制限を受けます。

  • リポジトリ内のファイル編集
  • テストやビルドによる生成物
  • 作業用キャッシュ
  • 承認されたコマンド実行

danger-full-access

Sandboxによる制限を大幅に外します。ホスト環境の広い範囲へアクセスできるため、通常のPCや秘密情報を持つ環境では避けます。

名前のとおり危険な設定です。どうしても必要な場合も、短命なコンテナや使い捨てVM、秘密情報なし、最小OS権限、外部ネットワーク制限という環境で使い、終了後に破棄します。

Approval policyの使い分け

untrusted

信頼できると判定された安全な読み取り操作などは進め、その他は承認を求めるポリシーです。Codexがどの操作を信頼扱いにするかを理解し、初期導入では承認内容をよく確認します。

on-request

Sandbox内で通常作業を進め、Sandbox外の操作や追加権限が必要な場面で承認を求めます。通常開発のバランスを取りやすい設定です。

never

人間への承認要求を行いません。これは「何でも自動で許可する」という意味ではありません。Sandbox外の操作は失敗し、Codexは許可範囲内で別の方法を試すか、失敗を報告します。

CIや非対話実行ではneverが必要になる場合がありますが、その場合はSandbox、OS権限、ネットワーク、トークンの権限を厳しく制限します。

用途別の組み合わせ

用途 Sandbox Approval 補足
コードレビュー read-only neverまたはon-request 外部ツールが不要ならネットワークも無効
通常の機能追加 workspace-write on-request 依存追加・ネットワーク・領域外操作で確認
ローカルの自動テスト workspace-write never コンテナ内でコマンドとネットワークを固定
未知のリポジトリ調査 read-only never スクリプトを実行せず、別コンテナで読む
本番運用 専用の限定環境 操作ごとに設計 通常のローカルCodex設定だけに任せない

CLIで一時的に設定する

Codex CLIの起動時に、SandboxとApprovalを指定できます。

codex \
  --sandbox workspace-write \
  --ask-for-approval on-request

読み取り専用でレビューする例です。

codex \
  --sandbox read-only \
  --ask-for-approval never

CLIオプション名や利用可能な値はバージョンによって変わる可能性があります。codex --helpと公式ドキュメントを確認してください。

config.tomlへ保存する

~/.codex/config.tomlまたはプロジェクト設定に記述します。

approval_policy = "on-request"
sandbox_mode = "workspace-write"

[sandbox_workspace_write]
network_access = false

この例では、リポジトリ内の通常編集は許可しつつ、ネットワークは無効にしています。パッケージ取得や外部ドキュメント確認が必要な場合は、毎回有効にするのではなく、別の明示的なタスクへ分けます。

調査用プロファイルを作る

調査と実装で設定を切り替えたい場合は、Codexのプロファイル機能を使えるバージョンでは用途別に保存します。概念例です。

[profiles.review]
sandbox_mode = "read-only"
approval_policy = "never"

[profiles.implementation]
sandbox_mode = "workspace-write"
approval_policy = "on-request"

[profiles.ci]
sandbox_mode = "workspace-write"
approval_policy = "never"

CIプロファイルは、専用コンテナ、読み取り専用トークン、ネットワーク許可先、実行コマンドを別途固定する前提です。

workspace-writeで書き込める範囲を確認する

「workspace」という言葉だけで、自分が想定した1フォルダだけとは限りません。起動したディレクトリ、Gitルート、追加の書き込み可能領域、一時ディレクトリを確認します。

作業前にCodexへ確認する例です。

現在のSandbox mode、書き込み可能なルート、
ネットワーク可否、承認が必要になる操作を説明してください。

まだファイル変更やコマンド実行はしないでください。

シンボリックリンクを通じて作業領域外へ到達できないか、秘密ファイルがリポジトリ内に置かれていないかも確認します。

ネットワークアクセスを分ける

通常のコード編集で外部ネットワークが必要な場面は限られます。ネットワークを常時許可すると、未知のスクリプト実行、データ送信、依存取得、外部命令の取得などの範囲が広がります。

ネットワークなしでできること

  • 既存コードの読み取り・編集
  • インストール済み依存でのテスト
  • ローカルGit差分の確認
  • 既存ドキュメントの参照

ネットワークが必要になりやすいこと

  • 新しいパッケージの取得
  • 公式ドキュメントやWeb検索
  • リモートGit操作
  • 外部APIやMCPサーバー

調査だけならDocs MCPなど許可した接続先へ限定し、一般インターネット全体を許可しない構成を検討します。

依存パッケージ追加を安全にする

npm installは、外部ネットワーク、任意のパッケージコード、install script、lockfile変更を伴います。通常の編集とは分けて承認します。

  1. 既存依存で実現できない理由を説明させる
  2. 候補パッケージ、保守状況、ライセンス、サイズを確認する
  3. 追加する正確な名前とバージョンを人間が確認する
  4. 隔離環境でインストールする
  5. lockfileと実行されたscriptを確認する
  6. テストと脆弱性確認を行う

AGENTS.mdへ「依存追加は承認を求める」と書き、Sandbox/Approvalでネットワーク操作を確認対象にします。

Git操作を制御する

コード編集と、履歴・リモートを変更するGit操作は分けます。

比較的安全な読み取り 明示的な確認が必要な操作
git status git push
git diff git reset --hard
git log git clean -fd
git show force push、タグ変更、リモート変更

重要な変更はWorktreeや専用ブランチで行い、pushとPull Request作成は別の承認ステップにします。

データベースとデプロイをCodexの外側でも止める

Codexがコマンドを実行できなくても、渡した資格情報が強すぎると、MCPや外部ツールから本番変更できる場合があります。

  • 開発用DBだけを渡す
  • 本番資格情報をローカル環境へ常置しない
  • 読み取り専用の短期トークンを使う
  • デプロイは保護されたCIジョブだけで行う
  • 本番マイグレーションは人間の承認とバックアップを要求する
  • クラウドIAMでも最小権限にする

MCPと外部ツールの承認

MCPツールには、読み取りだけでなく、チケット作成、メッセージ送信、ファイル更新、公開、課金などの副作用があります。ローカルSandboxだけでは外部サービス側の変更を止められません。

ツールを次のように分けます。

  • search_*get_*:読み取り専用
  • create_draft:下書き作成
  • publishsenddelete:明示承認
  • chargegrant_access:追加本人確認とサーバー側ポリシー

MCPサーバー側でも利用者、対象リソース、権限を検証し、モデルの引数を信用しないでください。

CIでneverを使う場合

GitHub Actionsなどの非対話環境では、人間へ承認を求められないためneverを使うことがあります。次の条件を整えます。

  • 一時ランナーまたはコンテナ
  • Pull Requestでは読み取り専用トークン
  • 外部ネットワークの許可先を限定
  • 本番秘密を渡さない
  • 書き込み先を成果物やコメント下書きに限定
  • タイムアウトと利用上限
  • 生成した差分を自動mergeしない

ForkからのPull Requestへ秘密を渡さないなど、CIプラットフォーム側のセキュリティも必要です。

完全回避オプションを使わない

Codexには、承認とSandboxを完全に回避する危険なオプションが用意される場合があります。名称にdangerouslyyoloを含むものは、通常の開発PCや共有サーバーで使わないでください。

自動化で必要に見えても、先に次を検討します。

  • workspace-write + neverで足りないか
  • 必要な1コマンドを専用ツールにできないか
  • コンテナ内だけで権限を広げられないか
  • ネットワークや秘密を外せないか
  • Codexではなく通常のCIスクリプトで実行すべきではないか

Webアプリ開発のおすすめプリセット

調査

sandbox_mode = "read-only"
approval_policy = "never"

目的:影響範囲、既存テスト、データフローの確認。外部ネットワークなし。

通常実装

sandbox_mode = "workspace-write"
approval_policy = "on-request"

[sandbox_workspace_write]
network_access = false

目的:既存依存だけで編集・テスト。パッケージ追加や外部確認は別途承認。

CIレビュー

sandbox_mode = "read-only"
approval_policy = "never"

目的:差分レビューと既存ファイルの確認。コメント投稿は別の最小権限ステップへ分ける。

設定を確認するチェックリスト

  • 現在の作業ディレクトリは正しいか
  • 書き込み可能なルートはどこか
  • ネットワークは本当に必要か
  • ホームディレクトリや秘密ファイルが見えていないか
  • 利用できるMCPツールに副作用がないか
  • 承認なしで実行されるコマンドは何か
  • APIキーやクラウド資格情報の権限は最小か
  • 作業をGitで戻せるか
  • タイムアウトと利用上限があるか

よくあるトラブル

ファイルを編集できない

read-onlyになっていないか、作業対象が書き込み可能ルート内か確認します。

npm installが失敗する

ネットワークが無効か、Sandbox外のキャッシュへ書こうとしている可能性があります。依存追加を別の承認済みステップにします。

neverなのに操作が失敗する

neverは自動許可ではありません。Sandboxが許可しない操作は確認を出さずに失敗します。

承認が頻繁に表示される

作業領域、ネットワーク、コマンド、外部ツールが現在のSandboxを越えていないか確認し、必要な範囲だけ設定を調整します。

読み取り専用なのに外部サービスが変更された

ローカルSandboxとは別に、MCPやAPIツールが外部へ書き込んだ可能性があります。外部ツールの権限と副作用承認を見直します。

あわせて読みたい記事

よくある質問

workspace-writeならリポジトリ外も編集できますか?

通常は許可された作業領域へ限定されます。実際の書き込み可能ルートと追加設定を確認してください。

approval_policy=neverは危険ですか?

Sandboxが狭く、秘密やネットワークがなく、非対話ジョブである場合は有用です。広いSandboxや強い外部資格情報と組み合わせると危険になります。

AGENTS.mdの禁止事項とSandboxはどちらが優先ですか?

役割が異なります。AGENTS.mdはモデルへの指示、Sandboxは技術的な実行制限です。両方を使い、重要な禁止事項はSandboxや外部権限でも止めます。

Codexにインターネットを許可してもよいですか?

必要なタスクだけに限定してください。公式ドキュメント確認は専用MCP、依存取得は人間が確認した別ステップなど、接続先と目的を小さくします。

danger-full-accessを安全に使う方法はありますか?

通常環境では避けます。必要なら、秘密情報のない使い捨てコンテナやVM、非特権ユーザー、制限ネットワーク、短時間実行、終了後破棄を前提にします。

まとめ

CodexのSandboxは技術的な操作範囲、Approvalは人間へ確認する条件を決めます。調査はread-only、通常実装はworkspace-write + on-requestを基準にし、ネットワークは必要な処理だけへ限定すると扱いやすくなります。

neverは何でも許可する設定ではなく、承認なしでSandbox内だけを実行する設定です。本番資格情報、デプロイ、DB更新、MCPの副作用は、Codexのローカル設定だけに頼らず、IAM、CI、短期トークン、サーバー側の権限でも制限してください。

参考リンク