Cloudflare One 允许您在应用程序上实施自定义设备姿态检查。这涉及配置 Cloudflare One 客户端服务对服务(service-to-service)集成,该集成会定期调用您选择的外部 API,无论是第三方端点提供商还是自建解决方案。调用时,该 API 将从 Cloudflare 接收设备标识信息,并应返回 0 到 100 之间的值。然后,您可以设置一个设备姿态检查来确定返回的值属于通过还是失败;例如,您可以仅当用户的设备姿态值大于 60 时才允许其访问。
sequenceDiagram
participant Cloudflare One Client
participant Cloudflare Access
participant External API
Cloudflare One Client->>Cloudflare Access: Client ID and Secret
Cloudflare Access->>External API: Application token
Cloudflare One Client->>External API: JSON with user and device identity
External API-->>Cloudflare One Client: JSON with 0-100 result
自定义服务提供商集成适用于满足以下规范的任何 API 服务。有关自定义设备姿态集成 API 的示例,请参阅我们的 Cloudflare Workers 示例代码 ↗。
Cloudflare One 客户端通过 Cloudflare Access 向外部 API 进行身份验证。外部 API 应验证 Cloudflare Access 签发的应用程序令牌,以确保拒绝任何绕过 Access 的请求(例如,由于网络配置错误)。
Cloudflare 将向配置的 API 端点传递以下参数。您可以使用此数据来标识设备并分配姿态分数。对于某些设备,并非所有标识信息都适用,在这种情况下,该字段将为空白。每次请求最多将发送 1,000 台设备。
| 字段 | 描述 |
|---|---|
device_id |
由 Cloudflare One 客户端分配的设备 UUID |
email |
用于验证 Cloudflare One 客户端的电子邮件地址 |
serial_number |
设备序列号 |
mac_address |
设备 MAC 地址 |
virtual_ipv4 |
设备虚拟 IPv4 地址 |
hostname |
设备名称 |
示例请求体:
{
"devices": {
[
{
"device_id": "9ece5fab-7398-488a-a575-e25a9a3dec07",
"email": "jdoe@mycompany.com",
"serial_number": "jdR44P3d",
"mac_address": "74:1d:3e:23:e0:fe",
"virtual_ipv4": "100.96.0.10",
"hostname": "string",
},
{...},
{...}
]
}
}对于每个 Cloudflare device_id,API 服务应返回姿态分数,并可选择返回第三方设备 ID。
| 字段 | 描述 |
|---|---|
s2s_id |
第三方设备 ID(如果不可用,则为空字符串) |
score |
0 - 100 之间的整数值 |
示例响应体:
{
"result": {
"9ece5fab-7398-488a-a575-e25a9a3dec07": {
"s2s_id": "",
"score": 10
},
"device_id2": {...},
"device_id3": {...}
}
}Cloudflare One 客户端使用 Access Client ID 和 Access Client Secret 来安全地向外部 API 进行身份验证。如果您还没有 Access Client ID 和 Access Client Secret,请创建一个新的服务令牌。
接下来,将外部 API 保护在 Cloudflare Access 之后,以便 Cloudflare One 客户端可以使用服务令牌进行身份验证。要将 API 端点添加到 Access:
-
向应用程序添加以下 Access 策略。确保将 **Action(操作)**设置为 Service Auth(而非 Allow)。
操作 规则类型 选择器 值 Service Auth(服务身份验证) Include(包含) Service Token(服务令牌) <TOKEN-NAME>
要创建自定义服务对服务集成:
- 在 Cloudflare 仪表板 ↗中,前往 Zero Trust > Integrations(集成) > Service providers。
- 选择 Add new(添加新项)。
- 选择 Custom service provider。
- 为该提供商输入任意名称。此名称将在整个仪表板中用于引用此连接。
- 在 **Access client ID(Access 客户端 ID)**和 **Access client secret(Access 客户端密钥)**中,输入用于向外部 API 进行身份验证的 Access 服务令牌。
- 在 **Rest API URL(REST API URL)**中,输入 Cloudflare 将查询姿态信息的外部 API 端点(例如
https://api.example.com)。有关更多信息,请参阅外部 API 要求。 - 在 **Polling frequency(轮询频率)**中,选择 Cloudflare One 应多久向外部 API 查询一次信息。
- 选择 Test and save(测试并保存)。该测试将检查 Cloudflare 能否使用提供的 Access 凭据向 API URL 进行身份验证。
接下来,配置设备姿态检查以确定给定的姿态分数是否构成通过或失败。
- 在 Cloudflare 仪表板 ↗中,前往 Zero Trust > Reusable components(可重用组件) > Posture checks > Service provider checks。
- 选择 Add a check(添加检查)。
- 选择 Custom service provider 提供商。
- 为该态势检查输入任意名称。
- 配置设备通过态势检查所需的属性。
- 选择 Save(保存)。
- 要进行测试,请前往 Insight > Logs > Posture logs,并验证服务提供商态势检查是否返回预期结果。
您现在可以在设备态势策略中使用此态势检查。
| 选择器 | 描述 | 值 |
|---|---|---|
| Score | 由外部 API 返回的姿态分数 | 0 到 100 |