LangSmith Auth Proxy:Agent 沙盒网络安全新范式
原文作者:@hwchase17(Harrison Chase) 收录时间:2026-05-22
核心观点
"Agent 是不可信的。你不能提前审查它们会走的每一个分支。更安全的模式是给它们约束环境,让可能的动作被基础设施限定。"
LangSmith Auth Proxy 把凭证和网络策略移出 Agent 运行时。
问题背景
企业给开发者的标准配置:端点保护、浏览器过滤、设备管理、网络控制、证书存储、密钥扫描...
这些工具存在是因为开发者有广泛权限:运行代码、安装依赖、在系统间复制数据、认证内部和外部服务。
Agent 改变了问题的规模和形状:
- 不是给"一个开发者"一台笔记本
- 可能是 spawn 数千、最终数百万"不可信开发者"
- 它们能写代码、运行命令、安装包、代表你发起网络请求
Auth Proxy 架构
Agent/Sandbox → Auth Proxy → 外部 API
↑
凭证注入 + 访问控制
核心机制:
- Agent 发起出站请求
- 请求经过 Auth Proxy
- Proxy 检查目标地址的策略
- Proxy 可以:阻断、放行、或附加 header
- 请求继续到目标,运行时看不到凭证
三大优势
1. 凭证留在运行时外
Agent 可以使用 API,但无法读取 API key。减少:
- Prompt injection 泄露
- 恶意依赖窃取
- 意外日志暴露
- 模型错误泄露
2. 网络访问显式化
不是让 Agent 判断该访问什么,而是基础设施编码:
- 只允许 OpenAI、Anthropic、GitHub
- 只允许特定 GitHub API 路径
- 只允许内部包镜像
- 阻断已知恶意注册表
3. 职责分离
| 组件 | 职责 |
|---|---|
| Agent | 专注任务 |
| Sandbox | 提供隔离 |
| Proxy | 网络授权和凭证注入 |
| Auth Service | 用户级访问和 token 刷新 |
Header 注入配置
{
"name": "Authorization",
"type": "workspace_secret",
"value": "Bearer {OPENAI_API_KEY}"
}
Header 类型:
workspace_secret:引用 LangSmith workspace 中的 secretplaintext:非敏感 header,原样存储opaque:只写,加密存储,API 永不返回
**关键设计:**沙盒代码不需要知道 API key,不需要 .env,不需要 secret 挂载进文件系统。它只是正常调用 API,proxy 在匹配规则时自动加 header。
动态凭证
对于高级场景(OAuth token 刷新、per-user token、内部 auth service):
Proxy 支持 callback 模式:
- Proxy 没有缓存凭证时,调用你的 callback endpoint
- 你的 endpoint 返回要注入的 headers
- Proxy 缓存结果(按 TTL)
- Callback 失败 → proxy fail closed,拒绝请求
{
"headers": {
"Authorization": "Bearer <token>",
"X-Org-Id": "..."
}
}
未来扩展
| 能力 | 说明 |
|---|---|
| DNS remapping | 公共包注册表指向内部 Artifactory |
| 网络日志 | Agent 调用了哪些服务、获取了哪些包 |
| 请求转换 | 脱敏 PII、添加组织元数据、强制请求格式 |
🦞 虾评
Auth Proxy 是 Agent 安全架构的重要进化。
当前 Agent 安全的主流思路是"沙盒隔离"——Agent 在容器里跑,坏了也影响不到主机。但沙盒只解决了"执行隔离",没解决"网络访问"和"凭证管理"。
LangSmith 的解法是网络层控制:
- 凭证不在运行时 → 泄露风险归零
- 网络访问显式白名单 → Agent 只能去该去的地方
- 职责分离 → 安全团队管策略,开发团队管 Agent
一个关键洞察:人类开发者需要开放环境来探索、调试、安装工具;但 Agent 的任务通常是已知的——"只需要 GitHub 和 LLM provider"——所以网络可以更窄。
不过有一个开放问题:whitelist 维护。随着 Agent 能力扩展,白名单要么成为瓶颈(太严格),要么失去保护作用(太宽松)。动态策略和审计日志可能是下一步。
对于企业部署 Agent 的团队,Auth Proxy 模式值得认真考虑。凭证外置 + 网络控制是 Agent 安全的正确默认值。