更新时间:2023-01-29 17:48:39
在《REST API加速》这篇文章中,我们已经为您介绍了如何在CDN Pro上加速一个API,并在CDN Pro边缘对一个API进行调用鉴权。在提升API请求性能的同时,我们也需要考虑API的安全与管理问题。在这里,您可以选择成我们的API安全与管理服务,以清点您的API资产并保护您的API安全。同样的,您也可以在CDN Pro上集成其他第三方API安全或者API网关以加速、管理并保护您的API资产。
本文将为您介绍如何在CDN Pro上集成API安全应用。
假设您的API具备如下特性:
api.8686c.com
, 从API服务器获取资源,需要在请求Host
头中携带该域名,以访问指定的API内容。apisec-origin.8686c.com
,该域名已配置解析到API服务器 IP 地址: 1.1.1.1
和 1.1.1.2
。GET、POST、PUT、DELETE、PATCH
。使用 CDN Pro 保护此 API 服务:
业务流量会先经过CDN Pro边缘的ES服务器进行API鉴权与短时缓存(如下图“API Edge Logic”),然后由CDN Pro将API动态请求引入到API安全与管理应用进行安全检测与拦截(如下图“API Application”),确保非法API请求不会轻易访问您的后端API Server。
在《REST API加速》这篇文章中我们已经为您介绍了如在在CDN Pro上配置加速与鉴权。接下去我们将以网宿API安全与管理为例,为您介绍如何在CDN Pro上配置API应用。
apisec.8686c.com
,并配置其回源地址指向API Server的回源地址地址:apisec-origin.8686c.com
,此时,系统生成这个应用的API CNAME:apisec.8686c.com.wscdns.com
。稍后我们会将经过CDN Pro的流量指向这个API CNAME地址。apisec.8686c.com
,并指定了回源的端口为8443。同时,我们认为HTTP传输是不安全的,因此配置了回源请求的协议统一走HTTPS。apisec.8686c.com
的SSL证书,并进行证书关联域名操作,以开启HTTPS。若您没有证书,可通过“申请一键证书”来申请免费的DV SSL证书。TestCDNProAPI
;②所属域名:这个API的所属域名是我们在步骤1中添加的apisec.8686c.com
;③请求方法:配置了这个API支持的标准HTTP请求方法包括 GET;POST;PUT;DELETE;PATCH
;④前端路径:API的URI路径为 /apipath/{para1},{papa2}
,其中, {para1},{papa2}
是这个API需要匹配的路径参数。API默认仅包含scheme+域名+URI
部分,默认不包含路径参数,这里我们通过{}
来对这个API新增包含路径参数,即:包含scheme+域名+URI部分+配置的查询参数
;⑤API URL:系统根据配置的域名和路径参数自动组合生成访问这个API的完整URL。POST
方法配置了对 para1
和 para2
这两个参数进行限制及检测。在此处您也可以对API请求的body做限制。apisec.8686c.com
创建一个加速项目。APIAPP
:将API应用作为CDN Pro的源站应用,并将API CNAME作为回源地址,以API动态请求在发到源站之前会经过API应用做检测中。其中:①服务器:源站服务器配置的是我们刚刚新创建的API CNAME apisec.8686c.com.wscdns.com
。CDN Pro回源访问API CNAME,API应用安全检测完成后,合法流量才会导入回源地址 apisec-origin.8686c.com
以从 1.1.1.1
和 1.1.1.2
服务器上获取API资源;②Host请求头:我们配置了HOST请求头为 apisec.8686c.com
。在此场景下我们其实也可以不配置这个host
,因为我们在步骤1中已经在API应用上添加了这个配置,API应用回源的时候就会携带这个头部。APIServer
:将API源站服务器直接作为CDN Pro的回源地址。其中:①服务器:API的源站服务器的回源域名 apisec-origin.8686c.com
直接,CDN Pro回源请求将直接从1.1.1.1
和 1.1.1.2
服务器上获取API资源;②Host请求头:我们配置了HOST请求头为 apisec.8686c.com
。
origin_pass
指令来配置CDN Pro在回源阶段引入API应用 APIAPP
。在这个配置示例中,我们定义CDN Pro默认把回源请求直接导入API源站 APIServer
;但是如果是 /apipath/
这个路径的请求会先转发到 APIAPP
进行安全监测后才会回API源站。其中,对于 /apipath/
这个 location
下的API们把还做了这些处理:①API 用户名和客户端 IP 被添加到了缓存键中,以确保同一IP同一用户仅会在CDN Pro上命中唯一的缓存内容;②强制请求走HTTPS,同时仅缓存1分钟的短暂缓存时间,这对于大多数应用程序来说已足够安全;③默认情况下,仅对 GET
请求方法的响应进行缓存。您也可以使用 proxy_cache_methods
指令来对其他请求方法的响应进行缓存。④我们允许客户端使用 ‘Cache-Control: no-cache’ 标头字段来绕过缓存。当 CDN Pro 服务器接受到的请求携带了这个字段值时,不会在节点服务器上进行缓存查询,而是直接将请求直接转发给API应用服务器,API应用检测合法才会从API服务器获取内容;⑤最后,我们通过指令 origin_fast_route
开启了快速路由功能,以确保以最稳定的链路高效回源。location / { #This is the default location.
proxy_cache_valid 1440m; #200, 301, and 302 responses will be cached for 1440m
set $cache_misc $cache_misc$sorted_querystring_args; #Add sorted query string to the cache key
proxy_ignore_headers Expires Cache-Control Set-Cookie; #Ignore caching headers from the origin
origin_pass APIServer;
}
location apipath/ { #This is the default location.
# reject http
if ($request_scheme = http) {
return 400 "please use https!";
}
origin_pass APIAPP; #the request URI and query string will be passed to the origin
# add API user name and client IP into cache key
set $cache_misc $cache_misc.$remote_user.$client_real_ip;
# add sorted query string into cache key
set $cache_misc $cache_misc.$sorted_querystring_args;
# the client can use Cache-Control: no-cache to by pass cache
if ($http_cache_control ~ (no-cache|no-store)) {
set $bypass_cache 1; #do not use cached copy
}
proxy_cache_bypass $bypass_cache;
proxy_cache_valid 1m; #200, 301, and 302 responses will be cached for 1m
origin_fast_route on; #enable the Fast Route to origin
}
apisec.8686c.com
添加一条CNAME 的 DNS 记录指向CDN Pro边缘调度域名。现在,所有访问apisec.8686c.com
域名的请求都将被路由到 CDN Pro 平台。CDN Pro收到请求后,若是访问指定的API目录资源,则会先执行边缘逻辑下的代码:API短时缓存命中或者鉴权失败直接响应给客户端;未命中或者鉴权通过的请求会被路由到API安全与管理应用。API安全与管理应用对接收到的API动态请求进行安全检测,检测合法才会被转发给后端的API源站服务器,确保非法的API请求不会访问到源站。
除了在CDN Pro上集成网宿API安全与管理之外,您也可以采用同样的方式集成第三方API安全或者API网关。