☁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。