您可以通过在最终用户和源服务器之间添加 Cloudflare Access 作为身份验证层,安全地发布内部工具和应用程序。
本页面介绍如何通过公共主机名使 Web 应用程序可供互联网上的任何人访问。要使应用程序可通过私有 IP 或主机名使用,请参阅添加自托管私有应用程序。
- Cloudflare 上的活动域名
- 域名使用完整设置 (full setup) 或部分 (CNAME) 设置 (partial setup)
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制) > Applications(应用程序)。
-
选择 Create new application(创建新应用程序)。
-
选择 Self-hosted and private(自托管和私有)。
-
选择 Add public hostname(添加公共主机名)。
-
在 Domain(域) 下拉菜单中,选择代表该应用程序的域名。域名必须属于您 Cloudflare 账户中的活跃区域。您可以使用通配符来保护共享同一根路径的应用程序的多个部分。
或者,要使用 Cloudflare for SaaS 自定义主机名,请选择 Switch to custom input(切换到自定义输入) 并输入您的自定义主机名。
在 Access policies 下,添加现有策略或创建新策略,以控制哪些用户可以连接到您的应用程序。所有 Access 应用程序默认均为拒绝状态——用户必须匹配 Allow 策略才能被授予访问权限。
配置用户的身份验证方式:
选择您希望为应用程序启用的身份提供商。
(推荐)如果您计划仅允许通过单一 IdP 进行访问,请开启 Apply instant authentication。最终用户将不会看到 Cloudflare Access 登录页面,Cloudflare 将直接将用户重定向到您的 SSO 登录事件。
- (可选)开启 Authenticate with Cloudflare One Client,允许用户使用其 Cloudflare One Client 会话身份对应用程序进行身份验证。
(可选)为该应用程序配置独立 MFA。
在 Session Duration 中,选择用户的应用程序令牌的过期频率。
Cloudflare 会检查对您应用程序的每个 HTTP 请求是否包含有效的应用程序令牌。如果用户的应用程序令牌(和全局令牌)已过期,系统将提示他们重新向 IdP 进行身份验证。有关更多信息,请参阅会话管理。
-
(可选)转到 Additional settings(其他设置) 选项卡以自定义应用程序体验:
- App Launcher customization(App Launcher 自定义):配置此应用程序在 App Launcher 中向用户显示的方式。
自定义拦截页面:选择用户被拒绝访问应用程序时将看到的内容。
- 跨域资源共享(CORS)设置
- Cookie 设置
- 401 响应用于服务身份验证策略:当用户(或机器)在请求应用程序时未携带正确的服务令牌,则返回
401响应代码。
-
选择 Create(创建)。
设置 Cloudflare Tunnel 来发布您的内部应用程序。只有符合您的 Access 策略的用户才会被授予访问权限。
如果您的应用程序已经公开可路由,则严格来说不需要 Tunnel。但是,您随后需要使用其他方法来保护您的源 IP。
要保护您的源站,您必须验证 Cloudflare Access 颁发的应用程序令牌。令牌验证可确保任何绕过 Cloudflare Access 的请求(例如,由于网络配置错误)都会被拒绝。
一种方法是配置 Cloudflare Tunnel 守护程序 cloudflared,代表您验证令牌。这可以通过在 Cloudflare Tunnel 设置中启用 Protect with Access 来实现。或者,如果您不希望使用 Cloudflare Tunnel 执行自动验证,可以改为手动配置源站,检查所有请求是否包含有效令牌。
用户现在在通过 Cloudflare Access 进行身份验证后可以连接到您的自托管应用程序。
如果您的域名使用部分 (CNAME) 设置,Cloudflare 将不管理您的 DNS 区域。在向 Tunnel 添加已发布应用程序的路由后,您必须在外部提供商处手动创建 DNS 记录。
在 Tunnel 配置中,添加已发布应用程序路由,将主机名映射到您的内部服务。例如,将主机名设置为 app.example.com 并将其指向 http://localhost:8080。
在完整 DNS 设置中,当您向 Tunnel 添加已发布应用程序路由时,Cloudflare 会自动创建 DNS 记录。在部分 (CNAME) 设置中,您必须在托管域名的 DNS 提供商(您的权威 DNS 提供商)处添加一条 CNAME 记录。
在您的外部 DNS 提供商处,创建一条具有以下值的 CNAME 记录:
- Name(名称):您在 Tunnel 中配置的主机名(例如
app.example.com) - Target(目标):
<HOSTNAME>.cdn.cloudflare.net(例如app.example.com.cdn.cloudflare.net)
使用 Access 自托管应用程序时,大多数 Cloudflare 产品与您的应用程序兼容。
但以下产品不受支持:
您可以使用配置规则(范围限定为应用程序域)为特定应用程序禁用 Zaraz,而不必在整个区域范围内禁用。
Google tag gateway 在区域级别配置,无法限定到特定主机名。要在主机名上使用 Access 绑定(binding) Cookie,请为整个区域禁用 Google tag gateway。