公開讓大家存取的API,有的時候沒有驗證機制的保護,可能會被不同來源攻擊,再說就算有驗證機制,別人也可以登入後取得 token ,然後在短時間發出大量 Request 攻擊 API 。
為了防止 API 被攻擊,或者提早回應帶有錯誤內容的 Request , AWS 提供了 WAF 幫助開發人員保護系統的 API 。下面會介紹如何在 AWS 設定 WAF 保護 API Gateway 的 API 。
要使用WAF,先進到WAF頁面,並新增 Web ACLs
,接著按照流程依序設定。
點選 Create web ACL
之後,進到新增頁面,選擇要把這個 WAF 綁到哪個 AWS 服務進行保護。
這邊提供了 Load Balancer 、 API Gateway 、 AppSync GraphQL 等多種 AWS 服務,選了AWS服務之後,再繼續選該服務底下,要綁定的資源。
按下 Add
之後,會回到新增 WAF 的頁面,就可以看到剛才選擇的資源被綁到這個 WAF 。由於我是選擇 API Gateway ,所以跳回這個頁面的時候,可以看到 Web request body inspection
,可以在這裡決定 Request body 大小的限制。
Step 2 主要要訂這個 WAF 的規則,開發人員可以選擇使用別人訂好的規則或自己訂規則,如果要使用別人訂好的規則,右上角 Add rules
選擇 Add managed rule groups
,如果要自己訂規則,則選擇 Add my own rules and rule groups
。
選擇別人的規則,除了 AWS 自己所提供的之外,還有多間公司可以選擇
AWS的部分,有的規則需要額外付費。
有的只扣 Capacity ,兩種都可以直接加到 web ACL 。
如果要使用其他公司的,則需要先去AWS Marketplace訂閱,通常是扣Capacity,沒有額外的費用。
Capacity的部分,預設是1500,超過1500要額外收費。
這部分可以使用 Rule builder
幫忙設計保護API的規則。
可以選擇 Request 要符合或不符合哪些條件,讓 WAF 進行 Block 或允許通行。檢查的條件如果是 Regular rule
,可以選擇要針對 Request body 、 header 、 cookies 或 query parameter 等跟 Request 內容有關的當條件。
如果要現在呼叫 API 的次數,可以選擇跟存取 API 次數有關的 Rate-base rule
,設定多少時間內, IP 存取 API 的次數,並設定 IP 的來源,以及要針對單一 IP 還是所有 IP 。
然後 Action 再決定是要 Block 、 Allow ,或者單純的做統計。
規則設計好之後,回到 Step 2 的頁面,可以看到多一條規則在 Rules ,並且顯示用了多少 Capacity 。
由於開發人員可能會設計多條規則,有的要允許,有的要限制,不同規則的邏輯很有可以能會打架,所以開發人員需要在這個頁面調整規則的優先順序。
接著需要設定 metrics ,選擇要不要把符合規則的 Request 記錄下來。
最後 review 剛才的設定,就可以新增 web ACL 了。
新增完之後就可以回到**Web ACLs
**看到了。
設定好 WAF 之後,可以簡單測試一下 WAF ,我在這個 WAF 設定的規則是5分鐘內不能超過10次的呼叫。
用 Postman 簡單測試一下,超過次數時,會出現 403 ,這就是 WAF 真的發揮作用!!