上节发送的curl查询,有时候是想允许的请求,例如Route53健康检查场景(User Agent里带Route53关键字),这对我们的应用弹性检查和自动灾难恢复流程是必需的。
发送一个请求,会发现返回403:
curl -lvv -H "User-Agent: Route53" "https://d33zkcemxgrpo3.cloudfront.net/" # 将URL根据实例地址进行替换
等待一分钟左右,在Log insight里查询:
fields @timestamp, action, httpRequest.uri
| parse @message '{"name":"User-Agent","value":"*"}' as userAgent
| filter userAgent like "Route53"
| limit 100
Bot Control找到了由Route53发出的请求,并对其进行了标记:
labels.0.name
awswaf:managed:token:absent
labels.1.name
awswaf:managed:captcha:absent
labels.2.name
awswaf:managed:aws:bot-control:signal:non_browser_user_agent
针对以上场景,我们不希望任何爬虫进入我们的应用,除了我们使用的监控服务,并且只有在请求携带某个特定的密钥标头时才允许。
以下练习将带我们了解这种方法,正如这篇博客 中所描述的那样。
回到"Rule"选项卡,在我们的Web ACL上创建一个新的自定义规则,并将其命名为AllowGoodCurlTester。
对于"header filed name”,输入X-Curl-Secret。对于"match type”,选择完全匹配,并将要匹配的字符串设置为MyCurlHasASecret:
对于"操作”,选择"允许”。点击"添加规则”。
我们可以选择新创建的规则的顺序,只要它在Bot Control规则之前。点击"保存”。
发送携带密钥的请求:
curl -lvv -H "X-Curl-Secret:MyCurlHasASecret" "https://d33zkcemxgrpo3.cloudfront.net/#/"
发送携带错误密钥的请求:
curl -lvv -H "X-Curl-Secret:MyCurlHasASecrt" "https://d33zkcemxgrpo3.cloudfront.net/#/"