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

模块 4 — ZTNA:用 Access 发布私有应用

目标: 让一个内部应用可从任何地方安全访问——无需 VPN、无需开放任何入站防火墙端口——并精确控制谁能访问。

👤 谁来做 应用负责人 + 安全团队
⏱️ 用时 约 60 分钟
🎯 完成后你将拥有 一个发布在真实网址上的私有应用,仅你放行的人可访问
✋ 开始前 模块 1–3 已完成;一个可测试的私有 Web 应用(如内部 wiki、Grafana、开发工具),运行在你可控之处;一台能访问该应用的服务器/虚拟机

🧭 原理: 你在应用旁运行一个名为 cloudflared 的小程序。它向 Cloudflare 建立一条安全的仅出站连接(“Tunnel”)——因此你永远不必把应用暴露到互联网。然后 Access 在其前面加上一道登录校验。

流程:(A) 创建 Tunnel →(B) 连接应用 →(C) 添加 Access 应用 →(D) 编写策略 →(E) 测试 →(F) 构建可复用的组。


A 部分 — 创建 Tunnel

  1. 👉 Zero Trust → Networks → Tunnels。
  2. 👉 点击 Create a tunnel。
  3. 👉 选择 Cloudflared → Next。
  4. ⌨️ 按位置命名,如 datacenter-1 → Save tunnel。

📺 你会看到: 一个 “Install and run a connector” 页面,含各操作系统的命令,且已内置一长串安装令牌。

  1. 👉 选择你服务器操作系统对应的选项卡(Windows / macOS / Debian / Red Hat / Docker)。
  2. 👉 复制显示的命令——它已包含你的唯一令牌。

⚠️ 注意: 该命令含有一个秘密令牌。像对待密码一样对待它;不要粘贴进聊天或工单。


B 部分 — 连接你的应用

B1 步 — 在服务器上运行连接器

  1. 👉 登录到能访问你应用的服务器/虚拟机。
  2. 👉 粘贴并运行你复制的命令。例如在 Debian/Ubuntu 上大致如下:
    curl -L https://pkg.cloudflare.com/install.sh | sudo bash   # 若尚未安装 cloudflared
    sudo cloudflared service install eyJhIjoiZXhhbXBsZS...      # 你的令牌
    
  3. 📺 回到控制台,隧道的 Connector status 变为 Connected / Healthy(约 30 秒)。

✅ 检查点: 控制台显示你的连接器为 Healthy。点击 Next。

B2 步 — 告诉 Cloudflare 你的应用在哪(公共主机名)

现在把一个公共网址映射到你的内部应用。

  1. 📺 你在 Route tunnel / Public Hostnames 步骤。
  2. 👉 点击 Add a public hostname 并填写:
    字段 示例 含义
    Subdomain wiki 用户将输入的名字
    Domain yourcompany.com 你 Cloudflare 账户里的域名
    Type HTTP cloudflared 在本地如何访问你的应用
    URL localhost:3000 应用在该服务器上运行的位置
  3. 👉 点击 Save tunnel。

📺 你会看到: wiki.yourcompany.com 现已发布,并被代理到你的内部应用。

💡 Cloudflare 里还没有域名? 你需要添加一个域名(zone)才能用自有主机名做自托管 Access 应用。请管理员添加域名,或用你已在 Cloudflare 管理的域名。

✅ 检查点: 访问 https://wiki.yourcompany.com——你能打开你的应用(此刻它对任何人开放;下一部分会锁定它)。


C 部分 — 添加一个 Access 应用

这会在 wiki.yourcompany.com 前面加上登录校验。

  1. 👉 Zero Trust → Access controls → Applications。
  2. 👉 点击 Create new application(添加应用)。
  3. 👉 选择 Self-hosted and private。

📺 你会看到: 一个应用配置页面。

  1. ⌨️ 应用名称: Internal Wiki。
  2. 👉 点击 Add public hostname,填入你刚发布的相同主机名:子域 wiki,域名 yourcompany.com。
  3. 👉 将 Session Duration 设为 24h(敏感应用用更短,如 1h)。
  4. 👉 在认证下选择模块 2 的身份提供商。
    • 💡 若只有一个 IdP,开启 Apply instant authentication 让用户跳过选择界面。
    • 💡 开启 Authenticate with Cloudflare One Client,让已登录的 WARP 用户无缝进入。
  5. 先别点 Create——先在 D 部分添加策略(向导支持内联添加),或先点 Create 再随即添加策略。两者均可。

D 部分 — 编写访问策略(谁被允许)

  1. 👉 在应用中进入 Policies 区 → Add a policy(或 Create new policy)。

  2. ⌨️ 策略名称: Allow — Employees on healthy devices。

  3. 👉 Action: Allow。

  4. 👉 构建规则:

    规则类型 选择器 运算符 取值
    Include Emails ending in — @yourcompany.com
    Require Device Posture in Disk encrypted(来自模块 3)

    (若模块 2 中你的 IdP 群组测试正常,可改用 Include → IdP Groups → Engineering 以获得更严格控制。)

  5. 👉 Save 策略,然后 Save/Create 应用。

💡 最佳实践——加一道默认拒绝网: 再建一条更低优先级的策略,名为 Block — Everyone,Action = Block、Include = Everyone。由于策略自上而下读取,Allow 会先匹配到你的人,其余人则命中 Block。

⚠️ 注意: 敏感应用绝不要用 Bypass 动作——它会彻底移除登录校验。


E 部分 — 测试(最有成就感的部分)

测试 1 — 被允许的用户

  1. 👉 在你的试点设备上(以被允许的员工身份登录),打开 https://wiki.yourcompany.com。
  2. 📺 你被送到企业登录(或因即时认证 + WARP 会话而直接进入)。登录后,应用加载。✅

测试 2 — 被阻止的用户

  1. 👉 在无痕窗口用未被允许的人(或个人邮箱)登录同一网址。
  2. 📺 你看到 Cloudflare 的 “You don't have access” 拦截页。✅

测试 3 — 查看日志

  1. 👉 Zero Trust → Logs → Access(或 Access → Logs)。
  2. 📺 你能看到两次尝试:一次 Allowed、一次 Blocked,各自带用户邮箱和决策所依据的策略。

✅ 检查点: 对的人进得来、错的人被挡住,且你能在日志里看到。你刚刚替代了这个应用的 VPN。 🎉


F 部分 — 构建可复用的组(避免重复劳动)

现在你的规则是写在一个应用里的。当你添加第 2、3、10 个应用时,你不会想重新键入它们。先一次性构建一个可复用的 Access 组。

  1. 👉 Zero Trust → Access controls → Policies → Groups(或 Reusable components → Groups)。
  2. 👉 点击 Add a group。
  3. ⌨️ 名称:Secure employees。
  4. 👉 一次性添加规则,例如:
    • Include → Emails ending in → @yourcompany.com
    • Require → Device Posture → Disk encrypted
  5. 👉 点击 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 开始过滤流量。