API Shield 通过发现端点、验证请求架构和检测滥用模式来保护您的 API。本指南将逐步引导您完成从配置会话标识符到启用高级保护的初始设置。
虽然不是严格要求,但建议您在开始使用 API Shield 时配置您的 会话标识符。当 Cloudflare 检查您的 API 流量以识别单个会话时,我们可以提供更多用于可见性、管理和控制的工具。
如果您不确定您的 API 使用哪些会话标识符,请咨询您的开发团队。
会话标识符应唯一地标识 API 客户端。API 流量的常用会话标识符是 Authorization 标头。当 API 使用 JSON Web Token (JWT) 进行客户端身份验证时,其值可能会随着时间而改变。您可以使用 JWT 内的声明值(例如 sub 或 email)作为会话 ID,以随时间唯一地标识该会话。
如果您的 API 在发往您区域的超过 1% 的成功请求中使用 Authorization 标头,Cloudflare 将自动将其设置为 API Shield 会话标识符。
您必须拥有特定权限(例如企业订阅)才能将会话标识符或 cookie 配置为标识符形式,以便使用 API 发现 (API Discovery)、序列缓解 (Sequence Mitigation) 或 速率限制推荐 (rate limiting recommendations) 等功能,并在 序列分析 (Sequence Analytics) 和 身份验证状态 (Authentication Posture) 中查看结果。
-
在 Cloudflare 仪表板中,转到 Security Settings(安全设置) 页面。
Go to Settings ↗ -
按 API abuse 进行筛选。
-
在 Session identifiers(会话标识符) 上,选择 Configure session identifiers(配置会话标识符)。
-
选择 Manage identifiers(管理标识符)。
-
选择会话标识符的类型(cookie、HTTP 标头或 JWT 声明)。
-
输入会话标识符的名称。
-
选择 Save(保存)。
-
登录到 Cloudflare 仪表板 ↗,并选择您的账户和域。
-
转到 Security(安全性) > API Shield。
-
选择 Settings(设置)。
-
在 Endpoint settings(端点设置) 上,选择 Manage identifiers(管理标识符)。
-
选择会话标识符的类型(cookie、HTTP 标头或 JWT 声明)。
-
输入会话标识符的名称。
-
选择 Save(保存)。
在设置会话标识符并留出一些时间让 Cloudflare 了解您的流量模式后,您可以查看针对每个端点和每个会话的速率限制推荐,还可以通过创建新规则来实施针对每个端点和每个会话的速率限制。会话标识符将允许您在序列分析 (Sequence Analytics) 中查看来自基于会话 ID 的发现的 API 发现结果以及会话流量模式。
架构验证通过比对您的 API 架构 检查传入的请求来保护您的 API。根据您配置的操作,不匹配架构的请求将被记录或阻止。
当您通过 Cloudflare 仪表板上传架构时,其端点会自动添加到端点管理中。如果您已经有 OpenAPI 规范,请将其上传到架构验证。
如果您没有可上传的架构,请继续阅读本指南,了解如何使用 API Shield 生成架构。
API Shield 与 Cloudflare WAF 的敏感数据检测规则集配合使用,可在其 HTTP 响应中识别返回敏感数据(例如社会安全号或信用卡号)的 API 端点。审查这些端点以验证仅在预期的地方返回敏感数据。
您可以通过选择一行中路径旁边的图标来识别返回敏感数据的端点。展开端点以查看触发了哪些规则的详细信息,并通过探索 Firewall Events(防火墙事件) 中的事件来查看更多信息。
Cloudflare 通过检查您的流量自动发现 API 端点。将这些发现的端点添加到端点管理可解锁额外的安全和监控功能。
端点管理会跟踪每个已保存端点的请求数、错误率和延迟。
您可以直接从 API 发现、架构验证 或通过方法、路径和主机手动保存您的端点。
您可以在 Endpoint management(端点管理) 页面中查看已保存端点的列表。保存端点后,Cloudflare 将开始汇总您端点的性能数据和安全数据。
添加端点后,Cloudflare 开始从您的 API 流量中学习架构参数。在架构学习开始之前,端点必须保存至少 24 小时。架构学习是一个持续的过程,会检查最近 72 小时的流量。流量较大的端点会产生更准确的架构。
Cloudflare 还会使用您配置的会话标识符为每个端点生成速率限制建议。
在执行下面的架构和速率限制步骤之前,添加端点后请等待至少 24 小时。
在系统学习您的流量模式时,您可以继续进行 其他配置,例如 JWT 验证或 mTLS。
速率限制规则允许您为匹配表达式的请求定义速率限制,并选择达到这些速率限制时执行的操作。
API Shield 根据您的会话标识符为每个端点生成速率限制建议。这些建议是针对每个端点和每个会话的,而不是应用于整个站点或基于 IP 地址。
每个会话的速率限制会跟踪单个访客在其会话期间发往特定端点的流量。这减少了宽泛范围规则的误报,同时仍能限制滥用流量。
Cloudflare 通过检查保存到端点管理的所有端点的请求流量来学习架构参数。您可以将学到的架构导出为按主机名划分的 OpenAPI v3.0.0 规范。
将学到的架构导入架构验证中,以保护 Cloudflare 通过流量检查发现的端点 — 包括您之前可能没有架构的端点。
您可以使用 Cloudflare 仪表板将学到的架构应用于整个主机名。或者,您可以将学到的架构应用于单个端点。在应用学到的架构之前,请导出并对其进行审查,以验证该架构是否准确地代表了您预期的流量模式。
学到的架构包括主机名、按主机划分的所有端点、方法和路径以及检测到的路径变量(例如 /users/{id})。它们还可以包括检测到的查询参数及其格式。您还可以选择包含速率限制阈值建议。
您可以在 Cloudflare 仪表板 或通过 API 导出学到的架构。
顺序分析 (Sequence Analytics) 可识别 API 请求的常见模式 — 例如,用户在发起资金转账之前检查其账户余额。
顺序按优先级得分进行排序,该得分衡量了特定 API 请求按一致顺序一起发生的可能性。高分顺序包含可能在顺序中的其他操作之前发生的 API 请求。
顺序缓解 (Sequence mitigation) 允许您为与您的 API 通信的已验证身份客户端强制执行请求模式。使用顺序分析来识别您的 API 客户端遵循的顺序,然后将 API Shield 保护(速率限制、架构验证、JWT 验证和 mTLS)应用于高分顺序中的端点。与您的开发团队确认预期的端点顺序。
更多信息请参阅 使用顺序分析自动检测 API 滥用 ↗ 博客文章。
JSON Web 令牌 (JWT) 验证可验证客户端发送的令牌未被篡改且未过期。使用 Cloudflare 仪表板或 API 配置 JWT 验证。
如果您的源站使用 GraphQL,您可以考虑对 GraphQL 查询大小和深度设置限制。
GraphQL 恶意查询保护会扫描 GraphQL 流量,以查找具有过度嵌套或大小可能导致源站过载并导致拒绝服务的查询。您可以创建规则来设置最大查询深度和大小,以便在这些查询到达您的源站之前将其阻止。
更多信息请参阅 博客文章 ↗。
如果您运营的 API 需要或可以从额外保护层中受益,您可以考虑使用双向 TLS (mTLS)。
双向 TLS (mTLS) 身份验证需要客户端和服务器都使用证书验证彼此的身份。在标准 TLS 中,只有服务器证明其身份。mTLS 增加了客户端验证,这对于不通过身份提供程序进行身份验证的设备(如 IoT 硬件)很有用。