在本文中,我們將向大家介紹如何在Amazon Web Services(AWS)賬戶中部署一套解決方案,通過AWS Web Application Firewall(WAF)服務(wù)提供全自動(dòng)儀表板。這套解決方案使用由AWS WAF生成并收集到的日志記錄,并通過用戶友好型儀表板顯示相關(guān)結(jié)果,具體如圖一所示。
圖一:AWS WAF的用戶友好型儀表板
此儀表板提供多種圖表,可供您隨時(shí)參考、篩選及調(diào)整。圖一為我們使用樣本網(wǎng)頁中的數(shù)據(jù)創(chuàng)建出的示例儀表板,您可以在其中查看:
·已執(zhí)行的AWS WAF規(guī)則
·全部請(qǐng)求數(shù)量
·被阻止的請(qǐng)求數(shù)量
·允許及被阻止的請(qǐng)求數(shù)量對(duì)比
·來自不同國(guó)家的請(qǐng)求數(shù)量
·HTTP方法
·HTTP版本
·特定IP計(jì)數(shù)
·請(qǐng)求計(jì)數(shù)
·訪問量前10的IP地址
·訪問量前10的國(guó)家
·訪問量前10的用戶代理
·訪問量前10的主機(jī)
·訪問量前10的WebACL
此儀表板由Kibana創(chuàng)建而成,您可以向其中添加新的可視化圖表,充分發(fā)揮其功能靈活性。
AWS WAF是一套Web應(yīng)用程序防火墻。它有助于保護(hù)您的Web應(yīng)用程序或API免受各類常見Web攻擊活動(dòng)對(duì)其可用性、安全性以及資源消耗量的負(fù)面影響。只需幾個(gè)步驟,您就可以將AWS WAF部署至應(yīng)用程序負(fù)載均衡器、Amazon CloudFront分配或者Amazon API Gateway階段當(dāng)中。在本文中,我們將共同了解如何深入了解AWS WAF層的運(yùn)行情況。AWS WAF提供兩種服務(wù)版本:AWS WAF(版本2)與AWS WAF經(jīng)典。這里,我們建議您使用AWS WAF版本2以保持最新功能,因?yàn)锳WS WAF經(jīng)典已經(jīng)不再更新。當(dāng)然,本文中描述的解決方案可同時(shí)支持這兩種AWS WAF版本。
這套解決方案能夠快速實(shí)現(xiàn)部署:不到一個(gè)小時(shí)之內(nèi),儀表板即可準(zhǔn)備就緒。該解決方案使用多項(xiàng)AWS服務(wù)構(gòu)建而成,具體包括Amazon Elasticsearch(Amazon ES),AWS Lambda,Amazon Kinesis Data Firehose,Amazon Cognito,Amazon EventBridge等等。當(dāng)然,大家無需了解這些服務(wù)的詳細(xì)信息,即可輕松完成儀表板的構(gòu)建與使用。在這里我們準(zhǔn)備了一套CloudFormation模板,您可以在AWS控制臺(tái)進(jìn)行部署,借此在您的AWS賬戶上自動(dòng)設(shè)置整個(gè)解決方案。您也可以在我們的AWS Github上找到完整解決方案。此方案屬于開源成果,因此您可以隨意使用與編輯,滿足您希望達(dá)成的任何需求。
此解決方案的架構(gòu)可以分為7個(gè)步驟,如圖二所示。
圖二:構(gòu)建儀表板時(shí)的交互點(diǎn)
各交互點(diǎn)如下:
1.AWS WAF服務(wù)的一項(xiàng)重要功能為AWS WAF日志。此日志能夠捕捉關(guān)于被阻止及允許的請(qǐng)求的相關(guān)信息,結(jié)果將被轉(zhuǎn)發(fā)至Kinesis Data Firehose服務(wù)。
2.Kinesis Data Firehose緩沖區(qū)接收信息,而后將其發(fā)送至作為解決方案核心的Amazon ES處。
3.部分信息——例如AWS WAF Web ACL中的名稱——不會(huì)被記錄在AWS WAF日志當(dāng)中。為了使整個(gè)解決方案對(duì)于用戶更加友好,我在這里使用了EventBridge;每當(dāng)用戶更改其AWS WAF配置時(shí),都會(huì)調(diào)用EventBridge。
4.在創(chuàng)建新規(guī)則時(shí),EventBridge將調(diào)用Lambda函數(shù)。
5.Lambda將檢索關(guān)于全部現(xiàn)有規(guī)則的信息,并更新規(guī)則ID及其名稱在Amazon ES集群中的映射。
6.為了讓整個(gè)解決方案更加安全,這里使用Amazon Cognito服務(wù)存儲(chǔ)被授權(quán)使用儀表板用戶的憑證。
7.用戶輸入憑證以訪問安裝在Amazon ES集群中Kibana上的儀表板。
現(xiàn)在,讓我們部署解決方案并查看其工作效果。
步驟1:使用CloudFormation模板部署解決方案
點(diǎn)擊Launch Stack在您的賬戶內(nèi)啟動(dòng)一個(gè)CloudFormation堆棧,借此部署解決方案。
您將被重新定向至美國(guó)北弗吉尼亞州CloudFormation服務(wù),該區(qū)域?yàn)榕cCloudFront相關(guān)聯(lián)的AWS WAF WebACL在部署此解決方案時(shí)使用的默認(rèn)區(qū)域。您也可以根據(jù)需要更改具體區(qū)域。此模板將啟動(dòng)多項(xiàng)云資源,包括但不限于:
·內(nèi)置Kibana的Amazon ES集群,用于存儲(chǔ)數(shù)據(jù)并顯示儀表板。
·Amazon Cognito用戶池,外加一套包含用于指示儀表板訪問權(quán)限的用戶注冊(cè)表。
·Kinesis Data Firehose,用于將日志流式傳輸至Amazon ES。
在向?qū)С绦蛑校到y(tǒng)會(huì)要求您修改或者提供四項(xiàng)不同參數(shù),分別為:
·DataNodeEBSVolumeSize:待創(chuàng)建的Amazon ES集群的存儲(chǔ)大小,您可以直接保留默認(rèn)值。
·ElasticSearchDomainName:Amazon ES集群域的名稱。您可以直接保留默認(rèn)值。
·NodeType:用于創(chuàng)建Amazon ES集群的實(shí)例類型。您可以根據(jù)需求進(jìn)行修改,也可以直接保留默認(rèn)值。
·UserEmail:您需要更新此參數(shù)。這項(xiàng)參數(shù)所指示的電子郵件地址將負(fù)責(zé)收取Kibana登錄密碼。
步驟2:等待
我將本示例中的模板命名為aws-waf-dashboard,其啟動(dòng)過程大概需要20到30分鐘。您可以休息一會(huì)兒,直到該堆棧的狀態(tài)轉(zhuǎn)換為CREATE_COMPLETE。
圖三:CloudFormation模板啟動(dòng)完成
步驟3:驗(yàn)證Kibana與儀表板是否正常工作
檢查您的郵件。您應(yīng)該已經(jīng)收到包含所需密碼的電子郵件,并可借此登錄至Kibana儀表板。請(qǐng)記錄密碼內(nèi)容,而后返回CloudFormation服務(wù)并選擇aws-waf-dashboard模板。在Output選項(xiàng)卡中的Value列中,您應(yīng)能看到一項(xiàng)參數(shù)及其附帶的指向儀表板的鏈接。
圖四:輸出CloudFormation模板
在Kibana當(dāng)中,選擇Dashboard選項(xiàng)卡,如圖五所示,而后選擇表中的WAFDashboard。此項(xiàng)操作將調(diào)用AWS WAF儀表板。目前的儀表板應(yīng)該還沒有內(nèi)容,因?yàn)槠渖形磁cAWS WAF連接。
圖五:空白Kibana儀表板
步驟4:接入AWS WAF日志
圖六:WAF&Shield
如果您還沒有啟用AWS WAF日志,則需要立即進(jìn)行操作以繼續(xù)下一步。請(qǐng)?jiān)赪eb ACL中選擇Logging and metrics,而后選擇Enable logging,如圖七所示。
圖七:?jiǎn)⒂肁WS WAF日志
在Amazon Kinesis Data Firehose Delivery Stream之下選擇下拉列表,而后選擇由模板在步驟2中創(chuàng)建完成的Kinesis Firehose。其名稱以aws-waf-logs開頭。保存您的更改。
圖八:選擇創(chuàng)建好的Kinesis Firehose
步驟5:最終驗(yàn)證
您的AWS WAF日志將通過Kinesis Data Firehose從AWS WAF服務(wù)直接被發(fā)送至Amazon ES集群,并通過Kibana儀表板供您使用。幾分鐘之后,您應(yīng)該會(huì)在儀表板上看到類似于圖一中的截屏數(shù)據(jù)。
本輪演練成功完成!如大家所見,只需要幾個(gè)簡(jiǎn)單步驟,我們就構(gòu)建并部署了一套解決方案,可以使用此方案檢查我們的AWS WAF配置,同時(shí)查看其正在發(fā)出哪些請(qǐng)求、以及這些請(qǐng)求是否被阻止/允許。
示例場(chǎng)景
下面,讓我們從示例場(chǎng)景出發(fā),看看這套解決方案的使用方法。我為自己的小狗創(chuàng)建了一個(gè)簡(jiǎn)單網(wǎng)站,并配置CloudFront以加快網(wǎng)站速度、提升安全水平。
圖九:Java the Dog網(wǎng)站主頁
接下來,我們配置一個(gè)AWS WAF Web ACL,并將其附加至當(dāng)前CloudFront分配當(dāng)中,這也是我這個(gè)小網(wǎng)站的入口點(diǎn)。在AWS WAF Web ACL中,我沒有添加任何規(guī)則,即允許所有請(qǐng)求流入。這樣一來,我就能夠記錄所有請(qǐng)求并準(zhǔn)確了解誰在訪問我的網(wǎng)站。接下來,按照前文中提到的步驟配置AWS WAF儀表板。
根據(jù)設(shè)想,我以為這個(gè)網(wǎng)站的用戶應(yīng)該主要來自美國(guó)、德國(guó)和日本,因?yàn)檫@法國(guó)斗牛犬在這三個(gè)國(guó)家特別受歡迎。但通過實(shí)際觀察,我發(fā)現(xiàn)來自印度的用戶相當(dāng)多,這確實(shí)有些出乎意料。在圖十中可以看到,AWS WAF儀表板提供包含所有四個(gè)國(guó)家的統(tǒng)計(jì)數(shù)據(jù),而指向此網(wǎng)站的訪問請(qǐng)求超過11000次。
圖十:Kibana儀表板,以及來自美國(guó)、日本、德國(guó)與印度的訪問請(qǐng)求
圖十一:僅觀察來自印度的網(wǎng)站訪問請(qǐng)求
儀表板顯示,前一個(gè)小時(shí)內(nèi)我的網(wǎng)站收到700多條來自印度的請(qǐng)求。這對(duì)我這個(gè)小網(wǎng)站無疑是個(gè)巨大的成功……但遺憾的是,所有請(qǐng)求都來自同一個(gè)IP地址。此外,其中大多帶有可疑的用戶代理標(biāo)頭:“secret-hacker-agent”。我們可以在Kibana的Visualize選項(xiàng)卡中看到這部分信息,如圖十二所示。
圖十二:Kibana儀表板中的Visualize選項(xiàng)卡
看起來情況不妙,所以我決定使用AWS WAF阻止這些請(qǐng)求。
那么,新的問題來了——我們到底該屏蔽掉什么?我當(dāng)然可以直接阻斷所有來自印度的請(qǐng)求,但這顯然不是最好的方法,因?yàn)榭赡苓€有其他來自印度的真正法國(guó)斗牛犬愛好者想看我的網(wǎng)站。我也可以直接阻止當(dāng)前惡意IP地址,但黑客完全可以使用其他IP繼續(xù)攻擊我的網(wǎng)站。最后,我決定創(chuàng)建一項(xiàng)用于檢查用戶代理標(biāo)頭的AWS WAF規(guī)則。如果用戶代理標(biāo)頭包含“secret-hacker-agent”,則該請(qǐng)求將被規(guī)則所阻止。
在AWS WAF規(guī)則部署完成的幾分鐘內(nèi),我注意到網(wǎng)站仍有來自印度的請(qǐng)求,但這一次,帶有可疑用戶代理標(biāo)頭的請(qǐng)求再也沒有出現(xiàn)!如圖十三所示,隨后出現(xiàn)了約2700項(xiàng)請(qǐng)求,但其中約2000項(xiàng)被阻止。
圖十三:被阻止的可疑請(qǐng)求
實(shí)際上,為了展示,我自己就是那個(gè)以secret-hacker-agent攻擊自己網(wǎng)站的壞人~大家可以通過以下命令行截屏看到,我那個(gè)帶有可疑用戶代理標(biāo)頭的請(qǐng)求(使用wget實(shí)現(xiàn))被正確阻止(接收到「403 Forbidden」消息)。而在使用其他標(biāo)頭(「good-agent」)時(shí),請(qǐng)求則可成功通過AWS WAF規(guī)則的過濾。
圖十四:運(yùn)行“wget”命令后的命令行截屏
總結(jié)
在本文中,我們?cè)敿?xì)介紹了如何通過幾個(gè)步驟為AWS WAF部署儀表板,以及如何利用它發(fā)現(xiàn)并阻止Web應(yīng)用程序攻擊。現(xiàn)在,您可以采用同樣的基本思路為自己的應(yīng)用程序部署這套解決方案了。如果您對(duì)本文中的解決方案及儀表板有任何建議或反饋,請(qǐng)?jiān)谙路皆u(píng)論區(qū)或者項(xiàng)目的GitHub頁面上與我們交流。
本文的創(chuàng)造靈感,源自我的好友Tom Adamski此前撰寫的另一篇博文,他在其中描述了如何使用Kibana與Amazon ES實(shí)現(xiàn)AWS WAF日志可視化。另外,也感謝Achraf Souk在AWS邊緣服務(wù)方面向我提供的幫助。
Original URL:https://aws.amazon.com/cn/blogs/security/deploy-dashboard-for-aws-waf-minimal-effort/
本篇作者
Tomasz Stachlewski
Tomasz是AWS公司高級(jí)解決方案架構(gòu)經(jīng)理,他負(fù)責(zé)幫助不同規(guī)模的企業(yè)(從初創(chuàng)公司到大型巨頭)推進(jìn)云探索之旅。他是無服務(wù)器架構(gòu)等創(chuàng)新型技術(shù)的忠實(shí)擁躉,致力于運(yùn)用這些技術(shù)幫助組織加速數(shù)字化轉(zhuǎn)型的步伐。