WordPress with AWS Cloudfront & WAF

在這一兩年建站初期,這個站就很單純的放在AWS東京Region,一來台灣AWS沒有提供EC2的服務,二來其實速度也不慢。我比較過東京和新加坡速度,現在跨國頻寬算是順暢的,島內島外對我來說沒什麼感覺,而我又比較偏愛日本一點我就決定放在東京。

這幾天再研究Google Sheet網頁爬蟲的時候,發現本來能夠爬蟲的網站因為躲到Cloudflare後面,我就再也爬不到了。我稍微研究了一下Cloudflare,也就是CDN(Content Delivery Network)和WAF(Web Application Firewall)的服務。突然發現我應該能夠用在我的Blog,針對靜態內容做本地快取,會讓瀏覽的感受更好,WAF也可以增加一些安全性,畢竟其實我跟Linux並不是這麼的孰悉。

我開始註冊Cloudflare,一路設定到最後才發現必須要把Name Server整個指過去!如此會把我的整個架構打亂,因為除了Mail代管我放在Google之外,我幾乎整套都放在AWS上。Route53 / S3 / Lightsail / EC2 …如果把DNS移到CloudFlare,整合度感覺就變得很差。

所以,我想想AWS應該也是有類似的服務,所以就找到了下面三項:

AWS Cloudfront(CDN)

官網連結(新分頁)

AWS WAF

官網連結(新分頁)

AWS Shield

官網連結(新分頁)

後來去設定Route53,發現其實他有說明,當你開始使用Route53的時候,也就同時啟用了AWS Shield Standard了。

AWS Shield 提供兩種版本的服務:詳細請參見這裡我就不另外敖述了(新分頁)

AWS Shield Standard AWS Shield Advanced
快速偵測 增強型偵測
內嵌的攻擊降低功能 進階攻擊風險降低
  可見性與攻擊通知
  DDoS 費用保護
  專業支援
  全球可用性

標準型不另外收費,進階型的費用很嚇人,應該是商業等級的,我想我這種Blog不會需要的,所以就不繼續介紹了。

接著來說Cloudfront。WordPress 有Plug-in 跟可以直接設定Cloudfront,實在是好方便阿

安裝好之後你先按照這篇文章(新分頁)設定好AWS帳號和權限。裡面大致上的意思就是,建立一個能只能存取Cloudfront Full Access的User。在AWS的世界,所有的應用程式帳號都應該是獨立帳號而且要限縮到最小的權限這樣才能避免在網路世界中諸多的資安事件。雖然是英文,但是應該不需要我另外在寫一篇吧?看圖照做很容易。

我本來設定好帳號,然後進入Cloudfront頁面,自己手動新增,後來才發現,原來WordPress的這個Amazon AWS CDN Plug-in,非常貼心,你只要把剛剛申請的帳號的新增Access Key/Secure Key 填上去,選一下Price Class(美國/加拿大/歐洲、美國/加拿大/歐洲/中東/非洲、全部節點三種價格些許不同,可以自己去查一下),然後Create Distribution,如果你的帳號設置沒有問題,你的Cloudfront Console就會出現這個Plug-in幫你產生的設定而且即刻開始同步。

這是成功建立的畫面,你再去按Reload

按一下Active XXXXXX.cloudfront.net

他就會啟用,如果你喜歡用自己的Domain name: CDN.XXX.XXX.XXX,DNS可以先建立好指到前面這個Cloudfront,也是可以的。

可以到AWS Cloudfront的頁面點開看一下

他預設會使用Cloudfront的SSL憑證,我個人就是喜歡用自己Domain Name的憑證,所以就在AWS的Certificate Manager申請一個自己的Domain 憑證然後掛上去。

如果你的網站有https必須要關注下面的設定(迷之音:現在還不把網站掛上SSL憑證,很快主流的瀏覽器都會擋掉了。)

他一開始狀態會是In Progress/處理中之類的,一段時間之後(端看你網站大小),他就會變成已部署。

這時候你可以用瀏覽器的私密模式去看看。網站跑完Chrome按一下F12

你就會看到很多東西是從Cloudfront傳送過來的而不是從你的網站Out put出來。

Cloudfront是用流量計費,LightSail流出也有計費。但是好加在如果從Lightsail/S3等等流出去到Cloudfront是不會計費的。所以應該不會有重複收費的問題。

如果你的網站掛上Cloudfront有些動態功能有點怪怪的

建議你可以把這兩個選擇性的勾起試試看看,我的下拉選單圖示沒勾的時候,變成方格,勾了以後才正常。

再來講AWS WAF。

AWS WAF和Shield是做在同一個Console,WAF可以選Region,如果想連結Cloudfront,請選擇,Global(Front)設定前請先先好Region不然設定錯又要重來了。

Region選定之後,按Create,名稱描述請隨意,下面選Cloudfront 

然後按下面的Add AWS resources

他會列出你所有的Cloudfront資源,選定你要的然後Add然後Next

接著新增Rule,這裡要說明一下Managed rule group,是指AWS或第三方廠商維護的Role,Managed rule一條一個月一塊美金,如果是AWS自己維護的Rule不在另計時數費用,如果是第三方廠商維護的Rule端看他的時數費用怎麼計算。

因為我只是小小的Blog,所以我就選用AWS管理的Role

然後下面的Default action通常是Allow,如果你選到Block意思是預設阻絕..沒人能連你的網站。

如果你有多條Rule,可以調整判斷順序

這裡我有加入CloudWatch,看你需不需要

最後Review完你就可以Create web ACL

回到Web ACL,可以看一些統計資料

以上打完收工。

要注意雲端很多服務都是計費的,有計流量、計時間的、計數量的,使用之前請詳閱價格說明書,以免收到帳單的時候傻掉。