模組 4 — ZTNA:用 Access 釋出私有應用
目標: 讓一個內部應用可從任何地方安全訪問——無需 VPN、無需開放任何入站防火牆埠——並精確控制誰能訪問。
| 👤 誰來做 | 應用負責人 + 安全團隊 |
| ⏱️ 用時 | 約 60 分鐘 |
| 🎯 完成後你將擁有 | 一個釋出在真實網址上的私有應用,僅你放行的人可訪問 |
| ✋ 開始前 | 模組 1–3 已完成;一個可測試的私有 Web 應用(如內部 wiki、Grafana、開發工具),執行在你可控之處;一臺能訪問該應用的伺服器/虛擬機器 |
🧭 原理: 你在應用旁執行一個名為
cloudflared的小程式。它向 Cloudflare 建立一條安全的僅出站連線(“Tunnel”)——因此你永遠不必把應用暴露到網際網路。然後 Access 在其前面加上一道登入校驗。
流程:(A) 建立 Tunnel →(B) 連線應用 →(C) 新增 Access 應用 →(D) 編寫策略 →(E) 測試 →(F) 構建可複用的組。
A 部分 — 建立 Tunnel
- 👉 Zero Trust → Networks → Tunnels。
- 👉 點選 Create a tunnel。
- 👉 選擇 Cloudflared → Next。
- ⌨️ 按位置命名,如
datacenter-1→ Save tunnel。
📺 你會看到: 一個 “Install and run a connector” 頁面,含各作業系統的命令,且已內建一長串安裝令牌。
- 👉 選擇你伺服器作業系統對應的選項卡(Windows / macOS / Debian / Red Hat / Docker)。
- 👉 複製顯示的命令——它已包含你的唯一令牌。
⚠️ 注意: 該命令含有一個秘密令牌。像對待密碼一樣對待它;不要貼上進聊天或工單。
B 部分 — 連線你的應用
B1 步 — 在伺服器上執行聯結器
- 👉 登入到能訪問你應用的伺服器/虛擬機器。
- 👉 貼上並執行你複製的命令。例如在 Debian/Ubuntu 上大致如下:
curl -L https://pkg.cloudflare.com/install.sh | sudo bash # 若尚未安裝 cloudflared sudo cloudflared service install eyJhIjoiZXhhbXBsZS... # 你的令牌 - 📺 回到控制台,隧道的 Connector status 變為 Connected / Healthy(約 30 秒)。
✅ 檢查點: 控制台顯示你的聯結器為 Healthy。點選 Next。
B2 步 — 告訴 Cloudflare 你的應用在哪(公共主機名)
現在把一個公共網址對映到你的內部應用。
- 📺 你在 Route tunnel / Public Hostnames 步驟。
- 👉 點選 Add a public hostname 並填寫:
欄位 示例 含義 Subdomain wiki使用者將輸入的名字 Domain yourcompany.com你 Cloudflare 賬戶裡的域名 Type HTTPcloudflared在本地如何訪問你的應用URL localhost:3000應用在該伺服器上執行的位置 - 👉 點選 Save tunnel。
📺 你會看到: wiki.yourcompany.com 現已釋出,並被代理到你的內部應用。
💡 Cloudflare 裡還沒有域名? 你需要新增一個域名(zone)才能用自有主機名做自託管 Access 應用。請管理員新增域名,或用你已在 Cloudflare 管理的域名。
✅ 檢查點: 訪問 https://wiki.yourcompany.com——你能開啟你的應用(此刻它對任何人開放;下一部分會鎖定它)。
C 部分 — 新增一個 Access 應用
這會在 wiki.yourcompany.com 前面加上登入校驗。
- 👉 Zero Trust → Access controls → Applications。
- 👉 點選 Create new application(新增應用)。
- 👉 選擇 Self-hosted and private。
📺 你會看到: 一個應用配置頁面。
- ⌨️ 應用名稱:
Internal Wiki。 - 👉 點選 Add public hostname,填入你剛釋出的相同主機名:子域
wiki,域名yourcompany.com。 - 👉 將 Session Duration 設為
24h(敏感應用用更短,如1h)。 - 👉 在認證下選擇模組 2 的身份提供商。
- 💡 若只有一個 IdP,開啟 Apply instant authentication 讓使用者跳過選擇介面。
- 💡 開啟 Authenticate with Cloudflare One Client,讓已登入的 WARP 使用者無縫進入。
- 先別點 Create——先在 D 部分新增策略(嚮導支援內聯新增),或先點 Create 再隨即新增策略。兩者均可。
D 部分 — 編寫訪問策略(誰被允許)
-
👉 在應用中進入 Policies 區 → Add a policy(或 Create new policy)。
-
⌨️ 策略名稱:
Allow — Employees on healthy devices。 -
👉 Action: Allow。
-
👉 構建規則:
規則型別 選擇器 運算子 取值 Include Emails ending in — @yourcompany.comRequire Device Posture in Disk encrypted(來自模組 3)(若模組 2 中你的 IdP 群組測試正常,可改用 Include → IdP Groups →
Engineering以獲得更嚴格控制。) -
👉 Save 策略,然後 Save/Create 應用。
💡 最佳實踐——加一道預設拒絕網: 再建一條更低優先順序的策略,名為 Block — Everyone,Action = Block、Include = Everyone。由於策略自上而下讀取,Allow 會先匹配到你的人,其餘人則命中 Block。
⚠️ 注意: 敏感應用絕不要用 Bypass 動作——它會徹底移除登入校驗。
E 部分 — 測試(最有成就感的部分)
測試 1 — 被允許的使用者
- 👉 在你的試點裝置上(以被允許的員工身份登入),開啟
https://wiki.yourcompany.com。 - 📺 你被送到企業登入(或因即時認證 + WARP 會話而直接進入)。登入後,應用載入。✅
測試 2 — 被阻止的使用者
- 👉 在無痕視窗用未被允許的人(或個人郵箱)登入同一網址。
- 📺 你看到 Cloudflare 的 “You don't have access” 攔截頁。✅
測試 3 — 檢視日誌
- 👉 Zero Trust → Logs → Access(或 Access → Logs)。
- 📺 你能看到兩次嘗試:一次 Allowed、一次 Blocked,各自帶使用者郵箱和決策所依據的策略。
✅ 檢查點: 對的人進得來、錯的人被擋住,且你能在日誌裡看到。你剛剛替代了這個應用的 VPN。 🎉
F 部分 — 構建可複用的組(避免重複勞動)
現在你的規則是寫在一個應用裡的。當你新增第 2、3、10 個應用時,你不會想重新鍵入它們。先一次性構建一個可複用的 Access 組。
- 👉 Zero Trust → Access controls → Policies → Groups(或 Reusable components → Groups)。
- 👉 點選 Add a group。
- ⌨️ 名稱:
Secure employees。 - 👉 一次性新增規則,例如:
- Include → Emails ending in →
@yourcompany.com - Require → Device Posture →
Disk encrypted
- Include → Emails ending in →
- 👉 點選 Save。
此後在任何應用的策略裡,只需選擇 Include → Access Groups → Secure employees。改一次組,所有應用同步更新。
💡 提示: 也可建立可複用的 Lists(Zero Trust → Reusable components → Lists),用於如 Offboarding 郵箱列表或已批准的裝置序列號——然後在所有應用中 Exclude → Emails in list → Offboarding。
✅ 模組 4 完成!
你現在擁有:
- ✅ 一個經 Tunnel 釋出的私有應用(未開放任何入站埠)
- ✅ 一條放行對的人、阻止其他人的 Access 策略
- ✅ 一次可用的放行/阻止測試,且日誌可見
- ✅ 一個可套用到後續應用的可複用組
想要更多應用型別?
- SaaS 應用(Salesforce 等): Applications → Create new application → SaaS → 經 SAML/OIDC 整合。
- SSH / RDP 伺服器: 經同一 Tunnel 釋出,並用 Access for Infrastructure(可選瀏覽器渲染,無需客戶端)。
- 非受管裝置回退: 保留對健康裝置的 Allow,並加一條 Gateway → Isolate 規則(模組 5),讓高風險裝置在安全的遠端瀏覽器中開啟應用,而非被阻止。
快速排障
| 問題 | 解決辦法 |
|---|---|
| 應用網址顯示 Cloudflare 錯誤而非你的應用 | 聯結器不健康,或本地 URL/埠寫錯——複查 B 部分 |
| 所有人(包括你)都被阻止 | 你的 Include 規則太窄,或 Block 策略在 Allow 之上——修正順序(D 部分) |
| 群組規則永不匹配 | 模組 2 的 Test 沒帶出群組——先修 IdP |
| 已放行卻一直要求登入 | 會話時長太短,或 Cookie 被攔——調高會話時長 |
| “DNS record already exists” | 該主機名已有記錄;刪除它或換一個子域 |
🔌 想全面瞭解聯結器? 本模組僅用一條 Cloudflare Tunnel 連線單個應用。要連線整個子網、做站點間/裝置網狀,或讓整個辦公室上線,見 模組 4b — 聯結器:Tunnel、Mesh 與 Appliance。
👉 下一步:模組 4b — 聯結器 · 或 模組 5 — Gateway
模組 4b 深入講解 Tunnel、Mesh 與 Cloudflare One Appliance。或直接進入 Gateway 開始過濾流量。