小白 / Xiaobai

小白 / Xiaobai

开发者 · 产品构建者

持续构建 AI 工程系统、开发者工具与长期数字资产。

关于作者与 XBSTACK →
AI Agent Sandbox 中 Hosted 与 Self-hosted 两种执行环境的安全隔离架构对比,包含文件、网络、Secret 与多租户边界

AI Agent Sandbox 怎么设计?Hosted vs Self-hosted、文件、Secret、网络与持久化

生产级 AI Agent 为什么需要 Sandbox?本文从 AI 安全与沙箱隔离角度比较 Hosted 与 Self-hosted,覆盖文件、Secret、网络、持久化、多租户隔离与运维责任。

发布 · 2026-09-2612 分钟阅读XBSTACK 原创
#AI Agent#Sandbox#Hosted Sandbox#Self-hosted Sandbox#Agent Security#Secret Management#Network Isolation#Filesystem Isolation

先给结论:Sandbox 不是“给 Agent 一台机器”,而是划清它能碰什么

当 Agent 只能生成文字时,最坏的问题通常是回答错误;当 Agent 可以运行 Shell、安装包、写文件、启动浏览器、访问 API,风险就从“内容错误”变成了执行边界错误。

生产环境里的 Sandbox 要解决的不是“让代码能跑”,而是同时回答五个问题:

  1. Agent 能读写哪些文件?
  2. Agent 能访问哪些网络目标?
  3. Agent 什么时候、以什么权限拿到 Secret?
  4. 工作目录和生成文件需要保留多久?
  5. 不同用户、项目或任务之间是否真正隔离?

如果这五个问题没有独立于 Prompt 之外的确定性答案,那么“请不要读取别人的文件”“不要访问生产接口”只是文字约束,不是安全边界。

OpenAI 当前把 Sandbox 定义为带文件系统、Shell、Packages、Ports、Snapshots 和受控外部访问的隔离执行环境,并同时提供 Hosted 与 Self-hosted 两种环境模型。Anthropic 对 Claude Code 的 Sandbox 也把边界收敛到两个核心面:文件系统和网络。它们的产品实现不同,但背后的生产问题高度一致。

Hosted vs Self-hosted:先看责任边界,不要先看品牌

最容易犯的错,是把 Hosted 和 Self-hosted 理解成“云上”和“本地”两个部署地点。真正影响架构的是:谁负责创建、隔离、更新、销毁执行环境,以及你的业务必须控制到哪一层。

维度Hosted SandboxSelf-hosted Sandbox
环境创建与生命周期平台负责你负责
基础镜像与常用运行时平台预置或模板化完全自定义
私有网络/VPC通常受平台能力限制最灵活
特殊硬件/GPU/内部工具取决于平台最可控
网络策略平台策略/allowlist你负责网络层强制
Secret 接入优先用平台 Vault/Secret自建 Secret Manager/Proxy
持久化平台文件/快照/挂载能力Volume/Object Storage/快照自管
隔离补丁和底层运维平台承担更多团队自行承担
供应商可移植性较低较高
上线速度快慢
基础设施控制权中高

因此没有“Hosted 一定更安全”或“Self-hosted 一定更专业”的简单答案。

Hosted 与 Self-hosted AI Agent Sandbox 在生命周期、镜像控制、私有网络、Secret、持久化、可移植性和运维责任上的对比

Hosted 更适合:

  • 任务主要需要标准 Linux、Python/Node、常用 CLI;
  • 文件和依赖可以在任务启动时注入;
  • 不需要进入公司私网;
  • 希望减少镜像、调度、回收和安全补丁运维;
  • 能接受平台提供的网络和环境能力边界。

Self-hosted 更适合:

  • Agent 必须访问私有网络、内网数据库或自建 MCP;
  • 需要公司自定义镜像、系统包或合规基线;
  • 需要 GPU、特殊硬件或长期常驻工具链;
  • 环境必须与现有 Kubernetes、VM、IAM、SIEM、Secret Manager 接入;
  • 对数据驻留和执行审计有更严格要求。

第一条硬边界:不要让多个不可信工作负载天然共享同一个文件世界

OpenAI 的 Self-hosted 文档明确提醒:共享同一环境的 Agent 能接触相同的文件、凭证和其他资源,因此应按用户或工作负载隔离。

这条原则比“容器还是 VM”更基础。

