目录

Building Cloud Agent Infrastructure 核心总结

3

原文链接:https://x.com/intuitiveml/status/2062699747224568212

一句话总结

云端 Agent 不是“把桌面 Agent 放到服务器上跑”,而是需要重新设计运行时、状态持久化、密钥管理、触发管线和安全边界。

核心问题

桌面 Agent 默认拥有很多隐含条件:

  • 一个用户
  • 一台机器
  • 一个本地进程
  • 本地文件系统
  • 环境变量里的 API key
  • 用户手动重试
  • 相对可信的执行边界

云端 Agent 没有这些条件。它运行在临时 sandbox、共享硬件、无人值守触发环境中,代码可能由 LLM 生成并带有攻击性。因此,持久化、身份、网络信任、重试和密钥管理都必须显式设计。

经验 1:分离慢变状态和快变代码

用户环境和平台 runner 的变化频率不同:

  • 用户环境:包、文件、脚本、配置,变化慢,由用户控制
  • 平台 runner:执行 harness、调度逻辑、平台代码,变化快,由平台控制

正确做法:

  • 将用户环境冻结成 sandbox snapshot
  • 每次运行从同一个 snapshot 启动,保证复现性
  • 平台 runner 不和用户环境强绑定
  • runner 更新时只热替换 runner,不丢弃用户 snapshot
  • 成功运行后再把新 runner 写回 snapshot

关键原则:

持久化的 artifact 要按“谁控制变化节奏”来切分边界。

经验 2:密钥不能进入执行边界

云端 Agent 的安全假设应该是:

sandbox 内部代码已经不可信。

因此:

  • 长期凭证不能放进 sandbox
  • 不能依赖环境变量保存 API key
  • Agent 访问 GitHub、Slack、用户 API 时,不直接拿 token
  • 请求应通过 sandbox 外部的 API bridge 转发
  • API bridge 在宿主侧附加真实 OAuth token

安全校验包括:

  • 内部 IP allowlist
  • 每次运行签发的短期 JWT
  • JWT 绑定 user、app、session、run
  • token 只在本次运行窗口内有效

这样即使 prompt injection 让 Agent 泄露环境变量,攻击者也拿不到长期凭证。

统一执行管线

文章强调所有触发方式都应该走同一个执行入口:

  • 用户点击 Run
  • 定时任务
  • HTTP API 调用
  • 另一个 Agent 触发

这些都应进入同一个 executeAgent 管线。

好处:

  • 计费统一
  • 日志统一
  • 指标统一
  • 权限模型统一
  • 新增触发方式只是路由变化,不是架构重写

文章的架构抽象

云端 Agent 可以理解为:

一个带自然语言接口的函数。

其中:

  • Agent 的实现属于用户
  • 运行时属于平台
  • 触发面属于平台
  • 安全边界属于平台
  • 状态和代码应该按所有权分层演进

对工程实践的启发

构建云端 Agent 平台时,需要重点设计:

  • sandbox snapshot 机制
  • runner 热更新机制
  • 用户状态与平台代码解耦
  • host-side secret bridge
  • 短期凭证与调用授权
  • 统一执行入口
  • 失败重试与半升级状态处理
  • 日志、计费、指标的一致性

需要注意的风险

文章方案仍有一些工程风险需要补强:

  • chattr +i 不是强安全边界
  • IP allowlist 不能防内部横向移动
  • runner 热替换需要兼容性协议
  • snapshot 冻结也会冻结漏洞
  • API bridge 返回的数据同样需要脱敏和访问控制
  • prompt injection 防护不能只依赖“密钥不进 sandbox”

最核心的设计原则

  1. 用户状态要可复现、可冻结。
  2. 平台代码要可独立升级。
  3. 长期密钥不能进入 sandbox。
  4. 所有触发方式走统一执行管线。
  5. 边界按照所有权、变化频率和信任级别来划分。