☁Zero Trust 上手指南
简体中文
Telegram Cloudflare 文档 ↗

模块 7b — 用 Access 保护 AI 与 MCP(MCP 服务器门户)

目标: 把你的员工(以及 AI 智能体)所使用的 AI 工具纳入零信任管控——将内部 MCP 服务器置于 Cloudflare Access 之后,并为用户提供一个受治理的 MCP 门户端点,配以精选工具、按用户身份验证与完整日志。

👤 谁来做 安全 / 平台团队
⏱️ 用时 约 40 分钟
🎯 完成后你将拥有 受 Access 管控的 MCP 服务器、供用户/智能体连接的单一 MCP 门户 URL,以及请求级日志
✋ 开始前 模块 2(身份)已完成;你 Cloudflare 账户中有一个域名(zone);至少一个要保护的 MCP 服务器 URL

🧭 什么是 MCP? 模型上下文协议(Model Context Protocol)是 AI 助手(Claude、ChatGPT 桌面版、Cursor 等)连接外部工具和数据的方式——文件系统、wiki、数据库、SaaS API。智能体能触及的每个 MCP 服务器都是通向你数据的一道新门。本模块在这些门前加上身份、策略与日志。

💡 这是对 模块 7 E 部分的扩展。模块 7 管控用户浏览 AI 应用;本模块管控AI 智能体连接工具。


为什么要保护 MCP

无管控时的风险 零信任带来的能力
任何员工/智能体都能连接任意 MCP 服务器 Access 策略决定谁(及哪些智能体)能用每个服务器
无法记录 AI 智能体调用了什么工具 对每次工具调用进行逐请求日志
敏感数据不受检查地流入 AI 工具 可选地将门户流量经 Gateway + DLP 路由
每个客户端都要配置数十个 MCP 端点 一个门户 URL 聚合它们,并提供精选工具
机器人/智能体无法完成浏览器登录 为非浏览器客户端提供 Managed OAuth 与 服务令牌

有两个构建块。请按顺序进行:

  1. 保护单个 MCP 服务器——把每个服务器纳入 Access(A–B 部分)。
  2. 创建 MCP 门户——把服务器聚合为一个受治理的端点(C–E 部分)。

A 部分 — 选择如何保护每个 MCP 服务器

Cloudflare Access 可以用几种方式为 MCP 服务器把关。按服务器选择:

方式 适合 由谁处理认证
自托管 MCP 服务器(推荐) 你运行的、经本账户 Cloudflare 提供服务的 MCP 服务器 Cloudflare Access(最简单——Access 替你处理)
客户自管的第三方 MCP 运行在你可控主机名上的第三方 MCP 代码 该第三方 MCP 服务器
SaaS 托管的第三方 MCP 提供商托管、且接受你 OAuth/OIDC 设置的 MCP 该 MCP 服务器,以 Access 作为 OIDC 提供商

⭐ 推荐: 对你可控的服务器,采用自托管方式并让 Access 处理认证。仅当提供商托管的服务器要求时,才用 SaaS/OIDC 方式。