在多用户系统里,可以先按风险从低到高设计隔离粒度:

  • per-task:每个任务一个短生命周期 Sandbox;
  • per-chat / per-session:一段持续工作保持同一工作区;
  • per-project:同一项目共享持久文件,但不同项目隔离;
  • per-user:个人工作空间长期存在;
  • shared worker:只有在文件、身份、Secret 和工具都能再次强隔离时才考虑。

如果一个 Agent 可以执行任意命令,那么 Unix 用户名、工作目录名称或 Prompt 中的“请不要访问”都不能替代真正的权限边界。

第二条硬边界:Secret 不应该成为 Agent 的“知识”

Secret 管理是 Agent Sandbox 最容易被低估的部分。

OpenAI 当前文档明确区分了“Sandbox 进程启动所需环境值”和“第三方长期凭证”。对于 Hosted Sandbox,官方建议使用 Vault 方式,让 Sandbox 代码看到占位值,由网络代理只在批准的目标请求上注入真实凭证;Self-hosted 则需要团队自己提供可信代理或服务端注入层。

核心原则可以压缩成一句话:

模型可以决定“我要调用哪个被允许的服务”,但不应该因此自动获得那个服务的长期明文凭证。

原因很直接:只要凭证作为普通环境变量进入执行环境,Agent 生成的代码通常就有机会读取它。Prompt Injection、恶意依赖、调试日志、错误堆栈或误写 Artifact 都可能把它带出去。

因此生产环境更推荐:

Agent → 请求意图 → Policy Gate → Secret/Network Broker → 目标服务

AI Agent 安全隔离流程:Sandbox 内不保存长期凭证,Policy Gate 授权后由 Secret 与 Network Broker 发放短期权限并限制出口网络

而不是:

Agent → 读取长期 API Key → 任意发请求

这也正好和 XBSTACK 已有的 AI Agent Policy Gate 形成上下游关系:Policy Gate 判断这次调用是否被授权,Sandbox/Secret Broker 决定即使模型想越界,底层是否真的给它凭证和网络路径。

第三条硬边界:网络不要默认“全开”

Hosted Sandbox 的一个重要生产能力,是把网络访问做成明确策略。OpenAI 当前支持 enabled、disabled 和 restricted 三种模式;restricted 模式按允许域名控制出站访问。

这给出了一个非常实用的默认值:

  • 纯本地代码处理:网络关闭;
  • 只访问固定 API:restricted + allowlist;
  • 真正需要通用浏览/安装依赖:临时开启更宽权限,并缩短 Sandbox 生命周期。

Self-hosted 也应该实现同样的语义,只是执行手段可能是容器网络、NetworkPolicy、iptables/eBPF、出口代理或云防火墙。

尤其要警惕“安装依赖所以必须全网开放”这种偷懒设计。包管理器下载、业务 API、浏览器访问和内部服务访问,应该尽量拆成不同策略,而不是共享一张无限制出口网络。

第四条硬边界:把“工作区持久化”和“业务数据持久化”分开

很多 Agent 产品做着做着,会把 Sandbox 目录直接当数据库用。

短期看很方便:文件都在,下一轮继续读。长期问题是:

  • Sandbox 被回收以后数据是否还在?
  • Snapshot 能不能跨版本恢复?
  • 哪些文件应该随环境销毁?
  • 哪些 Artifact 应该长期保存?
  • 谁能读历史工作区?
  • 删除用户账号时,哪些副本必须跟着删除?

更稳妥的设计是把三类东西分开:

1. Ephemeral Workspace

临时 clone、解压目录、缓存、编译产物、可重建依赖。任务结束后可以删除。

2. Resumable Workspace

长任务需要继续工作的目录。可以通过 Snapshot、Volume 或受控持久目录恢复,但仍然属于“执行状态”。

3. Durable Business Data / Artifacts

最终文档、数据集、代码补丁、用户上传原件、正式报告等,应进入独立的对象存储、数据库、Git 或文档系统,具备权限、版本、备份和删除策略。

这能避免把“Sandbox 还活着”误当成“业务数据已经可靠保存”。

AI Agent 数据持久化三层:临时执行工作区、可恢复工作区,以及独立保存的长期业务数据与 Artifacts

第五条硬边界:Artifact 离开 Sandbox 前仍要过一次出口检查

