企业想用自主 Agent,但不想把执行环境或内部系统暴露到公网——这是过去一年里最常被提起的矛盾。Anthropic 这次给出的答案是两条新能力:自托管沙箱和 MCP 隧道,都属于 Claude Managed Agents 平台的扩展。核心思路很简单:Agent 可以跑,但边界不能破。
企业部署 Agent 的安全困境
自主 Agent 要干活,就得连数据库、读内部文档、调用私有 API。传统做法要么把这些资源开个公网口子,要么把 Agent 整个搬到云上跑——两种方案对安全团队来说都像在防火墙上凿洞。
更麻烦的是执行环境。Agent 生成代码、执行脚本,需要一个运行沙箱。如果沙箱在 Anthropic 的基础设施上,企业合规团队往往直接否决:代码和数据不能离开我们的安全边界。
MCP 隧道和自托管沙箱分别解决这两个问题。
MCP 隧道:反向打通,而非正面暴露
MCP(Model Context Protocol)是 Anthropic 推出的开放协议,让 LLM 通过标准化接口连接外部工具和数据源。之前用 MCP,你得把 MCP Server 部署到 Agent 能直接访问的地方——对内网服务来说,这意味着要么暴露端口,要么搞 VPN。
MCP 隧道换了个方向:内网里的 MCP Server 不需要主动暴露任何端口,而是通过隧道把连接"推"出去到 Anthropic 的 Managed Agent 平台。Agent 发起的请求顺着隧道回到内网,响应再顺着隧道送回去。整个过程对内网基础设施来说,只有一条出站连接,没有入站端口开放。
这对安全审计很关键——你只需要在防火墙上批准一条出站规则,而不是维护一堆入站白名单。
自托管沙箱:代码在你自己的院子里跑
自托管沙箱解决的是另一个问题:Agent 生成的代码在哪里执行?
以前 Managed Agents 的沙箱在 Anthropic 侧运行。现在企业可以在自己的 Kubernetes 集群或裸金属服务器上部署沙箱运行时。Agent 仍然由 Anthropic 平台调度,但实际执行发生在企业可控的基础设施内。日志、审计、网络策略全都留在本地。
两个能力组合起来,整条链路就不出墙了:Agent 调度在云端,执行在你机房,数据访问通过隧道回到内网。
实践:搭建一条 MCP 隧道连接内网 PostgreSQL
下面用一个最小可跑示例演示如何把内网 PostgreSQL 通过 MCP 隧道暴露给 Claude Managed Agent,同时保持数据库不出公网。
前提:你有一个内网 PostgreSQL(假设地址
pg.internal.corp:5432),已安装 Anthropic MCP CLI 工具(mcp-cli),且有 Claude Managed Agents 平台的企业账号。
1. 编写 MCP Server 配置
创建 mcp-pg-server.json:
{
"mcpServers": {
"internal-postgres": {
"command": "mcp-server-postgres",
"args": [],
"env": {
"PG_HOST": "pg.internal.corp",
"PG_PORT": "5432",
"PG_DATABASE": "orders",
"PG_USER": "agent_reader",
"PG_PASSWORD": "${PG_PASSWORD}"
}
}
}
}
mcp-server-postgres 是 Anthropic 提供的官方 MCP Server 之一,封装了 PostgreSQL 的查询能力为 MCP 工具接口。密码通过环境变量注入,不要硬编码。
2. 启动隧道
# 设置密码环境变量
export PG_PASSWORD="your-secure-password"
# 启动 MCP 隧道——建立出站连接到 Anthropic 平台
mcp-cli tunnel start \
--config mcp-pg-server.json \
--tunnel-name "corp-pg-tunnel" \
--region us-east-1
这条命令做的事:
- 在本地启动 MCP Server 进程,连接到内网 PostgreSQL
- 向 Anthropic Managed Agents 平台建立一条出站 WebSocket 长连接(隧道)
- 注册工具 internal-postgres,让平台侧的 Agent 可以发现并调用
关键点:只有出站连接。你的防火墙只需要允许到 Anthropic 隧道端点的出站流量(通常是 tunnel.mcp.anthropic.com:443),不需要开任何入站端口。
3. 在 Managed Agent 中使用
Agent 的任务配置中引用隧道名即可:
agent:
name: order-query-agent
model: claude-sonnet-4-20250514
tunnel_refs:
- corp-pg-tunnel
prompt: |
你是订单查询助手。用户会问订单状态、金额、发货信息。
使用 internal-postgres 工具查询 orders 表。
只返回事实数据,不要猜测。
sandbox: self-hosted # 指定使用自托管沙箱
tunnel_refs 告诉 Agent 通过哪条隧道访问工具。sandbox: self-hosted 确保执行环境在企业内部。
4. 验证隧道状态
# 查看隧道是否存活
mcp-cli tunnel status corp-pg-tunnel
# 输出大致如下:
# Tunnel: corp-pg-tunnel
# Status: active
# Uptime: 2h 15m
# Connected servers: 1 (internal-postgres)
# Last heartbeat: 3s ago
如果隧道断开,Agent 会收到工具不可用的信号,不会卡死或尝试直连。
落地前的几件事
| 检查项 | 说明 |
|---|---|
| 出站防火墙规则 | 只需开放到 Anthropic 隧道端点的 443 端口出站,拒绝所有入站 |
| MCP Server 权限 | 给 Agent 用的数据库账号只读、只限必要表,不要用超级用户 |
| 隧道心跳监控 | 隧道断开时 Agent 工具调用会失败,需要告警和自动重连机制 |
| 自托管沙箱资源 | 预估 Agent 并发执行量,给沙箱集群留够 CPU/内存,避免排队 |
| 审计日志 | MCP Server 和沙箱的日志都要留在本地,定期导出合规报告 |
| 隧道凭证轮换 | 隧道认证 token 设定过期时间,纳入企业密钥轮换流程 |
一个风险点:隧道虽然只有出站连接,但逻辑上 Agent 已经能操作内网资源。权限边界不在网络层,而在 MCP Server 提供的工具定义里。如果 MCP Server 暴露了 DELETE 操作,Agent 就可能删数据——所以工具接口的设计本身就是安全边界,要像设计 API 权限一样认真。
MCP 隧道和自托管沙箱不是万能方案,但它们把"Agent 要进内网"这个需求从"开洞"变成了"拉线"。对安全团队来说,这是从否决到可以谈的区别。