让 Access 作为 OAuth 提供商(SaaS 托管)——简版

  1. 👉 Access controls → Applications → Create new application → SaaS application。
  2. ⌨️ 命名(如 MCP server),选择 OIDC,Add application。
  3. ⌨️ 在 Redirect URLs 填入 MCP 服务器的回调 URL(如 https://<mcp-host>/callback)。
  4. 📋 把 Client ID、Client secret、Token / Authorization / Key 端点复制到你 MCP 服务器的配置里。
  5. 👉 添加 Access 策略(谁可用)并选择你的身份提供商。保存。

⚠️ 仅对会校验 Access JWT(Cf-Access-Jwt-Assertion 头)的 MCP 服务器代码启用 Managed OAuth。对你无法修改的第三方代码,用该服务器自己的 OAuth 流程。


B 部分 — 把 MCP 服务器加入 Access

将每个服务器纳入集中管理(这也是把它放进门户的前提)。

  1. 👉 在控制台前往 Zero Trust → Access controls → AI controls。
  2. 👉 打开 MCP servers 选项卡 → Add an MCP server。
  3. ⌨️ 输入名称(如 Company Wiki MCP)。
  4. ⌨️ (可选) 设置自定义 Server ID。
  5. ⌨️ 在 HTTP URL 填入服务器完整 URL——如 Cloudflare 文档 MCP 服务器:https://docs.mcp.cloudflare.com/mcp。
  6. 👉 添加 Access 策略 以显示/隐藏该服务器:匹配 Allow 策略的用户将在门户中看到它,其他人看不到。
  7. 👉 点击 Save and connect server。
  8. 👉 若服务器支持 OAuth,被重定向时登录——该账户将成为此服务器的管理员凭据(门户可用它发起请求)。

📺 你会看到: Access 校验连接、拉取工具/提示/资源列表,服务器状态变为 Ready。

⚠️ 注意: 此处添加的 Access 策略控制的是在门户中的可见性。被阻止的用户仍可能经其直接 URL 触及服务器——要真正强制认证,请让 Access 作为服务器的 OAuth 提供商(A 部分)。

✅ 检查点: 你的 MCP 服务器在 MCP servers 选项卡中显示 Ready。


C 部分 — 创建一个 MCP 服务器门户

门户为你的用户和智能体提供一个端点,聚合多个 MCP 服务器,且只暴露你选择的工具。

  1. 👉 Zero Trust → Access controls → AI controls → Add MCP server portal。
  2. ⌨️ 输入名称(如 Engineering AI Tools)。
  3. 👉 在 Custom domain 下选择一个域名(须为你账户中的活跃 zone);可选设置子域(如 mcp)。
  4. 👉 Add MCP servers——选择 B 部分中你想放进此门户的服务器。
  5. 👉 (可选) 在 MCP servers 下配置门户暴露的工具与提示——只暴露此受众需要的内容。
  6. 👉 逐服务器设置 Require user auth:
    • Enabled(默认)——每个用户用自己的凭据向该服务器认证(最小权限,最佳审计)。
    • Disabled——已连接用户经其管理员凭据访问该服务器(谨慎使用)。
  7. 👉 添加 Access 策略,界定谁可连接该门户。
  8. 👉 点击 Add an MCP server portal。

📺 用户现在用任意 MCP 客户端连接 https://<subdomain>.<domain>/mcp。

⚠️ 策略限制: 对通过门户授权的服务器,不强制独立 MFA、用途说明与临时认证。若某服务器需要强化 MFA,请在该服务器自己的 Access 应用上强制。

✅ 检查点: 门户出现在 AI controls 中,含你选定的服务器,且门户 URL 可解析。


D 部分 — 精选工具、提示与别名

暴露的无关上下文越少,AI 的回答越好(也越安全)。

  • 👉 按门户选择特定工具/提示(C 部分第 5 步),让用户获得聚焦的工具集。
  • 👉 用别名重命名: 在门户或服务器层面编辑工具/提示的名称与描述——无需改动上游服务器。清晰的名称有助于人和 AI 智能体挑对工具。
  • 👉 优化上下文: 门户支持查询参数选项,用于精简或隐藏工具定义,降低上下文窗口占用。
  • 💡 Code Mode(默认开启):把所有工具收拢为单个 code 工具——智能体编写调用类型化方法的 JavaScript,在隔离的 Cloudflare Worker 中运行。无论加多少工具,上下文占用保持恒定。

E 部分 — 连接客户端与智能体(Managed OAuth + 服务令牌)

人类用户 / 交互式 AI 客户端 —— Managed OAuth

新门户默认开启 Managed OAuth。它让非浏览器 MCP 客户端(Claude Desktop、Cursor、CLI、SDK)通过标准 OAuth 2.0 授权码流程认证:客户端收到带 WWW-Authenticate 头的 401,打开浏览器到你的 Access 登录页,然后获得令牌。策略不变,只是换了传输方式。

  • 👉 确认/启用:门户 → ⋯ → Edit → Advanced settings → Managed OAuth → 开启 → Save。

机器人 / 自主智能体 —— 服务令牌

对无法进行浏览器登录的机器对机器智能体:

  1. 👉 创建一个 Access 服务令牌(Access → Service Auth → Service Tokens)。
  2. 👉 在门户的 Access 应用以及每个已链接服务器的应用上,添加匹配该令牌的 Service Auth 策略。
  3. 👉 为这些服务器关闭 Require user auth(门户改用管理员凭据)。
  4. 👉 智能体用 CF-Access-Client-Id 与 CF-Access-Client-Secret 头连接,即可看到它被授权的每个服务器的工具。

⚠️ 仍要求按用户 OAuth 的服务器不纳入服务令牌会话(令牌无法完成按用户授权)。

✅ 检查点: MCP 客户端连接到 https://<subdomain>.<domain>/mcp、经 Access 认证,并只看到精选工具。


F 部分 — 可观测性与 DLP

  1. 👉 Access 日志记录通过门户发起的每一次工具请求——前往 Logs → Access 查看谁/什么调用了哪个工具。
  2. 👉 (可选,强大) 将门户流量经 Gateway 路由,以获得更丰富的 HTTP 日志与 DLP 扫描——从而用 模块 6 中相同的 DLP 配置文件检查流入/流出 MCP 工具的敏感数据。

✅ 检查点: 工具调用出现在 Access 日志中;若经 Gateway 路由,也会连同任何 DLP 命中出现在 Gateway HTTP 日志中。


✅ 模块 7b 完成!

你现在拥有:

  • ✅ 纳入 Access 管控的 MCP 服务器(Access 可选作为 OAuth 提供商)
  • ✅ 聚合精选工具的单一 MCP 门户端点
  • ✅ 按用户身份(Require user auth)与面向机器人的服务令牌访问
  • ✅ 面向非浏览器 AI 客户端的 Managed OAuth
  • ✅ 请求级日志,可选叠加 Gateway + DLP

它如何融入更大的 AI 蓝图

层级 模块 管控对象
用户浏览 AI 网页应用 7 影子 AI 发现、允许但设护栏、提示词 DLP
AI 智能体连接工具 7b(本篇) Access 之后的 MCP 服务器 + 门户
浏览器中的高风险 AI 使用 5c 隔离 + 禁用粘贴/上传
敏感数据检测 6 DLP 配置文件(含 AI 提示词主题)

快速排障

问题 解决办法
菜单里没有 AI controls 确认你的套餐/授权,且你是 Zero Trust 管理员
MCP 服务器卡住、未 Ready 复查 HTTP URL;若服务器要求,完成 OAuth 登录(B 部分)
被阻止的用户仍能触及服务器 加入 Access 只控制门户可见性——让 Access 作为服务器的 OAuth 提供商 才能强制认证(A 部分)
门户 URL 无法创建 自定义域名须为你账户中的活跃 zone(C 部分)
AI 客户端无法认证 确保门户已开启 Managed OAuth(E 部分)
机器人/智能体连不上 使用服务令牌 + 在门户和服务器上配 Service Auth 策略,并关闭 Require user auth(E 部分)
强化 MFA 不弹出 通过门户不强制 MFA/用途说明——请在服务器自己的 Access 应用上强制(C 部分)

👉 下一步:模块 8 — Cloudflare WAN

把整个办公室和数据中心接入 Cloudflare。