Sandbox 隔离主要控制“执行环境能碰什么”,并不自动保证 Agent 生成的结果安全。

如果 Agent 能读取私有资料,再生成一个 ZIP、CSV、PDF、Patch 或日志,那么最终 Artifact 可能包含:

  • API Key 或 Token;
  • 用户隐私数据;
  • 环境配置和内部 URL;
  • 不应该外发的源代码;
  • Prompt Injection 留下的恶意脚本;
  • 过大的中间文件或缓存。

因此 Artifact Export 最好也是一个显式动作:

Sandbox → Artifact Scanner / Policy → Durable Storage / User Download

至少检查文件类型、大小、路径、敏感信息和来源。高风险场景还应记录 hash、生成任务、用户、时间和审批人。

Sandbox 和 Policy Gate 不是同一个东西

这两个概念很容易被混在一起。

Policy Gate 回答:当前用户、当前任务、当前参数,是否允许调用这个工具?

Sandbox 回答:即使工具被调用、代码开始执行,它实际能够访问哪些计算、文件、网络和凭证?

Human-in-the-loop 回答:哪些高风险动作必须由人再次确认?

Audit 回答:最后谁、在什么上下文、通过什么 Agent,做了什么?

生产系统通常需要把四层同时存在,而不是选四选一。

选择 Hosted 还是 Self-hosted:一个更实用的决策树

1. 是否需要访问私有网络或内部系统?

需要:优先评估 Self-hosted,或者确认 Hosted 平台是否有真正符合要求的私网连接方案。

不需要:继续。

2. 是否需要特殊镜像、内核能力、GPU 或系统级工具?

需要:Self-hosted 通常更合适。

不需要:继续。

3. 团队是否愿意自己承担环境补丁、调度、回收、隔离和容量管理?

不愿意:Hosted 更有优势。

愿意,而且基础设施已经标准化:Self-hosted 的控制价值会上升。

4. Secret 能否通过 Vault / Broker / Function Tool 留在 Sandbox 外?

无论 Hosted 还是 Self-hosted,如果答案是“不行,只能把长期生产 Key 全部塞进环境变量”,架构都应该先停下来重新设计。

5. 任务状态必须跨小时/跨天恢复吗?

如果需要,必须额外设计 Snapshot/Volume/Artifact Store,而不是默认依赖某个运行中的容器永远不死。

OpenAI Hosted / Self-hosted 当前能说明什么

截至 2026 年 9 月,OpenAI 官方文档已经把两条路线的责任边界写得很清楚。

OpenAI-hosted Sandbox 提供 Linux 工作区、Python/Node/CLI、文件、环境配置和网络策略;当你需要自己的镜像、计算资源或私有网络时,官方直接建议考虑 Self-hosted。

Self-hosted 模式下,Agent harness 仍由 OpenAI 运行,而 executor 在你的环境里运行,可以是 laptop、container 或 remote sandbox。连接是由 executor 向外建立,官方同时建议把应用级 API Key 留在 Sandbox 外,只把受限的环境连接凭证交给 executor。

这里最值得迁移到其他平台的,不是某个 API 名称,而是这套责任划分:

  • 托管平台管理什么;
  • 你的基础设施管理什么;
  • Agent 代码实际能读到什么;
  • 哪些凭证永远不进入工作区;
  • 网络和文件权限由谁强制。

Anthropic 的实现给了另一个重要信号:减少审批不等于放松边界

Anthropic 的 Claude Code Sandbox 重点强调文件系统隔离和网络隔离。它想解决的一个现实问题是:如果每条 Shell 命令都让用户点击“允许”,很容易出现审批疲劳。

更合理的模式是先建立可验证边界,再允许 Agent 在边界内更自主地工作。

这意味着 Sandbox 的价值不仅是“出事时挡住攻击”,还包括:

把大量细碎的人类审批,转换成少量、稳定、机器可执行的环境策略。

这对 Coding Agent、数据分析 Agent、Research Agent 和后台自动化都成立。

生产环境最低 Checklist

隔离

  • 是否按用户、项目或工作负载定义了明确的 Sandbox 隔离粒度?
  • 一个租户是否可能读取另一个租户的文件、缓存或凭证?
  • Agent 是否能访问宿主机 Home、SSH Key、浏览器 Cookie、云 CLI 配置?

