如何为云 AI 智能体安全部署 MCP 服务器
模型上下文协议(MCP)让 AI 智能体更容易连接业务工具、数据存储和服务。这种便利性改变了安全边界。一次聊天请求现在可以通过工具调用访问文件系统、CRM、工单队列、云 API 或部署流水线。如果连接范围过宽,一条错误的指令就可能变成真实的破坏性操作。
实际目标不是让每个智能体都毫无作为。一个无法执行操作的智能体毫无用处。真正的目标是限制每个连接能做什么,使敏感操作必须经过深思熟虑,并留下足够的证据以便事后追溯。本指南为在云 AI 智能体后端运行 MCP 服务器的团队提供了一套部署模式。
从信任边界开始
MCP 服务器位于面向模型的客户端和真实系统之间。应将其视为应用网关,而非简单的适配器。它负责解析请求、暴露工具、处理凭据,并返回模型可能用于下一次决策的数据。这些步骤中的每一步都需要相应的控制措施。
在编写策略之前先划定边界。列出客户端、MCP 服务器、身份提供商、下游 API、密钥存储、日志、审批服务以及执行任何操作的队列或工作进程。标记哪些连接跨越了账户、网络或租户边界。这张简单的图表通常能暴露出第一个问题:共享凭据、直接互联网访问,或同一台服务器为拥有相同权限的不同团队提供服务。
《MCP 授权规范》采用了适用于 HTTP 传输的成熟 OAuth 模式。请遵循当前规范,而不是自行发明自定义令牌交换机制。身份验证证明是谁在调用,而授权仍需决定该调用者能做什么。
为每个工作负载使用独立身份
不要给多个智能体共享同一个 API 密钥。应为每个部署的工作负载分配独立的服务身份,然后将该身份绑定到狭窄的工具集上。例如,客服智能体可能只能读取账户状态和创建工单,绝不应继承财务团队的退款权限,即使两者都使用同一个 CRM。
临时凭证比静态密钥更容易管控。将刷新令牌和下游凭据保存在密钥管理服务中,切勿放在提示词、工具描述、环境变量转储或模型可见的日志里。按周期轮换凭据,并在疑似泄露时立即更换。如果一台服务器服务于多个租户,必须从可信的身份上下文中获取租户标识符,而不是依赖自由格式的模型输入。

围绕最小能力设计工具
工具设计是让最小权限原则落地的关键。除非环境经过重度沙箱化,否则应避免使用如 run_command、call_api 或 execute_sql 这类通用工具。优先使用带有类型化字段的细粒度操作:如 get_order_status、create_support_ticket 或 restart_staging_service。服务器可以在请求到达下游系统之前对其进行验证。
将读取和写入操作分开。一个检索记录的工具不应静默地更新它。对于写入操作,应对资源类型、目标地址、文件路径和允许的状态转换设置白名单。对批量大小、请求频率、数据量和执行时间设置硬性限制。这些限制既能防范人为失误,也能抵御恶意指令。
| 控制项 | 薄弱实现 | 更安全实现 | 验证要点 |
|---|---|---|---|
| 身份 | 单一共享密钥 | 每个智能体工作负载独立身份 | 凭据无法访问其他工作负载 |
| 工具范围 | 通用命令执行 | 小型类型化操作 | 未知字段和操作将被拒绝 |
| 写入权限 | 立即执行 | 敏感操作需经策略检查与审批 | 审批人能看到确切的操作和目标 |
| 网络 | 开放出站访问 | 通过出站代理的目标白名单 | 未列入主机的目标无法访问 |
| 日志记录 | 完整提示词与密钥 | 脱敏的结构化事件 | 事件支持调查且不暴露凭据 |
不要盲目信任工具输出
提示词注入不一定来自用户。它可能出现在文档、网页、问题评论、电子邮件、数据库字段或工具响应中。除非底层系统将数据与权限严格分离,否则模型可能会将不受信任的内容视为新指令。
在智能体编排层将工具结果标记为不受信任的数据。不要让返回的文本授予权限、更改策略、泄露密钥或选择新的工具端点。根据架构验证结构化响应,限制其大小,并移除下一组件不需要的活跃内容。对于检索类工具,保留源 URL 或记录 ID,以便审核人员能将声明追溯至原始出处。
这也是为什么人工审批必须展示具体拟议操作,而不能只显示“继续?”之类的模糊提示。有效的审批界面应包含工具名称、目标、变更字段、副作用和过期时间。智能体在审批后不应再修改该操作。
在产生副作用前增加策略网关
在模型的 tool request 和执行器之间放置一个确定性的策略检查节点。该检查应基于可信属性:工作负载身份、用户角色、租户、环境、工具名称、资源、请求操作和当前风险等级。模型可以解释为何需要执行某项操作,但其解释不应作为授权依据。
低风险读取可自动运行。可逆的更改可在小范围内执行。外部消息、生产环境变更、删除操作、支付、凭据更新和批量导出通常需要更严格的审批。当所需上下文缺失时,应拒绝请求。采用“失败关闭”(fail-closed)策略,避免因临时身份失效或策略服务中断而导致访问控制漏洞。

