Vercel Sandbox 新增 HTTP Header 注入,安全下发凭据防止密钥外泄

2 分钟阅读
2026 年 2 月 23 日
Vercel Sandbox 现在可以在沙箱代码发起的出站请求中自动注入 HTTP Header。这样一来,API Key 和 Token 可以安全地保留在沙箱 VM 边界之外,因此运行在沙箱内的应用可以调用需要鉴权的服务,但始终无法直接接触这些凭据。
Header 注入通过网络策略中的 transform 配置。当沙箱向匹配域名发起 HTTPS 请求时,防火墙会在转发请求前添加或替换指定 Header。
const sandbox = await Sandbox.create({ timeout: 300_000, networkPolicy: { allow: { "ai-gateway.vercel.sh": [{ transform: [{ headers: { authorization: `Bearer ${process.env.AI_GATEWAY_API_KEY}` } }], }], }, },});// Code inside the sandbox calls AI Gateway without knowing the API keyconst result = await sandbox.runCommand('curl', ['-s', 'https://ai-gateway.vercel.sh/v1/models']);
这项能力专为 AI Agent 工作流设计,因为在这类场景中,prompt injection 是现实且常见的威胁。即使 Agent 被攻破,也没有可被窃取的凭据,因为凭据只存在于 VM 外部的一层机制中。




注入规则适用于所有出站网络策略配置,包括开放互联网访问。若要在允许通用流量的同时,仅为特定服务注入凭据,可按如下方式配置:
const sandbox = await Sandbox.create({ networkPolicy: { allow: { "ai-gateway.vercel.sh": [{ transform: [{ headers: { Authorization: `Bearer ${process.env.AI_GATEWAY_API_KEY}` } }], }], "*.github.com": [{ transform: [{ headers: { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` } }], }], // Allow traffic to all other domains. "*": [] } }});
Link to heading实时更新
与其他网络策略设置一样,注入规则可以在沙箱运行期间动态更新,无需重启。这让多阶段工作流成为可能:在初始化阶段注入凭据,随后在执行不受信代码前移除凭据:
// Phase 1: Clone repos with credentialsawait sandbox.updateNetworkPolicy({ allow: { "api.github.com": [{ transform: [{ headers: { Authorization: `Bearer ${process.env.GITHUB_TOKEN}` } }], }], }});// ... clone repos, download data ...// Phase 2: Lock down before running untrusted codeawait sandbox.updateNetworkPolicy('deny-all');
Link to heading关键特性
-
Header 覆盖:注入会作用于出站请求的 HTTP Header。
-
完整替换:若沙箱代码已设置同名 Header,注入的 Header 会直接覆盖,防止沙箱用自定义凭据“掉包”。
-
域名匹配:支持精确域名与通配符(如
*.github.com),仅在出站请求匹配时触发注入。 -
兼容所有策略:可将注入规则与
allow-all或基于域名的 allow 列表组合使用。
现已向所有 Pro 与 Enterprise 客户开放。更多信息请参阅文档。
原文链接:https://vercel.com/changelog/safely-inject-credentials-in-http-headers-with-vercel-sandbox

