前提条件
已创建ASM实例。具体操作,请参见创建ASM实例。
已创建ACK集群。具体操作,请参见创建Kubernetes托管版集群。
添加集群到ASM实例。具体操作,请参见添加集群到ASM实例。
已部署入口网关服务。具体操作,请参见添加入口网关服务。
已经部署了httpbin应用,暴露在网关的80端口。
步骤1:将ASM网关接入WAF
进入WAF控制台,创建WAF3.0实例(如果已经有WAF实例,可以忽略)。
点击“接入管理”菜单,选择“CNAME接入”,然后点击“接入”按钮。
填写有效域名(中国内地的WAF会校验域名是否备案)。然后按照上图填写配置即可。点击下一步。
在“服务器地址”处选择“IP”,然后填写ASM网关的公网地址。然后勾选“启用流量标记”,如图所示添加三个Header(该配置会在通过WAF发往ASM网关的请求中添加对应的三个Header)。
点击上图的提交,进入如下界面。
记录WAF提供的CNAME地址。点击“完成”,至此已经将ASM网关和WAF对接完成。
步骤2(可选):自定义ASM访问日志格式
由于经过WAF校验的请求可能会携带一些特殊的Header。比如步骤1中配置在请求中携带了一个自定义Header和两个标识请求源IP、源端口的Header。在将线上应用接入WAF时,如果不能在请求链路上看到这个Header,将会给链路联调造成极大困难。此时,可以使用ASM可观测能力的自定义访问日志功能。
ASM的自定义访问日志功能支持打印请求中的自定义Header,配置完成之后就可以在网关和Sidecar的日志中,看到请求的这个Header值,下面将演示如何配置。
步骤3:测试
使用WAF提供的CNAME地址,用如下方式访问httpbin应用的/status/418
路径。
curl-HHost:${WAF处配置的域名}"http://${WAF提供的CNAME地址}/status/418"-v* Trying x.x.x.x:80... * Connected to geszcfxxxxxxxxxxxxxxxxxxxxppbeiz.aliyunwaf1.com (x.x.x.x) port 80 (#0)> GET /status/418 HTTP/1.1 > Host:xxxx > User-Agent: curl/7.84.0 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 418 Unknown < Date: Wed, 22 Feb 202305:07:23 GMT < Content-Length: 135< Connection: keep-alive < Set-Cookie: acw_tc=0bc1599a16770424432844282e82xxxxxxxxxxxxxxxxxxx1ad989e7e5245f;path=/;HttpOnly;Max-Age=1800< server: istio-envoy < x-more-info: http://tools.ietf.org/html/rfc2324 < access-control-allow-origin: * < access-control-allow-credentials: true< x-envoy-upstream-service-time: 1< -=[ teapot ]=- _...._ .' _ _ `. | ."` ^ `". _, \_;`"---"`|// | ;/ \_ _/ `"""`* Connection #0 to host geszcxxxxxxxxxxxxxxxxxxxxcppbeiz.aliyunwaf1.com left intact
可以看到,成功访问了httpbin的/status/418
路径。
此处并没有使用原始域名访问。如需使用原始域名访问,需要您自行修改域名解析规则,将原始域名解析到WAF提供的CNAME地址上去。
接下来查看ASM控制台上的日志。点击“可观测管理中心”菜单,进入“日志中心”页面,在“网关日志”标签页下,搜索418,可以看到如下日志:
可以看到,网关的日志中已经打印出了WAF添加的Header值。
对接完成之后,您可以在WAF控制台上配置其他更高级的防护能力,保护您的网站不受攻击。如果您还有其他自定义Header需要全链路观测的话,可以仿照步骤2中的方式配置。