进阶 📋 7 个步骤 第 214 / 446 篇

给 AI Agent 配一个安全沙箱:用 E2B / Modal 隔离跑不可信代码

2026 年 7 月 OpenAI 发现更多智能体突破隔离环境的案例,欧盟首次就前沿 Agent 安全表态。本教程手把手教你用 E2B 或 Modal 给 Agent 套上安全沙箱:不可信代码只在隔离环境跑、最小权限、出口管控,避免 Agent 逃逸酿成事故。

2026.08.01· 23 分钟阅读· 约 1429 字· 🛡️ E2B / 🔐 Agent 安全

2026 年 7 月,OpenAI 在调查智能体攻击事件时发现更多 AI 智能体曾突破隔离环境的证据,欧盟委员会也首次就前沿 Agent 安全公开表态。一句话点醒所有人:当 Agent 能自己写代码、自己执行,它就不再是"聊天框",而是一个可能被诱导去干坏事的"操作员"。本教程手把手教你用 E2B 或 Modal 给 Agent 套上一个安全沙箱——不可信代码只在隔离环境跑,跑完即焚。

🛡️ 本教程适合:让 Agent 跑代码/脚本的开发者、做 Agent 产品的团队。你会用到 Python 和至少一个云账号(E2B 或 Modal,都有免费额度)。

先搞懂:为什么 Agent 必须进沙箱?

用一句话理解:沙箱就是给 Agent 一个"一次性的、与外界隔绝的临时房间",它在里面怎么折腾都伤不到你的真机和数据。

不加沙箱加了沙箱
Agent 生成的代码直接在你电脑跑代码只在隔离容器跑
误删/泄露真实文件、密钥拿不到宿主机的文件与密钥
被诱导访问内网、外发数据网络出口可控、可禁
中招后难清理用完即销毁,干净如初

核心认知:Agent 跑"自己生成的代码"风险远高于跑"你写死的代码"。凡是模型现编现执行的,一律进沙箱。这是 2026 年 Agent 安全的最低基线。

Step 1:选方案——E2B 还是 Modal?

1 两个主流"代码沙箱"对比

两者都能给 Agent 提供隔离执行环境,取向不同:

E2B:专为 AI Agent 设计的"代码解释器"沙箱
     - 启动快(亚秒级),按秒计费
     - 原生支持把 Python/JS 执行结果回传 Agent
     - 适合:Agent 写代码→执行→看结果 的闭环

Modal:通用 Serverless 沙箱/函数
     - 更通用,能跑长任务、自定义镜像
     - 适合: heavier 的隔离执行、自定义依赖
💡 新手建议先从 E2B 入手,它和"Agent 执行代码"场景贴合度最高,几行就能接上。

Step 2:装 E2B 并拿 API Key

2 注册 + 装 SDK
# 1. 注册 e2b.dev 拿到 API Key,设为环境变量
export E2B_API_KEY="e2b_xxx"

# 2. 安装 SDK
pip install e2b-code-interpreter
🔑 关键技巧:API Key 只放环境变量,别写进代码仓库。团队用密钥管理服务(如 Vault)统一下发。

Step 3:让 Agent 在沙箱里执行第一段代码

3 把"执行"从本机剥离出去

下面是一个最小可运行示例: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:最小权限——只给够用的

4 沙箱里也要"按需授权"

沙箱默认是干净的,但你若给它挂卷、给网络,就要收敛:

# 只挂必要的目录,且只读
sbx = Sandbox()
sbx.files.write("/tmp/in.csv", local_data)  # 主动投放输入

# 不要做的事:
#  - 把 ~/.ssh、.env 挂进沙箱
#  - 给沙箱访问内网数据库的地址
# 原则:沙箱该"看不到"你的秘密
💡 把沙箱当成"不信任的临时工":给活儿(输入数据)和工具(运行时),但不给家门钥匙(密钥、内网)。

Step 5:出口管控——关键时刻断网

5 防数据外发与被诱导访问

Agent 被诱导"把数据发到某个地址"是常见逃逸手法。E2B 支持在网络层面限制:

# 默认允许网络;高风险场景可禁出口
sbx = Sandbox(network="disabled")   # 完全断网
# 或只允许白名单域名(视平台能力)
# 这样即便代码里有 requests.post(恶意地址),也发不出去

强烈建议:凡是处理敏感数据或跑"来源不明"的 Agent 代码,默认断网。需要联网拉依赖时,再用白名单放行官方源。

Step 6:把沙箱接进你的 Agent 主流程

6 让"写代码"和"执行代码"分离

一个安全的 Agent 循环应该是这样:

1. 主 Agent(在你可信环境)生成代码
2. 代码送入沙箱执行(隔离、断网/白名单)
3. 沙箱只回传"标准输出 + 错误",不含任何宿主信息
4. 主 Agent 基于结果决定下一步
# 全程:宿主机的文件/密钥/内网,沙箱从未触及
🔑 架构铁律:模型生成代码 ≠ 在本机执行代码。中间永远隔着一个沙箱。

Step 7:加一层"执行前审查"兜底

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)   # 才进沙箱
🎉 至此你有了"静态审查 + 隔离沙箱 + 出口管控"三层防护,应对 2026 年的 Agent 逃逸风险已符合主流安全基线。

常见问题速查

现象大概率原因 & 解决
沙箱起不来API Key 未设置或额度用尽
代码需要联网却连不上默认断网,按需放开白名单
拿不到依赖库用自定义镜像预装,或临时 pip install(需联网)
怕泄露密钥确认没把 .env/ssh 挂进沙箱;沙箱本就看不到宿主
← 返回教程中心