文件

  • 默认可写目录是否最小化?
  • 上传文件是否只挂载到当前任务需要的位置?
  • 临时文件、快照和最终 Artifact 是否有不同生命周期?

Secret

  • 长期第三方凭证是否尽量留在 Sandbox 外?
  • 是否使用 Secret Manager、Vault、Broker 或服务端 Function Tool?
  • Sandbox 内使用的凭证是否短期、最小权限、可撤销?

网络

  • 不需要联网的任务是否默认断网?
  • 固定 API 是否使用域名/IP allowlist?
  • 是否阻止访问云 Metadata、内网管理接口和不必要的内部服务?

执行

  • 是否限制 CPU、内存、磁盘、进程数和最大运行时间?
  • 安装系统包、启动服务、开放端口是否需要更高权限?
  • 高风险命令是否需要 Policy Gate 或人工确认?

持久化

  • Sandbox 销毁后,哪些状态必须能恢复?
  • 最终业务数据是否已经离开临时文件系统?
  • Snapshot、Volume、Artifact 的删除和保留规则是否清楚?

审计

  • 能否追踪用户 → Agent → Tool → Sandbox → Artifact 的完整链路?
  • 是否记录了权限决策,而不仅是模型文本?
  • 出现泄露或误操作后能否撤销 Secret、隔离环境并定位影响范围?

最后怎么选

如果团队现在只是想让 Agent 安全地执行 Python、Node、Shell、处理上传文件并返回 Artifact,Hosted Sandbox 通常是更快的起点。

如果 Agent 必须深入私有基础设施、定制系统镜像、使用特殊硬件,或者公司已经有成熟的 Kubernetes/VM/IAM/Secret/Audit 平台,Self-hosted 往往更符合长期控制需求。

但无论选择哪条路线,真正决定生产安全性的不是“Sandbox 是谁家的”,而是有没有把下面四件事做成机器强制边界:

文件最小权限、Secret 外置、网络最小开放、持久化与执行状态分离。

这四项做好以后,模型、Agent Framework 和具体 Sandbox Provider 都可以继续替换;这也是为什么这个问题比某个 SDK 版本或某个 Sandbox Bug 更值得长期维护。

相关内容

参考资料

专题入口 / AI Agent Hub

从单个 Agent 问题继续进入完整生产体系

AI Agent 专题统一组织架构、记忆、工具调用、评测、安全、部署和多智能体协作,让每篇文章都回到明确的主题主页面。

继续阅读

返回专题 →
AI Agent 安全怎么做?Prompt Injection、MCP、Memory 与 Tool 权限完整指南AI Agent 安全不能只防 Prompt Injection。本文结合 OWASP Agentic Top 10、Agent Control Standard、NIST 与 MCP 官方资料,系统拆解 Tool/MCP 权限、Memory Poisoning、Identity、Sandbox、HITL、Runtime Control、审计、对抗测试与上线检查清单。OpenAI Zero Data Retention 怎么用?AI Agent、Responses API 与 MCP 数据保留边界OpenAI Zero Data Retention(ZDR)并不等于整个 AI Agent 零留存。本文拆解 Responses API、Chat Completions、remote MCP、Prompt Cache、Background Mode 与 Data Residency 的真实数据保留边界。MCP 配置怎么做安全检查?Secret、Shell、Remote MCP 与权限边界实测MCP 配置文件最容易出问题的不是格式,而是明文 Secret、过宽 Shell、远程 MCP、权限和日志边界。本文按 MCP 官方授权要求与 OWASP MCP Security 做本地扫描示例,并用 Agent Security Auditor 给出整改前后检查。OpenAI Agents API vs Agents SDK vs Responses API:生产级 Agent 到底该把控制权交给谁?OpenAI 在 2026 年 9 月推出 Agents API 后,Responses API、Agents SDK、Agents API 三套能力很容易被混在一起。本文从 Agent Loop、状态、恢复、Tool Calling、Sandbox、多 Agent、成本、可移植性和业务控制权拆解三者的真实边界,并给出生产选型路径。

AI 工程周报

只发真正改变工程判断的变化、故障、实验和新资产。

评论与补充证据

参与讨论

问题、验证与勘误

登录后可发表评论。所有新评论先进入审核;审核期间仅评论者本人和管理员可见,通过后才公开。

登录评论 审核后公开
正在加载评论区…