Codex安全運用・設定
Codex Permission profilesとは?config.tomlでファイルアクセスと通信先を制御する基本
Codexのベータ機能Permission profilesについて、config.tomlでファイルアクセスやネットワーク接続先を制御する考え方を整理します。.envのdeny、:read-only、:workspace、:danger-full-access、approval_policyとの違いも解説します。
結論から言うと、Permission profilesはCodexのローカルコマンド実行に対して、ファイルアクセスとネットワーク接続先を名前付きポリシーで絞るためのベータ機能です。[permissions.<name>]で定義し、default_permissionsで既定にできます。
最初に押さえる注意点
Permission profilesは便利ですが、これだけでCodex全体の権限を完全に制御できるわけではありません。App connectors、MCP、ブラウザ操作、Computer Use、Codex Cloud、承認済みの権限昇格は、それぞれ別の制御面を持ちます。
.envやSecretsをdenyしても、ログ、シェル履歴、GitHub、外部サービス、過去コミットに残った情報まで自動で消えるわけではありません。安全運用では、最小権限と確認手順をセットで扱います。
Permission profilesとは
Permission profilesは、Codexのローカルサンドボックスで実行されるコマンドについて、読み取り、書き込み、拒否、通信先を細かく指定するための設定です。従来のsandbox_modeやapproval_policyとは役割が違い、ファイルシステムとネットワークの許可範囲を名前付きで管理します。
OpenAI公式ドキュメント上でもベータとして扱われているため、安定仕様として決め打ちせず、利用前に現在の公式ページと手元のCodexバージョンを確認してください。
関連設定の違い
| 項目 | 主な役割 | Permission profilesとの関係 |
|---|---|---|
sandbox_mode | 従来のサンドボックスモードを選ぶ設定。 | Permission profilesとは併用前提ではなく、移行時はどちらで制御するか整理します。 |
approval_policy | コマンド実行や権限昇格をいつ承認するかを決める設定。 | 境界を作る設定ではなく、承認フローの設定です。 |
sandbox_workspace_write | ワークスペース書き込みなど旧来の詳細設定。 | Permission profilesではファイルシステムルールに置き換えて考えます。 |
| Permission profiles | ファイルアクセスとネットワーク接続先を名前付きポリシー化。 | default_permissionsや管理者許可リストと組み合わせます。 |
approvals_reviewer | 自動レビューなど承認前後の確認を補助する設定。 | サンドボックス境界そのものを変える設定ではありません。 |
組み込みプロファイル
公式ドキュメントでは、組み込みプロファイルとして:read-only、:workspace、:danger-full-accessが案内されています。通常の作業では、まず読み取り専用やワークスペース限定から検討し、必要な範囲だけ許可を追加するのが基本です。
:danger-full-accessは名前の通り広い権限を与える設定です。この記事では推奨設定として扱わず、どうしても必要な場面でも対象、時間、作業内容を限定して慎重に扱う前提にします。
ファイルシステム制御の考え方
Permission profilesでは、read、write、denyを使い、どの場所を読めるか、どこに書けるか、どこを拒否するかを分けて指定します。:minimal、:root、:workspace_roots、:tmpdir、:slash_tmpのようなスコープに加えて、絶対パスや~/path、特定パターンの上書きも使えます。
重要なのはdenyの優先です。たとえばワークスペース書き込みを許可していても、**/*.envや**/.env.*をdenyにして、Secretsを含むファイルを読ませない、書き換えさせない、という設計ができます。
ネットワーク制御の考え方
[permissions.<name>.network]ではネットワーク利用の有効化と、ドメイン単位のallow/denyを整理します。たとえばOpenAI APIを使う作業だけならapi.openai.comを許可し、それ以外を不用意に広げない設計にします。
ワイルドカードパターンを使う場合もdenyの優先を意識します。ローカル開発サーバーを使うときは、localhostや127.0.0.1を明示的に許可する必要がある場合があります。ポート番号は通常ドメインルールとは別に扱われるため、公式仕様の現在値を確認してください。Unix socketsやDocker経由の到達性は、ネットワークdenyだけで完全に説明できない場合があります。
config.tomlの最小例
以下は内部パスや実キーを含まない概念例です。プロジェクトごとに必要な書き込み先と通信先だけを残します。
approval_policy = "on-request"
default_permissions = "project-edit"
[permissions.project-edit]
description = "Workspace edits with secrets denied and narrow network access."
[permissions.project-edit.filesystem]
":minimal" = "read"
[permissions.project-edit.filesystem.":workspace_roots"]
"." = "write"
"**/*.env" = "deny"
"**/.env.*" = "deny"
[permissions.project-edit.filesystem."~/.agents"]
"." = "write"
[permissions.project-edit.network]
enabled = true
# allow_local_binding = true # Enable only when local services are required.
[permissions.project-edit.network.domains]
"api.openai.com" = "allow"
# "localhost" = "allow" # Add only when a local dev server is required.
# "127.0.0.1" = "allow"
管理者設定とWindowsの注意
組織管理ではallowed_permission_profilesで利用可能なプロファイルを絞れます。ただし公式ドキュメントではCodex 0.138.0以降の注意があり、古いバージョンでは無視される可能性があります。端末側のバージョン確認を省かないでください。
Windowsではsandbox = "elevated"やsandbox = "unelevated"に関する注意があります。一般に強い分離を期待するなら公式説明を確認し、ユーザー領域のnpm、Pythonツール、キャッシュ書き込みが必要な場合は、必要最小限の許可を追加します。ここで過度に安全性を断定しないことが大切です。
設定前チェックリスト
- Permission profilesがベータ機能である前提をチーム内で共有する。
:danger-full-accessを既定にしない。.env、Secrets、トークン、認証ファイルをdenyにする。- 必要な書き込み先をワークスペース内に寄せる。
- 通信先は
api.openai.comなど必要なドメインだけから始める。 - App connectors、MCP、Computer Use、クラウド実行の権限は別に確認する。
- ログ、履歴、GitHub、過去コミットに秘密情報が残っていないか確認する。
関連ページ
公式情報の確認先
この記事はOpenAI公式ドキュメントのPermission profiles、sandboxing、config reference、managed configurationを確認して構成しています。ベータ機能のため、実運用前に最新の公式ページで差分を確認してください。
FAQ
Permission profilesを使えば.envは完全に安全ですか?
いいえ。denyは強い対策の一部ですが、ログ、履歴、GitHub、外部連携、過去コミットに残った情報は別に確認が必要です。
approval_policyとPermission profilesは同じですか?
違います。approval_policyは承認フロー、Permission profilesは主にローカルコマンドのファイルアクセスとネットワーク接続先の制御です。
:danger-full-accessを使うべきですか?
既定にはしないでください。広い権限が必要な限定作業でも、対象と時間を絞り、差分確認とロールバック準備をしたうえで慎重に扱います。
MCPやApp connectorsもPermission profilesで止まりますか?
止まるとは考えません。公式説明では、これらは別の制御面として扱われます。
localhostへの接続は自動で許可されますか?
設定や環境により明示許可が必要な場合があります。ローカル開発サーバーを使う時だけ、必要な範囲で追加してください。