隔离运行时环境
假设工具实现最终可能会出现漏洞。以非 root 账户运行 MCP 服务器,配置只读基础文件系统、有限的临时存储空间,并禁止主机 Socket 访问。实施 CPU、内存、进程和请求限制。如果工具需要代码执行,应将每个作业隔离在具有固定超时且无继承凭据的临时沙箱中。
严格控制出站流量。许多安全事件之所以恶化,是因为被攻陷的进程可以调用任意互联网主机。将流量路由至出站代理,仅允许已知的 API 目标,通过受控服务解析 DNS,并拦截云元数据端点。隔离开发、测试和生产服务器,防止测试智能体发现生产环境的凭据或工具。
记录决策但不记录密钥
为每次工具请求记录结构化事件:时间戳、请求 ID、工作负载身份、发起用户或任务、服务器与工具版本、工具名称、标准化目标、策略结果、审批引用、执行结果、延迟时间和错误类别。通过单一关联 ID 将智能体、网关、MCP 服务器和下游 API 的事件串联起来。
切勿将凭据、授权头、原始令牌或无限制的提示词内容转储到日志中。在存储前对敏感字段进行脱敏,并限制谁可以查询审计轨迹。根据调查和合规需求定义保留期限。测试确保操作员能够仅从事件记录中重建操作过程,而无需读取密钥。
NIST 的《生成式 AI 配置文件》为生成式 AI 系统提供了更广泛的风险管理框架。《OWASP 智能体 AI 威胁与缓解措施》资料在将威胁场景转化为测试用例时非常有用。但这些均不能替代针对特定系统的威胁建模。
测试故障路径
正常的演示只能证明主流程畅通。安全测试应尝试突破边界。发送格式错误的工具参数、超大内容、编码的路径遍历攻击、意外重定向、过期令牌、跨租户标识符、工具结果内的提示词注入,以及审批后试图篡改的请求。确认服务器能拒绝每种情况并生成有用的审计事件。
运行撤销演练。禁用一个工作负载身份,测量访问权限在缓存和下游服务中停止的速度。模拟策略服务中断,确认敏感写入操作会失败关闭。从干净的服务器镜像恢复。这些演练能在事故发生前暴露隐藏的依赖关系。
实用的部署序列
- 盘点所有 MCP 服务器、暴露的工具、下游系统、凭据及负责人。
- 拆分共享服务器或身份,确保不同团队、租户或环境拥有独立的权限。
- 用带类型化的操作和明确限制替换宽泛的工具。
- 在写入操作前增加确定性授权和审批规则。
- 沙箱化执行环境并限制出站网络访问。
- 引入带关联 ID 的结构化脱敏审计事件。
- 在生产环境开放访问前,测试注入、隔离、撤销及服务中断场景。
- 定期审查权限和未使用的工具。
从一个有明确负责人且操作可逆的工作流开始。统计被拒请求数、审批频率、工具错误率及节省的时间。如果员工 routinely 未经阅读就批准请求,应在扩大访问权限前缩小工作流范围或完善审批详情。
常见问题解答
MCP 会让 AI 智能体变得不安全吗?
MCP 本身不会自动导致智能体不安全。它为智能体提供了一种一致的工具访问方式,这使得访问设计变得更加重要。安全性取决于服务器周围的身份管理、权限控制、工具设计、隔离措施、验证机制和监控体系。
是否每个工具调用都需要人工审批?
不需要。对常规读取操作要求审批会导致疲劳。应将审批保留给具有实质性副作用或高数据敏感性的操作。利用策略在狭窄限制内自动化低风险请求。
单个 MCP 服务器能支持多个租户吗?
可以,但租户上下文必须来自可信的身份数据,并在每次操作中强制执行。当租户需要不同的网络路径、凭据、保留规则或合规控制时,使用独立的服务器或工作进程池会更安全。
MCP 凭据应该存储在哪里?
将其存储在托管的密钥管理系统中,并仅在需要的组件中注入。切勿将密钥放入提示词、工具描述、源代码仓库或模型可见的日志中。优先使用短期令牌而非静态密钥。
MCP 审计日志应包含什么内容?
捕获调用者身份、工具、标准化目标、策略决策、审批引用、结果、时间戳和关联 ID。在事件进入存储前,对凭据和敏感载荷字段进行脱敏。
构建可控范围的有用智能体
安全的 MCP 部署不是单一产品或打勾清单。它是一系列小型控制的链条:狭窄的身份、受限的工具、确定性的策略、运行时隔离、谨慎的审批和有用的证据。如果某一层失效,下一层仍应限制损害范围。
SmaugBrain 帮助团队运行具有明确工具和运营控制的云 AI 智能体工作流。探索 SmaugBrain,规划一种既能执行操作又无需无差别全系统访问权限的智能体工作流。