How Notion Workers Run Untrusted Code at Scale
核心发现: Notion Workers 使用 Vercel Sandbox 在 Firecracker 微 VM 中运行不受信任的代码,实现硬隔离、凭证注入、动态网络策略
问题背景
Notion 想要让任何人用自定义代码扩展平台。这是一个困难的基础设施问题,更是巨大的安全问题:
安全风险: 每个 Notion Worker 运行第三方开发者或代理生成的任意代码,代表 Notion 用户,在企业工作区内执行。没有适当的隔离,Worker 会在与 Custom Agent 相同的环境中运行,有权访问其密钥、权限和该执行上下文中的所有内容。单个 prompt injection 就能窃取凭证或访问另一个用户的数据。
需求
- 硬隔离: 一个 Notion Worker 永远无法访问另一个的数据或状态
- 凭证安全: API keys 需要与外部服务通信,但这些密钥永远不能暴露给代码本身
- 网络控制: 企业客户需要关于 Worker 可以访问哪些外部服务的保证
- 规模: 支持数百万用户运行并发执行而不降低性能
- 状态保存: 需要快速冷启动,需要快照和恢复文件系统状态的能力
- 经济性: 专为低 CPU 利用率的代理构建计费模式
为什么选择 Vercel Sandbox
Vercel Sandbox 在临时 Firecracker 微 VM 中运行每个 Notion Worker。每个 VM 引导自己的内核,提供比容器更强的隔离。每次执行获得自己的文件系统、自己的网络堆栈和自己的安全边界。
关键能力
- 凭证注入: Sandbox 的防火墙代理可以在网络层拦截和注入 API keys,凭证永远不进入执行环境。消除了最危险的 prompt injection 向量:代理被欺骗泄露密钥。
- 网络策略: 支持可在运行时更新而无需重启进程的动态网络策略:从互联网访问开始安装依赖,然后在运行不受信任的代码之前锁定出口。平台构建者可以将这些控制传递给自己的客户。
- 快照: 安装依赖一次,快照文件系统状态,然后在后续调用中从该快照恢复。结合主动 CPU 计费,只在代码实际执行时累积 CPU 成本,而不是在 I/O 等待时,保持成本可预测。
更大的图景:Notion 作为开发者平台
Notion Workers 不是一次性功能。它是 Notion 成为开发者平台的开始。
这种转变需要的基础设施是 Notion 不应该构建的:
- 安全代码执行
- 凭证管理
- 网络隔离
- 基于文件的快照
这些是随着平台扩展而变得困难的问题。Vercel Sandbox 处理基础设施复杂性,让 Notion 专注于开发者体验。
开发者用 Notion Workers 构建什么
Notion Workers 支持三种主要模式:
- 第三方数据同步: 按计划同步 CRM 记录、分析和支持工单到 Notion
- 自定义自动化: 附加到按钮,点击触发任意代码
- AI 代理工具: 当 Notion 的自定义代理调用 Workers 作为工具调用时,它们变得比仅限于预建集的代理更有能力
核心洞察: "任何想让用户或代理运行自定义代码的平台都面临相同的问题:隔离、凭证安全、网络控制和规模。Vercel Sandbox 开箱即用地提供这些能力。如果你在构建需要运行不受信任代码的平台,无论是 AI 代理、开发者插件还是工作流自动化,这就是你这样做的方式。"
相关资源
探索时间: 2026-03-21 23:37 | 来源: Vercel Engineering Blog