OpenAI Codex 的 Sandbox、Trust 与 Approval 安全机制解析
Codexのセキュリティの仕組み - Sandbox・Trust・Approvalを理解する
以下是关于「Codex」安全机制的总结。
目次
- 1. 前言
- 2. Sandbox - 限制可操作范围
- 2-1. 什么是Sandbox
- 2-2. 工作文件夹与受保护文件
- 2-3. 常见误解
- 3. 信任 - 启用项目特定设置
- 3-1. 什么是信任(Trust)
- 3-2. 常见误解
- 4. 审批 - 允许例外操作
- 4-1. 什么是审批(Approval)
1. 前言
OpenAI的「Codex」是一个能够自主进行程序创建、修改、测试和命令执行等操作的AI编码代理。
由于AI会操作本地PC的文件并执行命令,因此也存在误操作和安全风险。为此,Codex配备了限制AI操作并在必要时由用户授权的机制。
在实际使用Codex时,会遇到以下场景:
・无法在沙箱中执行命令
・会被询问是否信任(Trust)工作文件夹
・会被询问是否批准(Approval)命令执行
这些看起来像是类似的安全功能,但各自的作用不同。
本次将基于OpenAI官方文档「Agent approvals & security」,介绍沙箱(Sandbox)、信任(Trust)与批准(Approval)之间的区别。
2. Sandbox - 限制可操作的范围
2-1. 什么是 Sandbox
「Sandbox」(沙盒)是一种针对 Codex 执行的命令限制文件操作和网络通信等行为的机制。
主要有3种模式。
・read-only:允许读取文件,限制写入
・workspace-write:允许写入工作文件夹和临时文件夹等。但部分受保护对象禁止写入
・danger-full-access:解除 Sandbox 的限制
通常开发中,以「workspace-write」为基本。
将沙盒限制应用于的状态称为“Sandbox内”,不受该限制而执行命令的状态称为“Sandbox外”。danger-full-access 是解除沙盒限制的模式。
2-2. 工作文件夹与受保护文件
“工作文件夹”是指 Codex 进行操作的文件夹。沙盒的“Workspace”除了工作文件夹之外,还包含临时文件夹等。
在 Codex 的 GUI 版中,如果通过“Open Folder”选择了 my-app 文件夹,则 my-app 将成为工作文件夹。
在 workspace-write 模式下,原则上可以编辑工作文件夹内的文件。但是,即使在工作文件夹内,部分文件和文件夹也会受到写入限制。
主要的保护对象如下:
・.git/:Git的管理信息
・.codex/:Codex的配置
・.agents/:AI代理相关配置
・.aws/:AWS认证信息等
在标准的workspace-write中,这些受保护对象为只读状态,禁止从Sandbox内进行写入。
然而,并非所有以点开头的隐藏文件都会受到保护。例如,.env和.gitignore等会像普通文件一样处理。
2-3. 常见误解
误解1:在Sandbox内无法执行命令
在Sandbox内也可以执行命令。
例如,在workspace-write模式下,可以编辑工作文件夹中的文件并运行测试。但是,如果尝试执行被禁止的文件操作或通信,将会受到限制。
つまり、Sandbox内とは「実行禁止」ではなく「制限付きで実行する状態」です。
勘違い2:Sandbox内とは、作業フォルダ内のこと
Sandbox内・Sandbox外は、フォルダの場所ではなく、コマンドの実行にSandboxの制限が適用されているかを表します。
たとえば、作業フォルダ外のファイルに対する操作でも、Sandbox内で実行する場合は、書き込みが制限されます。
勘違い3:作業フォルダ外のファイルにはアクセスできない
標準的なworkspace-writeでは、作業フォルダ外への書き込みは原則禁止ですが、読み取りは広く許可されています。
そのため、別プロジェクトのソースコードや、OSの権限で読み取り可能な機密ファイルにアクセスできる場合があります。
作業フォルダの選択だけでは、読み取り可能な範囲を限定できません。
3. 信任 - 启用项目特定设置
3-1. 什么是信任
启动 Codex 时,系统可能会询问是否将工作文件夹设为“信任”(Trust)。
信任是一种决定如何使用项目特定的 Codex 设置的机制。
Codex 设置主要在以下两个位置进行管理:
・用户通用设置:~/.codex/
・项目特定设置:项目目录/.codex/
差异如下:
・Trusted(已信任):除了用户通用设置外,还会加载项目专属设置
・Untrusted(未信任):不加载项目专属设置,而是使用用户通用设置等
项目专属设置包括沙盒模式、批准策略、命令规则等。
3-2. 常见误解
误解1:执行Trust后,就能读写该文件夹
Trust本身并不授予文件读写权限。
实际的访问范围由沙盒或操作系统权限等决定。
也就是说,「信任文件夹」和「允许访问文件夹」是不同的操作。
误解2:信任后,沙盒限制会被解除
仅进行信任并不会解除沙盒的限制。
但是,如果项目特定的设置中包含以下指定,则需要注意。
sandbox_mode = "danger-full-access"
approval_policy = "never"启用这些设置后,可能会解除沙盒限制,并且不再要求批准。
也就是说,信任也意味着接受项目提供的安全设置。
误解3:不信任也能安全执行
即使不信任,Codex也不会失去对所有文件的访问权限。
信任机制主要用于决定是否使用项目特定的配置,而对文件的访问则通过沙箱或操作系统权限等进行限制。
4. 批准——允许例外操作
4-1. 什么是批准
在Codex中,对于常规权限下无法执行的操作等,系统可能会要求用户进行“批准”(Approval)。
例如以下操作。
・文件操作:修改工作文件夹之外的文件
・网络通信:执行Sandbox中禁止的通信
・命令执行:在Sandbox之外执行命令
・命令规则:执行需要事前确认的命令
用户批准后,可以在允许的范围内执行操作。
这是一种被称为“人在回路(Human in the Loop)”的安全设计,由人类确认重要操作。
4-2. 自动审查 - AI自动批准
Codex还具备“Auto-review(自动审查)”功能,由AI代替用户审查批准请求。
在常规Approval中,由用户确认操作;而在Auto-review中,由另一个AI代理评估操作内容和风险,并做出批准或拒绝等判断。”
主要特点如下。
・自动审查:由AI评估批准请求
・风险评估:确认危险命令或信息泄露等风险
・批准/拒绝判断:基于风险和用户的事先许可,对操作进行批准或拒绝
在配置文件“~/.codex/config.toml”中,可以按如下方式指定。
approval_policy = "on-request"
approvals_reviewer = "auto_review"Auto-review 并非用于解除沙箱限制的功能,而是将通常由用户执行的批准判断交由AI处理的机制。
不过,由于AI的判断并不总是正确的,因此在处理重要文件或认证信息的敏感环境中需谨慎使用。
4-3. 常见误解
误解1:点击Approval后,沙箱限制会被完全解除
Approval 通常是对所请求操作的批准。
例如,即使允许向工作文件夹外部写入,也不会使该文件夹整体永久可写。
此外,根据操作系统或管理员策略,即使获得批准也可能无法执行。
误解2:在沙箱中允许的操作必定无需批准即可执行
即使在沙箱中允许的操作,也可能因命令规则等原因而要求批准。
也就是说,沙箱的限制与批准的判断并非一定是一一对应的关系。
误解3:将批准策略设置为 never 后,所有操作都可以执行
Codex 有一个决定是否需要请求批准的“Approval Policy(批准策略)”。
・on-request:在需要时请求批准
・never:不向用户请求批准
never 并非允许所有操作。由于 Sandbox 的限制仍然存在,某些操作无法执行。
5. Sandbox、Trust 与 Approval 的关系
下面介绍结合这三种机制的具体示例。
在 Codex 中选择 my-app 作为工作文件夹,并按以下条件运行时。
作業フォルダ:my-app
Sandbox:workspace-write
Trust:Trusted
Approval Policy:on-request
ネットワーク通信:禁止此时,操作如下所示。
・my-app 内的文件编辑:除保护对象外,原则上可执行
・其他文件夹的文件读取:原则上可执行
・向其他文件夹写入:可能需要额外批准
・外部网络通信:可能需要额外批准
・Sandbox 外的命令执行:满足批准等条件时可执行
重要的是,并非因为信任了Codex就能读写,而是由应用的Sandbox配置决定访问范围。
此外,在Sandbox中不允许的部分操作,可以通过Approval例外执行。
实际操作是否可行,还取决于OS权限、命令规则、管理员策略等。
6. 安全使用的基本设置
在普通的Codex开发中,推荐以下设置。
・~/.codex/config.toml
sandbox_mode = "workspace-write"
approval_policy = "on-request"由此,作业文件夹内的编辑等操作将自动执行,若需要额外权限,则会向用户请求批准。
此外,根据需要使用详细的设置。
・规则:命令的允许、批准要求、禁止
・权限:文件读写和网络等详细权限控制
・网络代理:通信目标域名的限制
在通常的开发中,无需一开始就进行如此细致的设置。首先理解沙箱(Sandbox)、信任(Trust)和批准(Approval),并在必要时追加即可。
特别是,当信任从外部获取的项目时,确认.codex/config.toml等文件中是否包含危险配置非常重要。
另外,即使在沙箱中限制了写入操作,也可能读取到工作文件夹之外的机密文件。在进行高机密性开发时,建议考虑使用容器或虚拟机进行隔离。
来源:npaka · AI与游戏开发技术 · note.com