ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Agent Vault TypeScript SDK实战:为沙箱Agent铸造临时凭据(Daytona/E2B集成指南)

2026/10/7 9:54:11 拓冰建站 浏览量
Agent Vault TypeScript SDK实战:为沙箱Agent铸造临时凭据(Daytona/E2B集成指南) Agent Vault TypeScript SDK实战为沙箱Agent铸造临时凭据Daytona/E2B集成指南【免费下载链接】agent-vaultA HTTP credential proxy and vault for AI agents like Claude Code, OpenClaw, Hermes, custom agents harnesses, and more.项目地址: https://gitcode.com/gh_mirrors/ag/agent-vaultAgent Vault是面向 AI Agent 的开源 HTTP 凭据代理与保险库配套的TypeScript SDKinfisical/agent-vault-sdk让你用几行代码就能为 Daytona、E2B 等沙箱中的 Agent铸造临时凭据Scoped Session沙箱里的 Agent 永远接触不到真实密钥所有出站 HTTPS/WebSocket 流量被透明代理拦截由 Agent Vault 在转发时注入凭据。为什么沙箱 Agent 需要临时凭据而不是直接发密钥很多团队用 Daytona、E2B、Docker 等沙箱跑 Claude Code、OpenClaw、Hermes 这类 Agent。传统做法是把OPENAI_API_KEY之类的密钥注入沙箱环境变量——但沙箱一旦失陷、或 Agent 被提示词注入密钥就全泄露了而且无法按沙箱生命周期回收。Agent Vault 的思路是「凭据经纪Credential Brokerage」 真实密钥只存在 Agent Vault 服务端加密存储⏱️ 后端为每个沙箱铸造一个TTL 有限的会话令牌5 分钟7 天️ 沙箱内 Agent 只需设置代理环境变量流量经过 MITM 代理时被自动注入凭据 沙箱销毁、会话过期凭据随之失效无需手动吊销5分钟安装接入npm 安装与客户端初始化安装 SDK 并初始化客户端token 支持直接传参或读取环境变量AGENT_VAULT_TOKEN/AGENT_VAULT_ADDRnpm install infisical/agent-vault-sdkimport { AgentVault, buildProxyEnv } from infisical/agent-vault-sdk; const av new AgentVault({ token: YOUR_AGENT_TOKEN, // 实例级 Agent Token address: http://localhost:14321, }); const vault av.vault(my-project); // 获取某个 Vault 的客户端两类客户端职责不同AgentVault是实例级客户端管理多个 Vaultav.vault(name)返回的VaultClient是 Vault 级客户端管理凭据、服务规则、铸造会话源码定义分别在 client.ts 和 vault.ts。三步配齐保险库存密钥、定规则、铸会话配好一个可用的 Vault 只需三步。第 1 步存入凭据credentialsawait vault.credentials.set({ STRIPE_KEY: sk_live_abc, OPENAI_API_KEY: sk-..., });凭据键名必须是大写下划线格式SCREAMING_SNAKE_CASE同名键会被覆盖。第 2 步配置代理规则services每条规则声明「哪个主机 用什么认证方式 引用哪个凭据键」await vault.services!.set([ { name: stripe, host: api.stripe.com, auth: { type: bearer, token: STRIPE_KEY } }, { name: openai, host: api.openai.com, auth: { type: bearer, token: OPENAI_API_KEY } }, ]);除bearer外还支持basic、api-key、custom自定义 Header 模板和passthrough仅放行不注入完整类型见 services.ts。第 3 步铸造作用域会话sessions——本文核心// 铸造一个 1 小时有效的沙箱会话 const session await vault.sessions!.create({ ttlSeconds: 3600 });一次调用返回沙箱运行所需的一切类型定义见 sessions.ts字段说明token会话令牌嵌入代理 URL 中expiresAt过期时间ISO 8601containerConfig.env.HTTPS_PROXY已内嵌令牌的 MITM 代理地址containerConfig.env.NO_PROXY绕过代理的主机列表containerConfig.caCertificate根 CA 证书 PEM需挂载进容器⚠️ 如果服务端禁用了 MITM--mitm-port 0containerConfig会是null注意判空。一行生成全套代理环境变量buildProxyEnv 用法拿到containerConfig后还要告诉容器「CA 证书挂载在哪里」。buildProxyEnv 帮你一次性展开所有变量const certPath /etc/ssl/agent-vault-ca.pem; // 容器内的 CA 挂载路径 const env buildProxyEnv(session.containerConfig!, certPath);它会自动带上HTTPS_PROXY/HTTP_PROXY/NO_PROXY、NODE_USE_ENV_PROXY1Node 22.21 原生代理支持以及SSL_CERT_FILE、NODE_EXTRA_CA_CERTS、REQUESTS_CA_BUNDLE、CURL_CA_BUNDLE、GIT_SSL_CAINFO、DENO_CERT等指向certPath的 CA 信任变量——Node、Python、curl、Git、Deno 全都开箱即用。Daytona 沙箱集成实战步骤把env传给 Daytona 的create并把 CA 证书文件挂载到certPathimport { Daytona } from daytonaio/sdk; const daytona new Daytona(); const workspace await daytona.create({ image: my-agent-image, envVars: env, // buildProxyEnv 的产物 // 同时将 session.containerConfig.caCertificate 写入 certPath });官方端到端示例Daytona OpenAI Realtime仓库提供了一个完整示例 examples/daytona-openai-realtime/演示了「密钥对 Agent 完全不可见」的完整链路在 Daytona 沙箱内克隆并构建 Agent Vault可通过AGENT_VAULT_REPO环境变量指定仓库地址如https://gitcode.com/gh_mirrors/ag/agent-vault与AGENT_VAULT_REF指定分支启动带透明 MITM 代理的 Agent Vault 实例存入真实的OPENAI_API_KEY并配置api.openai.com的代理规则铸造 1 小时作用域会话启动嵌套的 Agent 容器用 iptables 把出站流量锁死为仅能访问 Agent Vault 的两个端口容器内只放一个假密钥dummy-agent-visible-keyAgent 通过 WebSocket 连接 OpenAI RealtimeAgent Vault 在 WebSocket 握手时注入真实密钥模型正常回复反向验证绕过代理直连外网 →BLOCKED✅预期输出run.mjsOPENAI_REALTIME_RESULT{ok:true,directEgress:BLOCKED,output:Im an AI assistant here to help you with anything you need.,status:completed}这意味着即使 Agent 代码被完全劫持攻击者拿到的也只是那个假密钥且无法绕过代理外联。E2B 接入最快配置方法E2B 的集成模式完全一致——本质就是「注入代理环境变量 挂载 CA 证书」import { Sandbox } from e2b; const session await vault.sessions!.create({ ttlSeconds: 3600 }); const env buildProxyEnv(session.containerConfig!, certPath); const sandbox await Sandbox.create(my-agent-image, { envs: env, // 通过 E2B 的卷/文件能力把 CA 证书写入 certPath });任何支持「环境变量 文件挂载」的沙箱运行时Docker、Firecracker、K8s Pod都适用这套模式。常见坑与错误处理❗ 非 2xx 控制面响应会抛出ApiError可据此区分 400参数错误/ 403权限不足/ 404Vault 不存在❗containerConfig为null说明服务端未启用 MITM容器流量将不会被代理❗ 会话 TTL 范围是300 秒604800 秒5 分钟7 天建议按沙箱生命周期设置用完即弃❗ 同一主机多个路径需要不同凭据时可用内联路径形式如slack.com/api/*并为规则指定不同的name更多细节见 SDK 官方 README 与快速上手文档 docs/quickstart/custom-agent.mdx、docs/guides/connect-custom-agent.mdx。相关模块路径SDK 客户端入口sdks/sdk-typescript/src/client.ts会话铸造与 buildProxyEnvsdks/sdk-typescript/src/resources/sessions.ts凭据管理sdks/sdk-typescript/src/resources/credentials.ts代理规则sdks/sdk-typescript/src/resources/services.tsDaytona 端到端示例examples/daytona-openai-realtime/run.mjsMITM 代理服务端实现internal/mitm/proxy.go小结用Agent Vault TypeScript SDK为沙箱 Agent 接入凭据代理只需三个动作存凭据 → 配代理规则 → 铸造带 TTL 的会话再把buildProxyEnv生成的环境变量和 CA 证书交给 Daytona/E2B 等沙箱运行时。真实密钥始终留在服务端Agent 只能看到临时、可过期、可回收的会话令牌——这正是运行不可信 Agent 代码时最需要的安全边界。【免费下载链接】agent-vaultA HTTP credential proxy and vault for AI agents like Claude Code, OpenClaw, Hermes, custom agents harnesses, and more.项目地址: https://gitcode.com/gh_mirrors/ag/agent-vault创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考