模块 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 与 服务令牌 |
有两个构建块。请按顺序进行:
- 保护单个 MCP 服务器——把每个服务器纳入 Access(A–B 部分)。
- 创建 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 托管)——简版
- 👉 Access controls → Applications → Create new application → SaaS application。
- ⌨️ 命名(如
MCP server),选择 OIDC,Add application。 - ⌨️ 在 Redirect URLs 填入 MCP 服务器的回调 URL(如
https://<mcp-host>/callback)。 - 📋 把 Client ID、Client secret、Token / Authorization / Key 端点复制到你 MCP 服务器的配置里。
- 👉 添加 Access 策略(谁可用)并选择你的身份提供商。保存。
⚠️ 仅对会校验 Access JWT(Cf-Access-Jwt-Assertion 头)的 MCP 服务器代码启用 Managed OAuth。对你无法修改的第三方代码,用该服务器自己的 OAuth 流程。
B 部分 — 把 MCP 服务器加入 Access
将每个服务器纳入集中管理(这也是把它放进门户的前提)。
- 👉 在控制台前往 Zero Trust → Access controls → AI controls。
- 👉 打开 MCP servers 选项卡 → Add an MCP server。
- ⌨️ 输入名称(如
Company Wiki MCP)。 - ⌨️ (可选) 设置自定义 Server ID。
- ⌨️ 在 HTTP URL 填入服务器完整 URL——如 Cloudflare 文档 MCP 服务器:
https://docs.mcp.cloudflare.com/mcp。 - 👉 添加 Access 策略 以显示/隐藏该服务器:匹配 Allow 策略的用户将在门户中看到它,其他人看不到。
- 👉 点击 Save and connect server。
- 👉 若服务器支持 OAuth,被重定向时登录——该账户将成为此服务器的管理员凭据(门户可用它发起请求)。
📺 你会看到: Access 校验连接、拉取工具/提示/资源列表,服务器状态变为 Ready。
⚠️ 注意: 此处添加的 Access 策略控制的是在门户中的可见性。被阻止的用户仍可能经其直接 URL 触及服务器——要真正强制认证,请让 Access 作为服务器的 OAuth 提供商(A 部分)。
✅ 检查点: 你的 MCP 服务器在 MCP servers 选项卡中显示 Ready。
C 部分 — 创建一个 MCP 服务器门户
门户为你的用户和智能体提供一个端点,聚合多个 MCP 服务器,且只暴露你选择的工具。
- 👉 Zero Trust → Access controls → AI controls → Add MCP server portal。
- ⌨️ 输入名称(如
Engineering AI Tools)。 - 👉 在 Custom domain 下选择一个域名(须为你账户中的活跃 zone);可选设置子域(如
mcp)。 - 👉 Add MCP servers——选择 B 部分中你想放进此门户的服务器。
- 👉 (可选) 在 MCP servers 下配置门户暴露的工具与提示——只暴露此受众需要的内容。
- 👉 逐服务器设置 Require user auth:
- Enabled(默认)——每个用户用自己的凭据向该服务器认证(最小权限,最佳审计)。
- Disabled——已连接用户经其管理员凭据访问该服务器(谨慎使用)。
- 👉 添加 Access 策略,界定谁可连接该门户。
- 👉 点击 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。
机器人 / 自主智能体 —— 服务令牌
对无法进行浏览器登录的机器对机器智能体:
- 👉 创建一个 Access 服务令牌(Access → Service Auth → Service Tokens)。
- 👉 在门户的 Access 应用以及每个已链接服务器的应用上,添加匹配该令牌的 Service Auth 策略。
- 👉 为这些服务器关闭 Require user auth(门户改用管理员凭据)。
- 👉 智能体用
CF-Access-Client-Id与CF-Access-Client-Secret头连接,即可看到它被授权的每个服务器的工具。
⚠️ 仍要求按用户 OAuth 的服务器不纳入服务令牌会话(令牌无法完成按用户授权)。
✅ 检查点: MCP 客户端连接到 https://<subdomain>.<domain>/mcp、经 Access 认证,并只看到精选工具。
F 部分 — 可观测性与 DLP
- 👉 Access 日志记录通过门户发起的每一次工具请求——前往 Logs → Access 查看谁/什么调用了哪个工具。
- 👉 (可选,强大) 将门户流量经 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。