OpenAI Agents SDK 沙箱能力发布后开发者该如何划分执行权限
OpenAI Agents SDK 最近把沙箱执行、文件工具、工作区生命周期和快照能力放进了更完整的运行框架。真正需要迁移的不是某个 API 名称,而是权限设计:模型能不能调用工具、工具以谁的身份执行、文件本身能不能被写入、宿主机目录是否被授权,以及运行结束后哪些内容可以恢复,应该分开回答。
最稳妥的做法是默认只给一个专用工作区和低权限执行身份;只有经过代码审核的配置,才增加只读的宿主机路径授权。快照只负责恢复工作区状态,不能替代审批、凭据管理或路径隔离。
Permissions管的是清单条目的文件权限,不是模型审批策略。run_as决定沙箱原生工具以哪个用户执行,extra_path_grants解决工作区外的明确访问需求。snapshot保存工作区内容;挂载和额外路径授权属于运行时边界,不能当成持久化数据。
先把四种权限放到不同层
官方文档将沙箱定位为 Agent 的受控执行环境,并特别区分了几个容易混淆的概念。外层应用仍应掌握审批、追踪、密钥和业务系统访问;沙箱负责命令、文件变化和环境隔离。清单里的 Permissions 只描述被物化文件的 owner、group、other 权限,不能替代模型是否需要人工批准。

因此,读写内部代码仓库时,至少要记录四个决定:工作区根目录是什么;文件由谁拥有;模型工具以哪个用户运行;是否存在工作区外的绝对路径授权。任何一项写成“全部可用”,后面都很难审计。
OpenAI Agents SDK 沙箱能力上线后,开发者可以按照任务可信度、资源访问边界、操作敏感等级三个维度逐层收拢权限,既避免给Agent开放过高权限带来的安全泄露风险,也不会因为限制过严让新特性的代码运行优势完全无法落地。
用 Manifest 和 run_as 收窄工作区内的写入范围
例如,应用可以把待分析资料复制到沙箱工作区,并建立一个只允许专用用户读写的条目。下面的片段展示的是权限分层思路,实际项目还要根据所用 sandbox client 补充客户端和 Runner 配置:
from agents.sandbox import FileMode, Manifest, Permissions, User
from agents.sandbox.entries import File
# 只把本次任务需要的资料放进工作区,避免把宿主机目录直接暴露给模型
manifest = Manifest(
root="/workspace",
users=(User(name="agent-worker"),),
entries=(
File(
path="/workspace/input.txt",
content=b"approved input",
permissions=Permissions(
owner=FileMode.READ | FileMode.WRITE,
group=FileMode.NONE,
other=FileMode.NONE,
),
),
),
)
# 让沙箱原生工具以专用身份执行,而不是沿用宿主进程身份
sandbox_agent = SandboxAgent(manifest=manifest, run_as="agent-worker")
关键点是“资料复制”和“路径挂载”不是一回事:复制适合少量、可审查的输入;挂载适合必须保留原路径语义的场景,但授权面更大。不要因为文件条目设置了只读,就误以为外层审批已经完成。
只为明确需求增加主机路径授权
当 Agent 必须读取工作区外的工具链或临时目录时,再考虑 SandboxPathGrant。路径应由可信代码写死或经过人工配置审核,不能直接从模型输出中读取。对只需读取的目录使用 read_only=True,并把授权原因写进部署配置。
from agents.sandbox import Manifest, SandboxPathGrant
# /opt/toolchain 仅作为只读运行时依赖;它不会随工作区快照保存
manifest = Manifest(
extra_path_grants=(
SandboxPathGrant(path="/opt/toolchain", read_only=True),
SandboxPathGrant(path="/tmp/agent-output"), # 临时产物目录,按任务清理
),
)
发布前可以用一张小表复核边界:
| 需求 | 优先配置 | 不要混淆 |
|---|---|---|
| 限制谁操作文件 | users、run_as | 不是 API key 权限 |
| 限制文件读写 | Permissions | 不是人工审批 |
| 访问工作区外路径 | extra_path_grants | 不是持久化目录 |
| 恢复上次工作区 | snapshot | 不是安全边界 |
快照保存的是工作区,不是无限权限
snapshot 用于新沙箱会话的工作区恢复与持久化;如果要连接一个已经序列化的后端会话,使用的是 session_state。两者都不应被理解为“把上一次的所有授权永久带回来”。官方说明指出,额外授权是运行时访问,挂载和临时路径也不作为工作区内容写入快照。

