AI new
Codex CLIを安全に使おう ~ sandboxモードの活用 ~
今回はセキュリティ面の安全性を向上させるsandboxモードについて情報をシェアしたいと思います。
なお、本記事はCodexの公式ドキュメントに準拠しており、バージョン0.61.0での内容となっております。
https://developers.openai.com/codex/security/#agent-sandbox
sandboxモードとは
使用者のリスク許容度に応じて、インターネットアクセスやローカルファイルの書き込み権限に対する制限をかけることができます。codexのコマンド実行時における制限についてはAGENTS.mdに記載したり、プロンプト入力時に毎回指定するなど色々方法はあると思いますが、sandboxモードを活用するのが最も確実にcodexのコマンド実行に対する制限をかけることができます。
使用方法としてはcodexコマンドに--sandboxをつけ、オプションを続けて入力するか、~/.codex/config.tomlに記載する2つの方法があります。
sandboxモードの種類と効果
ファイルアクセスに対する制限
| 種類 | 概要 | ユースケース |
| read-only | すべてのファイル操作が読み取り専用。編集や生成を伴う指示は一切実行できず、閲覧や調査に限定される。 | 外部破壊リスクを完全に排除したい検証環境や、構成確認のみ行いたい場合。 |
| workspace-write | カレントディレクトリと許可されたwritable_roots配下のみ書き込み可。それ以外は読み取りに留め、変更には追加承認が必要。 | 一般的な開発タスク。プロジェクト配下での修正は自由だが、システム領域や別プロジェクトへのアクセスを防ぐ。 |
| danger-full-access | 制限なし。任意パスへの読み書き、ツール実行も可能で、通常のシェルと同等に振る舞う。 | 高度な自動化や統合テストなどサンドボックスが邪魔になる場面。誤操作リスクが最も高いため、CI用途や信頼済み環境のみで利用。 |
ネットワークアクセスに対する制限
ネットワークアクセスの制限はコマンドラインのオプションではなく、~/.codex/config.tomlに記載する必要があります。・restricted:通信は基本遮断され、必要なコマンドごとに明示的な承認が要る。依存取得やAPIアクセスを伴う作業では手間が増えるが、情報漏洩リスクを抑えられる。
・enabled: ネットワーク制約なしでコマンドを実行できる。データ取得やクラウド連携が必須なタスクで選択される一方、外部送信の監視が必要。
Approval Policy
・ untrusted: 読み取り以外のほとんどのコマンドが都度承認待ちになる。新しいプラグインやスクリプトの安全性確認で有効。
・ on-request: 基本はサンドボックス内で実行され、必要時のみ「承認あり」で再実行する。
・ on-failure: まずサンドボックス内で試し、失敗したコマンドだけ承認を求めて再実行するワークフロー。日常開発でのバランス型。
・ never: 追加承認は行えず、サンドボックス制約の中で完結させる必要がある。自動化やノンインタラクティブ用途向け。
sandboxモードの使い方
codexコマンドのオプションとして使う
常に同じsandboxモードを使うわけではない場合は、オプションを毎回指定する煩雑さはあるものの、明示的なのでこちらの方が良いかも知れません。使い方としては、
codex --sandbox <ファイルアクセスのモード> --ask-for-approval <Approval Policy>
で使用したいモードをそれぞれオプションに入れることです。ただし、ネットワークアクセスの制限についてはコマンドラインではなく~/.codex/config.tomlに記載する必要があるようです。
例えば、ファイルアクセスはread-only, 毎回コマンド実行時に承認を要求して欲しい場合は
codex --sandbox read-only --ask-for-approval untrusted
となります。
config.tomlに記載する
デフォルトとなるsandboxモードが決まっている場合は~/.codex/config.tomlに記載してしまった方が良いかも知れません。Approval Policyやファイルアクセス制限については以下のように記述します。
# config.toml
approval_policy = "untrusted"
sandbox_mode = "read-only"
ネットワークアクセスの制限についてはファイルアクセスの制限モードによって選択することが出来るようです。
# config.toml
[sandbox_workspace_write]
network_access = true
使用例
では実際にread-only モードで起動してフォルダの削除を指示した場合どうなるかやってみましょう。
まずread-onlyモードで起動します。
codex --sandbox read-only
hogeディレクトリを削除してもらいましょう。
rm -r hoge を実行して
このような返答が来ました。読み取り以外の操作については権限の昇格を承認する必要がありそうです。
- 手順1: ls hogeで中身を確認(任意)。
- 手順2: 問題なければrm -r hogeでディレクトリを削除(権限昇格が必要)。
この内容で進めてよいですか?
こちらのコマンドを承認すると実際にディレクトリが削除されますが、read-onlyモードで実行している限り読み取り以外の操作については権限の昇格を聞かれる形になります。
まとめ
今回はCodex CLIのsandboxモードについて紹介させて頂きました。
業務でAIエージェントを使用するのが当たり前になってきている昨今ですが、意図しないインターネットアクセスやファイルの書き込みが致命的なミスにつながるケースも増えていくかと思われます。
そうしたミスを事前に防ぐ防波堤としてsandboxモードを積極的に活用してみてはいかがでしょうか。