Hotdry.
ai-systems

使用 ERA microVM 实现本地 AI 代理沙箱隔离与资源控制

通过 ERA CLI 在本地部署微型虚拟机沙箱,支持进程隔离、CPU/内存配额、输出捕获和安全工具执行,防止主机逃逸。

在本地开发和运行 AI 代理时,一个核心挑战是如何安全执行 AI 生成的代码或工具调用。这些代码可能包含未知逻辑、潜在恶意行为或资源滥用,直接在主机环境中运行风险极高。传统的容器如 Docker 虽提供隔离,但内核共享仍存在逃逸漏洞,尤其是面对复杂 AI 工具链。ERA 工具通过 microVM 技术,提供类似容器的开发体验(devX),却拥有更强的隔离性和 200ms 级启动速度,完美契合本地 AI 代理沙箱需求。

为什么选择 microVM 而非传统容器?

观点:microVM 如 krunvm 采用轻量虚拟化,在用户态启动完整 guest kernel,仅共享硬件虚拟化层,避免了容器内核逃逸风险。对于 AI 代理,工具执行(如 shell 命令、网络请求)常涉及系统调用,microVM 确保 guest 内行为不波及主机。

证据:ERA 基于 krunvm 和 buildah,krunvm 使用 Firecracker-like 架构,启动时间仅 200ms,支持 OCI 镜像。GitHub 仓库描述:“Run untrusted or AI-generated code locally inside microVMs that behave like containers for great devX, 200ms launch time, and better security。”

可落地参数:

  • 资源配额:创建 VM 时指定 --cpu 1 --mem 256(单位 MB),限制单代理 CPU 单核、内存 256MB,避免 OOM 或 CPU 垄断。
  • 网络策略--network allow_all 允许出站(适合工具如 API 调用),或自定义 deny_all 仅内网,防范数据外泄。
  • 语言支持--language python / javascript / go / ruby,自动拉取预置镜像。

安装与环境配置清单

ERA 安装简洁,但 macOS/Linux 有平台差异。优先 Homebrew,确保依赖就位。

  1. 安装 CLI

    brew tap binsquare/era-agent-cli
    brew install binsquare/era-agent-cli/era-agent
    brew install krunvm buildah
    
  2. macOS 特定设置(关键,krunvm 需 case-sensitive APFS 卷):

    $(brew --prefix era-agent)/libexec/setup/setup.sh
    
    • 自动创建 /Volumes/krunvm 卷(diskutil apfs addVolume)。
    • 导出环境:export AGENT_STATE_DIR=/Volumes/krunvm/stateKRUNVM_DATA_DIR=/Volumes/krunvmCONTAINERS_STORAGE_CONF=/Volumes/krunvm/containers-storage.conf
    • 验证:agent vm exec --help 无误。
  3. Linux:包管理器安装 krunvm/buildah,设 AGENT_STATE_DIR 为可写目录,非 root 运行。

配置调优:

  • AGENT_LOG_LEVEL=debug 调试日志。
  • AGENT_ENABLE_GUEST_VOLUMES=1 启用 /in/out /persist 挂载,持久化代理状态。

核心使用:沙箱化 AI 代理工具执行

观点:ERA 支持长运行 VM(持久代理会话)和临时执行(单次工具调用),stdout/stderr 自动捕获,返回 JSON 格式,便于代理解析。

示例 1:临时执行 Python 工具(ephemeral,零状态):

agent vm temp --language python --cpu 1 --mem 128 --cmd "python -c 'import requests; print(requests.get(\"https://api.example.com\").text[:100])'"

输出捕获:{"stdout": "...", "stderr": "", "exit_code": 0}。资源限 128MB,防内存炸弹。

示例 2:创建持久 VM 执行多步代理:

VM_ID=$(agent vm create --language javascript --cpu 2 --mem 512 --network allow_all)
agent vm exec --vm $VM_ID --cmd "node -e 'console.log(\"Agent step 1\"); /* AI code */'"
agent vm exec --vm $VM_ID --cmd "node tool.js"  # 捕获工具输出
  • 隔离:guest 内工具(如 fs.writeFile)不触主机。
  • 清理:agent vm stop --all; agent vm clean --all,释放资源。

安全清单:

  • 防逃逸:默认无 host 访问,network policy 控制出站。
  • 配额监控:预设 --mem 256-1024,结合 agent vm list 检查使用。
  • 超时:CLI 无内置,代理层加 timeout wrapper,如 Python subprocess 5s 限。
  • 回滚:异常时 agent vm clean,主机无状态污染。

监控与生产参数建议

观点:本地沙箱需运维化,监控 VM 生命周期,避免 zombie 进程。

参数表:

参数 建议值 目的
--cpu 1-2 代理计算密集
--mem 256-1024 MB 平衡性能 / 安全
--network deny_outbound 仅信任 API
AGENT_STATE_DIR /opt/era-state 独立分区
清理周期 每小时 cron agent vm clean --idle>300s 闲置 5min 删

集成 AI 框架:如 LangChain,替换 executor 为 ERA exec,捕获输出 feed 回 LLM。

ERA 的云层(Cloudflare Worker)可选,但本地优先零依赖。

资料来源:基于 GitHub binsquare/era 官方文档,ERA 使用 krunvm 实现微型 VM 隔离,支持快速启动 AI 代码沙箱。era-agent README 详述配置。

查看归档