輕松便捷為AWS WAF部署一套儀表板

來源: AWS
作者:AWS Team
時(shí)間:2020-09-02
17165
在本文中,我們將向大家介紹如何在Amazon Web Services(AWS)賬戶中部署一套解決方案,通過AWS Web Application Firewall(WAF)服務(wù)提供全自動(dòng)儀表板。

在本文中,我們將向大家介紹如何在Amazon Web Services(AWS)賬戶中部署一套解決方案,通過AWS Web Application Firewall(WAF)服務(wù)提供全自動(dòng)儀表板。這套解決方案使用由AWS WAF生成并收集到的日志記錄,并通過用戶友好型儀表板顯示相關(guān)結(jié)果,具體如圖一所示。

deploy-dashboard-for-aws-waf-minimal-effort1.png

圖一: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è)步驟,如圖二所示。

deploy-dashboard-for-aws-waf-minimal-effort2.png

圖二:構(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。

deploy-dashboard-for-aws-waf-minimal-effort4.png

圖三: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ù)及其附帶的指向儀表板的鏈接。

deploy-dashboard-for-aws-waf-minimal-effort5.png

圖四:輸出CloudFormation模板

在Kibana當(dāng)中,選擇Dashboard選項(xiàng)卡,如圖五所示,而后選擇表中的WAFDashboard。此項(xiàng)操作將調(diào)用AWS WAF儀表板。目前的儀表板應(yīng)該還沒有內(nèi)容,因?yàn)槠渖形磁cAWS WAF連接。

deploy-dashboard-for-aws-waf-minimal-effort6.png

圖五:空白Kibana儀表板

步驟4:接入AWS WAF日志

deploy-dashboard-for-aws-waf-minimal-effort7.png

圖六:WAF&Shield

如果您還沒有啟用AWS WAF日志,則需要立即進(jìn)行操作以繼續(xù)下一步。請(qǐng)?jiān)赪eb ACL中選擇Logging and metrics,而后選擇Enable logging,如圖七所示。

deploy-dashboard-for-aws-waf-minimal-effort8.png

圖七:?jiǎn)⒂肁WS WAF日志

在Amazon Kinesis Data Firehose Delivery Stream之下選擇下拉列表,而后選擇由模板在步驟2中創(chuàng)建完成的Kinesis Firehose。其名稱以aws-waf-logs開頭。保存您的更改。

deploy-dashboard-for-aws-waf-minimal-effort9.png

圖八:選擇創(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)站速度、提升安全水平。

deploy-dashboard-for-aws-waf-minimal-effort10.png

圖九: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次。

deploy-dashboard-for-aws-waf-minimal-effort11.png

圖十:Kibana儀表板,以及來自美國(guó)、日本、德國(guó)與印度的訪問請(qǐng)求

deploy-dashboard-for-aws-waf-minimal-effort12.png

圖十一:僅觀察來自印度的網(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)卡中看到這部分信息,如圖十二所示。

deploy-dashboard-for-aws-waf-minimal-effort13.png

圖十二: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)被阻止。

deploy-dashboard-for-aws-waf-minimal-effort14.png

圖十三:被阻止的可疑請(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ī)則的過濾。

deploy-dashboard-for-aws-waf-minimal-effort15.png

圖十四:運(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/

本篇作者

1599011960(1).png

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)型的步伐。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于AWS,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家