使用 Zero Trust Network Access(ZTNA)服务的企业会构建策略,以确定用户是否可以访问受保护的资源,例如私有托管的 Wiki 服务器或源代码仓库。策略通常使用组成员身份、身份验证方法和设备安全状态来确定哪些用户可以访问哪些资源。
安全访问需要策略引擎评估一系列属性。使用 Cloudflare 的 ZTNA 服务 Access 时,可以在策略中包含向另一个提供访问决策所需数据的 API 发出的外部请求。
例如,您可能有一条策略规定,所有"Engineers"组成员,只要使用了需要硬件令牌的凭据进行身份验证,就可以访问自托管的源代码仓库。但您还想只允许完成了安全培训的工程师访问。该数据可能存储在另一个系统中,因此 Cloudflare 允许您在策略检查过程中使用 Workers ↗ 向培训系统发起调用,以确定该用户是否通过了安全培训。
此外,一旦身份验证和策略检查成功,Cloudflare 就会将流量传递至受保护的源站。需要注意的是,源站也应验证传入请求是否已由 Cloudflare 认证,以避免任何非法访问。Cloudflare 会在流向源站的流量中插入 JWT 令牌,以加密方式证明请求已成功通过身份验证,源站可以将此数据作为其授权逻辑的一部分。
为帮助集成这类用例,Cloudflare 拥有一个完整的开发平台,您可以在其上设计和运行自己的业务逻辑。这意味着您无需花费大量时间拼凑解决方案,而可以将更多时间用于完成集成。
本文档概述了如何将两种解决方案结合使用,以增强 Cloudflare Access 在授权和认证 ↗方面的能力。
构建无服务器应用程序并在全球范围内即时部署,实现卓越的性能、可靠性和规模。
Cloudflare Zero Trust 用 Cloudflare 全球网络取代了传统安全边界,使全球团队的互联网更快速、更安全。
- 自定义授权逻辑:使用 Workers 作为后端的 Access 外部评估(例如,使用您自己的 Open Policy Agent(即 OPA) ↗] 实现)
- 增强的 JSON Web Token(JWT):使用 Cloudflare 自有的身份验证 JWT 材料,例如将安全状态详情作为传入请求的一部分添加。
- 受 Zero Trust 保护的无服务器增强应用:允许构建无服务器应用程序的任何人从原生 ZTNA 功能中受益。
以下概述了组织如何运行自己的自定义业务逻辑,从而定制身份验证和授权流程以满足几乎任何需求。以下每个用例均对应上图中的一个步骤。
在策略评估期间,外部评估规则允许在访问策略评估期间执行您自己的代码。本例中,由 Cloudflare Workers 暴露的 API 接收有关发出请求的用户的数据,其中重要部分是其用户名。
该代码通常会调用数据库或其他 API,以评估传入的用户名是否有权访问该应用程序。外部评估规则要求调用返回 True 或 False,并结合策略决定是否授权访问。
了解更多
当用户成功通过身份验证并获得对受保护应用程序的访问授权时,Cloudflare 会在发送至源站的 HTTP 流量中插入 JSON Web Token(JWT)。该令牌是通过安全处理扩展自定义业务逻辑的宝贵资产。该 JWT 的格式是确定性的,且相对轻量,以避免对发往源站的请求造成不必要的负担。
以下是发送至源站的 JWT 示例(使用 JWT.io ↗ 读取 JWT 内容):
{
"aud": ["264063895705477af73bfbaed1bf401981f4812eefcdb9fea33f5e10e666e282"],
"email": "[email protected]",
"exp": 1728551137,
"iat": 1728464737,
"nbf": 1728464737,
"iss": "https://myorg.cloudflareaccess.com",
"type": "app",
"identity_nonce": "IA0hPRvwILtbUXSQ",
"sub": "ce40d564-c72f-475f-a9b8-f395f19ad986",
"device_id": "8469d7c4-83a9-11ee-b559-76e6e80876db",
"country": "FR"
}Cloudflare 暴露了一个特定的端点,允许任何人验证和扩展 Cloudflare 签名的 JWT。
Cloudflare Workers 非常适合与传入的 JSON Web Token(JWT)进行交互,能够直接在无服务器平台内进行额外处理而不引入任何额外延迟。
了解更多
在某些情况下,有必要对该 JWT 进行扩展,以便在受保护的目标应用程序上执行额外处理(例如,将设备安全状态详情作为传入请求的一部分添加)。
在以下示例中,我们希望确保暴露的应用程序能够感知设备防火墙和磁盘加密的状态(注意,需要在客户端机器上安装 Cloudflare One 客户端才能收集这些信号)。
当 JSON Web Token(JWT)被扩展时,附加的身份验证事件详情变得可见。此扩展揭示了比 JWT 本身默认提供的更多信息,以下是一个示例。
{
"id": "P51Tuu01fWHMBjIBvrCK1lK-eUDWs2aQMv03WDqT5oY",
"name": "John Doe",
"email": "[email protected]",
"amr": [
"pwd"
],
"oidc_fields": {
"principalName": "john.doe_cloudflare.com#EXT#@XXXXXXcloudflare.onmicrosoft.com"
},
"groups": [
{
"id": "fdaedb59-e9be-4ab7-8001-3e069da54185",
"name": "Security Team"
}
],
"idp": {
"id": "b9f4d68e-dac1-48b0-b728-ae05a5f0d4b2",
"type": "azureAD"
},
"geo": {
"country": "FR"
},
"user_uuid": "ce40d564-c72f-475f-a9b8-f395f19ad986",
"account_id": "121287a0c6e6260ec930655e6b39a3a8",
"iat": 1724056537,
"devicePosture": {
"f6f9391e-6776-4878-9c60-0cc807dc7dc8": {
"id": "f6f9391e-6776-4878-9c60-0cc807dc7dc8",
"schedule": "5m",
"timestamp": "2024-08-19T08:31:59.274Z",
"description": "",
"type": "disk_encryption",
"check": {
"drives": {
"C": {
"encrypted": true
}
}
},
"success": false,
"rule_name": "Disk Encryption - Windows",
"input": {
"requireAll": true,
"checkDisks": []
},
"a0a8e83d-be75-4aa6-bfa0-5791da6e9186": {
"id": "a0a8e83d-be75-4aa6-bfa0-5791da6e9186",
"schedule": "5m",
"timestamp": "2024-08-19T08:31:59.274Z",
"description": "",
"type": "firewall",
"check": {
"firewall": false
},
"success": false,
"rule_name": "Local Firewall Check - Windows",
"input": {
"enabled": true
}
}
...
}使用 JWT 中的详情,您可以使用 Worker 提取设备安全状态的详情,然后将其重新插入应用程序用于自身授权逻辑的 HTTP 头中。以下是一个引导式教程,说明如何使用 Cloudflare 开发者平台执行此请求修改。