開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. AI >
  4. Codex CLIを安全に使おう ~ sandboxモードの活用 ~
no-image

Codex CLIを安全に使おう ~ sandboxモードの活用 ~

こんにちは、たけちゃんです。業務でCodex CLIを使用しており、コードや機密情報の流出防止には細心の注意を払っています。
今回はセキュリティ面の安全性を向上させる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モードを積極的に活用してみてはいかがでしょうか。

  • posted by たけちゃん
  • AI
TOPに戻る