这会影响恢复策略:工作区里的中间文件可以进入下一次任务,但密钥不应靠快照传递;每次新运行都应重新注入短期凭据,并重新计算路径授权。若应用使用开发者自持有的 session,还要明确由应用负责关闭、检查和清理会话。
采用前的迁移清单要落到代码审查
先在本地用最小工作区验证:Agent 能读输入、只能写输出目录,访问未授权绝对路径会失败;然后重启一个 fresh session,确认快照只恢复预期文件。最后检查日志中是否记录了执行用户、授权路径、快照标识和人工审批结果。
- 是否把模型工具审批与沙箱文件权限分成两套策略?
- 是否使用专用
run_as用户,而不是继承宿主机高权限账号? - 每个
extra_path_grants是否有具体路径、只读选择和业务理由? - 是否明确哪些输入能进 snapshot,哪些密钥只能运行时注入?
Agents SDK 的沙箱能力适合把执行环境标准化,但 Beta 能力仍可能变化。迁移时应锁定依赖版本,保留一组权限回归测试,并在升级后重新核对 Manifest、client 和 snapshot 的行为。更多边界以 Agents SDK 沙箱概念文档、Sandbox Agents 快速入门 和 OpenAI 官方能力说明为准。
常见问题
Permissions 能阻止模型调用危险命令吗?
不能。它描述清单文件的读写执行位;命令审批、工具暴露和业务授权仍应由外层应用与运行策略处理。
extra_path_grants 会随 snapshot 一起保存吗?
不会。它是运行时访问授权,快照只覆盖工作区根目录中的持久化内容。
什么时候使用 session_state 而不是 snapshot?
需要连接已经序列化的具体沙箱会话时使用 session_state;需要用保存的工作区内容创建新会话时使用 snapshot。
Go time.Timer 怎么实现可重置的空闲超时
- 上一篇
- Go time.Timer 怎么实现可重置的空闲超时
- 下一篇
- Go time.Time JSON 输出为什么带有时区和纳秒
-
- 科技周边 · 业界新闻 | 2小时前 |
- CNCF 平台工程自助服务话题对内部开发平台有什么启示
- 364浏览 收藏
-
- 科技周边 · 业界新闻 | 4小时前 | 云原生 · GPU · kubernetes · 人工智能 · 平台工程 · Kubernetes AI工作负载 平台工程 GPU调度 模型交付
- Kubernetes 面向 AI 工作负载时为什么更依赖平台工程
- 258浏览 收藏
-
- 科技周边 · 业界新闻 | 9小时前 |
- CNCF 讨论 AI 平台的 CPU 与 GPU 协同时关注哪些运维问题
- 191浏览 收藏
-
- 科技周边 · 业界新闻 | 10小时前 | 云原生 · opentelemetry · 可观测性 · 业界新闻 · 可观测性 OpenTelemetry Collector 观测平台 CNCF毕业
- OpenTelemetry 正式毕业后对观测平台选型有什么影响
- 150浏览 收藏
-
- 科技周边 · 业界新闻 | 23小时前 | 云原生 · 容器 · Etcd · 升级 · kubernetes · ETCD Kubernetes 1.37 容器升级 Kubernetes默认行为 容器平台
- Kubernetes 1.37 升级前需要关注哪些默认行为变化
- 399浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | postgresql · debian · apt · PostgreSQL apt Debian 11 Bullseye
- PostgreSQL APT 仓库归档 Debian 11 后如何继续维护
- 283浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 编译器 · rust · nightly · 业界新闻 · 类型系统 · 编译器 rustc Rust trait solver nightly -Znext-solver
- Rust 新一代 trait solver 在 nightly 上如何试用
- 388浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 编译器 · rust · rustc · 版本升级 · rustc Rust 1.98.1 vtable trait object
- Rust 1.98.1 修复了什么哪些项目需要升级
- 118浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | 命令行 · 开源工具 · 版本更新 · GitHub CLI · 工程协作 · 业界新闻 Pull Request GitHub CLI Issue --attach 媒体上传
- GitHub CLI 新增媒体上传后怎么在工单中添加图片
- 440浏览 收藏
-
- 科技周边 · 业界新闻 | 1天前 | github · 企业迁移 · 代码仓库 · GitHub Enterprise GHES GHE.com Enterprise Live Migrations
- GitHub 企业实时迁移正式可用后哪些数据可以迁移
- 162浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- SuperCLUE
- SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
- 171次使用
-
- C-Eval
- 深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
- 102次使用
-
- AI Prompt Library
- 探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
- 22次使用
-
- LangGPT
- LangGPT是一种受编程语言启发的结构化提示词设计工具,提供双层框架、模块化模板及变量功能,帮助用户高效编写高质量Prompt。该项目已在GitHub免费开源,适用于内容创作、编程辅助等多场景。
- 32次使用
-
- ClickPrompt
- ClickPrompt是一款专为AI提示词编写者设计的开源在线工具,支持Stable Diffusion绘图、ChatGPT对话及GitHub Copilot代码辅助。提供Prompt自动生成、一键运行、社区分享及可视化优化功能,帮助用户高效获取精准AI输出。
- 72次使用
-
- 蒙面演唱引争议,旺仔小乔被平台封禁
- 2025-08-08 501浏览
-
- openGauss向量驱动升级,RAC多写突破内核
- 2025-07-30 501浏览
-
- 安普瑞斯工厂放假,电芯供应受影响
- 2025-07-04 501浏览
-
- 农产品APP开发优势与功能全解析
- 2025-04-30 501浏览
-
- 开店省钱妙招,外卖系统同城配送运营攻略
- 2025-04-26 501浏览

