第十章 · 选型决策树——「我该用哪个?」
这章为谁设计
你已经读完了 6 个项目的介绍,现在要做选择。这章给你一棵可执行的决策树——走完 5 个问题,得到一个具体答案。
日常类比
选沙箱像选银行保险柜:
- 存的是现金还是文件?(你的代码多危险?)
- 需要经常取用还是长期存放?(交互式还是批量?)
- 要防小偷还是防核弹?(单用户还是多租户?)
- 预算多少?(能自托管还是要零运维?)
每个答案都会缩小选择范围,最终指向一种方案。
决策树
按顺序回答以下 5 个问题:
问题 1:你的 Agent 需要执行不可信代码吗?
- 否(只调 API、不执行代码)→ 不需要沙箱,到此为止
- 是 → 继续问题 2
问题 2:多租户吗?(不同用户的代码在同一台机器上执行)
- 是 → 跳到问题 3(必须强隔离)
- 否(单用户自用)→ 继续问题 2b
问题 2b:延迟敏感吗?(交互式 Agent,用户等待每一步)
- 是(需要 <50ms)→ L2: OS Sandbox(Codex 路线):bwrap/Seatbelt/seccomp,启动 <10ms
- 否(批量/异步执行)→ 继续问题 3
问题 3:有 KVM 支持吗?(ls /dev/kvm 是否存在)
- 是 → 继续问题 4
- 否(Mac/VPS/嵌套虚拟化不支持)→ 继续问题 3b
问题 3b:需要强隔离吗?
- 是 → L1: gVisor:用户态内核,无需 KVM,但 syscall 兼容有风险
- 否 → L2: OS Sandbox
问题 4:需要自托管吗?(数据不出境/合规要求/成本控制)
- 否(接受云端托管)→ L3: E2B 云服务:Firecracker + API,零运维
- 是 → 继续问题 5
问题 5:需要 E2B SDK 兼容 或 OCI/K8s 集成?
- E2B SDK 兼容 → L4: CubeSandbox:自托管 microVM,60ms,<5MB,E2B 兼容
- OCI/K8s 集成 → L4: Kata Containers:轻量 VM + OCI 标准
- 都不需要 → L4: CubeSandbox(默认选择——性能和密度最优)
典型场景映射
| 场景 | 答案 | 推荐方案 |
|---|---|---|
| 个人开发者用 Claude Code 写代码 | 单用户、延迟敏感 | L0-L2: Claude Code 自带权限 |
| SaaS 让用户上传代码在线执行 | 多租户、有 KVM、不自托管 | L3: E2B 云服务 |
| 企业内部 Agent 平台,数据不出境 | 多租户、有 KVM、自托管、要 E2B 兼容 | L4: CubeSandbox |
| K8s 集群里跑 Agent 工作负载 | 多租户、有 KVM、自托管、要 OCI | L4: Kata Containers |
| Mac 上需要比 Docker 更强的隔离 | 单用户、无 KVM、要强隔离 | L1: gVisor |
| RL 训练需要大量并行 + 快照回滚 | 多租户、有 KVM、自托管、要快照 | L4: CubeSandbox(CubeCoW) |
分水岭判断
整棵决策树最关键的分水岭是问题 2:多租户吗?
- 单用户自用:OS sandbox(Codex 路线,L2)在延迟和复杂度上有压倒性优势。攻击者和受害者是同一个人——你只需要防误操作和 prompt 注入的意外命令
- 多租户代码执行服务:L4 microVM 是最低安全标准。Linux 内核每年有数十个 CVE,共享内核意味着内核漏洞可以跨租户攻击
读完这章你应该能回答
- 什么时候不需要沙箱?(不执行代码的纯 API 调用场景)
- OS sandbox 够用的条件是什么?(单用户、延迟敏感、代码在同一信任域)
- 必须 microVM 的条件是什么?(多租户、不可信代码源、合规要求)
- 没有 KVM 怎么办?(gVisor 或 OS sandbox)
导读目录:README.md 上一章:第九章 · Kata Containers——容器和 VM 的「混血儿」 下一章:第十一章 · 威胁模型——AI Agent 代码执行的安全地图