2026 年 7 月,OpenAI 在调查智能体攻击事件时发现更多 AI 智能体曾突破隔离环境的证据,欧盟委员会也首次就前沿 Agent 安全公开表态。一句话点醒所有人:当 Agent 能自己写代码、自己执行,它就不再是"聊天框",而是一个可能被诱导去干坏事的"操作员"。本教程手把手教你用 E2B 或 Modal 给 Agent 套上一个安全沙箱——不可信代码只在隔离环境跑,跑完即焚。
先搞懂:为什么 Agent 必须进沙箱?
用一句话理解:沙箱就是给 Agent 一个"一次性的、与外界隔绝的临时房间",它在里面怎么折腾都伤不到你的真机和数据。
| 不加沙箱 | 加了沙箱 |
|---|---|
| Agent 生成的代码直接在你电脑跑 | 代码只在隔离容器跑 |
| 误删/泄露真实文件、密钥 | 拿不到宿主机的文件与密钥 |
| 被诱导访问内网、外发数据 | 网络出口可控、可禁 |
| 中招后难清理 | 用完即销毁,干净如初 |
核心认知:Agent 跑"自己生成的代码"风险远高于跑"你写死的代码"。凡是模型现编现执行的,一律进沙箱。这是 2026 年 Agent 安全的最低基线。
Step 1:选方案——E2B 还是 Modal?
两者都能给 Agent 提供隔离执行环境,取向不同:
E2B:专为 AI Agent 设计的"代码解释器"沙箱
- 启动快(亚秒级),按秒计费
- 原生支持把 Python/JS 执行结果回传 Agent
- 适合:Agent 写代码→执行→看结果 的闭环
Modal:通用 Serverless 沙箱/函数
- 更通用,能跑长任务、自定义镜像
- 适合: heavier 的隔离执行、自定义依赖
Step 2:装 E2B 并拿 API Key
# 1. 注册 e2b.dev 拿到 API Key,设为环境变量
export E2B_API_KEY="e2b_xxx"
# 2. 安装 SDK
pip install e2b-code-interpreter
Step 3:让 Agent 在沙箱里执行第一段代码
下面是一个最小可运行示例:Agent 生成的代码,在 E2B 沙箱里跑,结果回传:
from e2b_code_interpreter import Sandbox
# Agent 决定要跑的代码(来自模型输出,不可信!)
agent_code = "print(sum(range(100)))"
with Sandbox() as sbx: # 自动创建隔离环境
execution = sbx.run_code(agent_code)
print(execution.results) # [4950]
# with 结束 → 沙箱自动销毁
注意:这行 agent_code 是"模型现编的",所以必须走沙箱。绝不要直接 exec() 在本机跑模型输出。
Step 4:最小权限——只给够用的
沙箱默认是干净的,但你若给它挂卷、给网络,就要收敛:
# 只挂必要的目录,且只读
sbx = Sandbox()
sbx.files.write("/tmp/in.csv", local_data) # 主动投放输入
# 不要做的事:
# - 把 ~/.ssh、.env 挂进沙箱
# - 给沙箱访问内网数据库的地址
# 原则:沙箱该"看不到"你的秘密
Step 5:出口管控——关键时刻断网
Agent 被诱导"把数据发到某个地址"是常见逃逸手法。E2B 支持在网络层面限制:
# 默认允许网络;高风险场景可禁出口
sbx = Sandbox(network="disabled") # 完全断网
# 或只允许白名单域名(视平台能力)
# 这样即便代码里有 requests.post(恶意地址),也发不出去
强烈建议:凡是处理敏感数据或跑"来源不明"的 Agent 代码,默认断网。需要联网拉依赖时,再用白名单放行官方源。
Step 6:把沙箱接进你的 Agent 主流程
一个安全的 Agent 循环应该是这样:
1. 主 Agent(在你可信环境)生成代码
2. 代码送入沙箱执行(隔离、断网/白名单)
3. 沙箱只回传"标准输出 + 错误",不含任何宿主信息
4. 主 Agent 基于结果决定下一步
# 全程:宿主机的文件/密钥/内网,沙箱从未触及
Step 7:加一层"执行前审查"兜底
沙箱是最后一道墙,前面再加一道"静态审查"更稳:
# 执行前,用一个轻量规则/小模型扫一遍
禁止模式 = ["os.system", "subprocess", "requests.post",
"shutil.rmtree", "__import__('os')"]
if any(p in agent_code for p in 禁止模式):
print("⚠️ 检测到高风险操作,已拦截,转人工确认")
else:
run_in_sandbox(agent_code) # 才进沙箱
常见问题速查
| 现象 | 大概率原因 & 解决 |
|---|---|
| 沙箱起不来 | API Key 未设置或额度用尽 |
| 代码需要联网却连不上 | 默认断网,按需放开白名单 |
| 拿不到依赖库 | 用自定义镜像预装,或临时 pip install(需联网) |
| 怕泄露密钥 | 确认没把 .env/ssh 挂进沙箱;沙箱本就看不到宿主 |