Agent 已拿到自己的工作区,但你不确定它能否读到主机凭证或访问外网。
最快判断:OpenAI Agents SDK 的本地 Unix 沙箱不能单独作为企业 Mac CI 的完整安全边界。 当前官方文档说明,macOS 本地执行会通过 sandbox-exec 限制文件系统访问,但不提供网络隔离;是否适合不可信命令,仍要由你核验实际主机权限与外部隔离策略。需要 Xcode 的任务应进入受控 Mac 构建节点,生产签名身份再与 Agent 执行环境分开。(OpenAI Agents SDK 沙箱客户端文档)
负责把 AI Agent 接入 iOS/macOS 流水线的 IT 或平台工程负责人:先确认执行环境与构建节点的隔离边界。
负责源代码与凭证治理的安全负责人:检查命令可访问的文件、网络和签名资产。
正在评估 Mac 构建资源的技术负责人:判断哪些任务确实需要真实 macOS 与 Xcode。
OpenAI Agents SDK 企业 Mac CI 沙箱:工作区与隔离边界
Manifest 描述新会话的工作区内容与布局;沙箱会话则是命令运行、文件变化发生的执行环境。SDK 也支持重新连接会话或从快照恢复工作区。它们解决的是任务材料、工作状态和生命周期管理问题,不等同于操作系统安全承诺;具体隔离取决于所选执行后端及其配置。(OpenAI Agents SDK 工作区与会话文档)
容易被忽略的风险不止是“能不能读工作区”:
- 主机账号权限: 本地 shell 命令按执行进程与配置的用户身份运行。工作目录和
HOME不会自动换成低权限账号;如果该账号本来能读源代码、环境配置或其他文件,Agent 命令可能继承相应权限。SDK 的run_as等设置也应按当前客户端行为核实,不能只看配置名称。 - SDK 文件 API 与 shell 不同: 路径授权可以约束 SDK 文件工具访问哪些路径,但不能因此推断任意命令都受到相同限制。macOS 本地后端的文件系统限制由其配置实施,网络访问则不是由该本地沙箱隔离。(OpenAI Agents SDK 本地执行边界说明)
- 出网与凭证: 即使把仓库放进单独工作区,命令仍可能通过网络请求访问外部服务。若进程环境、钥匙串或其他可读路径里放有凭证,工作区本身并不能证明这些凭证对命令不可见。
- 会话复用与残留: 快照可以保存工作区内容;恢复会话则可能接回已有执行状态。新会话、独立工作区和清理动作是不同控制,不能把“任务结束”直接当成“主机与凭证状态已复原”。
⚠️ 一个重要的边界修正:不宜笼统说 macOS 本地后端“完全没有文件系统限制”。官方文档说明它应用了文件系统限制,但不提供网络隔离,也没有由工作区单独形成完整的主机安全边界。你的验收应分别测文件与网络,而不是只检查目录结构。(OpenAI Agents SDK 沙箱快速入门)
Agent 工作区与 Xcode 构建节点的任务分流
Agent 任务是否需要 Mac,应由任务依赖决定,而不是由“沙箱”标签决定。一般代码分析、文本处理或不依赖 Apple 工具链的脚本,可以考虑放到具备所需隔离能力的执行环境;需要原生 macOS、Xcode 工具链或 Apple 平台构建验证的任务,则路由到受控 Mac 节点。SDK 提供本地、容器与托管执行后端选项,但后端的名称不代表其隔离配置自动符合你的安全要求。
| 执行位置 | 适合承担的任务 | 你必须核验的边界 |
|---|---|---|
| 本地 Unix 沙箱 | 可信开发任务,或已由外部策略隔离的任务 | macOS 文件系统限制、网络出口、实际运行账号、凭证暴露情况 |
| 容器或托管执行环境 | 可在其操作系统与工具链范围内完成的非 Xcode 工作 | 容器或服务的挂载、账号、网络、凭证策略;不能仅凭“已容器化”认定安全 |
| 受控 Mac 构建节点 | 必须使用真实 macOS/Xcode 的编译、测试或打包任务 | 专用账号、节点权限、依赖来源、构建产物去向及任务后清理 |
| 独立可信签名节点 | 生产发布签名或需要生产签名身份的阶段 | 私钥与证书访问控制、谁能触发签名、签名凭证是否对 Agent 命令可见 |
Apple 的命令行工具参考说明,相关命令行工具需要安装 Xcode,并使用设为活动开发者目录的 Xcode。也就是说,容器或托管环境只有在实际提供并通过验证的工具链与系统条件时,才适合承担相应任务;不能把普通 Linux 容器直接说成可运行原生 Xcode 构建。(Apple Xcode 命令行工具文档)
主机权限与生产签名资产的隔离
签名凭证一旦进入 Agent 能执行任意命令的主机,就不只是一个“构建配置”问题。Apple 文档说明,macOS 钥匙串项目可以具有访问控制列表,用于控制哪些应用可执行相应操作;签名身份包含私钥,缺少对应私钥时也无法用该身份完成代码签名。应把这些机制视为需要配置和验证的控制,不要假设它们自动把 Agent 与签名资产隔开。(Apple 钥匙串访问控制列表文档) (Apple macOS 分发签名代码文档)
生产流水线可以把 Agent 的职责限制为分析、修改或生成待审查的变更,再将通过策略检查的任务提交给可信构建节点。若业务必须让 Agent 触发 Xcode 构建,也要确认它使用的账号、钥匙串访问权与发布凭证的授权范围。签名节点最好不直接承接不可信 shell 命令;构建产物与签名凭证也应分别设置读取、写入和保留策略。
提醒:SDK 创建会话、结束会话或保存快照,描述的是运行与工作区生命周期;它们本身不能证明主机文件、进程环境或密钥已清理。清理能力要通过检查主机状态和后续任务可见性来验收。(OpenAI Agents SDK 会话与工作区文档)
试点验收清单与放量门槛
把试点当成一次边界验证,而不是一次“沙箱成功创建”的演示。先用非生产凭证和代表性任务验证,再决定是否将任务接入真实流水线:
- [ ] 文件访问: 以 Agent 将使用的实际账号运行代表性命令,测试工作区外的敏感路径能否读取或写入,并记录允许与拒绝的结果。
- [ ] 网络访问: 验证命令能否访问允许与禁止的网络目标;确认本地 Unix 沙箱不被误认为具备出网隔离。
- [ ] 账号权限: 记录命令对应的进程用户身份与可访问资源,确认账号权限不会因会话新建、恢复或复用而超出预期。
- [ ] 凭证可见性: 检查环境变量、配置文件、钥匙串与挂载内容,确认 Agent 命令不能读取生产签名身份或不需要的仓库凭证。
- [ ] Xcode 任务路由: 用实际构建命令确认任务在具备所需 macOS 与 Xcode 工具链的节点执行;单独验证 Agent 工作区不能绕过节点路由策略。
- [ ] 任务后状态: 检查仓库副本、临时文件、构建产物、日志和会话状态,验证清理后续任务无法读取前一任务的残留。
- [ ] 拒绝放量条件: 任一文件、网络、账号、凭证或清理结果无法解释,先缩小权限或更换执行边界,不把生产签名凭证交给未通过验证的节点。
SDK 更新说明记录了沙箱执行后端与工作区能力的演进。上线评审时应核对你实际部署版本对应的客户端文档和选项,而不是只依据旧示例或功能名称作安全判断。(OpenAI Agents SDK 更新说明)
远程 Mac 试点与方案选择
如果你的任务需要原生 macOS 或 Xcode,就应把问题拆成“Mac 构建节点如何受控”和“签名身份由谁持有”,而不是试图用工作区替代安全边界。你可以先查看 VMSPIN 的远程 Mac 环境,评估它是否适合承载隔离后的 Xcode 构建节点;具体任务仍需按上述权限与凭证清单验收。
对只需短期试点、临时扩展构建容量或暂不想购置专用 Mac 的团队,按周期使用远程 Mac 可以避免先为每个 Agent 工作区配置一台本地设备;但这不会自动解决账号隔离、网络控制或签名治理。长期稳定运行、必须接入特定物理接口,或有明确数据驻留要求的场景,应先评估自购设备和组织内运维是否更合适。若正在估算试点预算,可从 VMSPIN 的远程 Mac 方案与价格信息核对可用选项,再决定是否进入技术验收。