共同創作者:Richie Liu, Ravenna Yang, Judy Chou
校閱者:Veck Hsiao
企業為了讓網站訪客或開發者能夠即時從 Google Cloud Storage 存取所需要的物件(object),Google Cloud Storage 管理者有時會因為方便性,將物件的存取權限設為 public access,作為公開網址來服務,讓任何人都可以即時瀏覽及下載需要的物件。但由於 Google Cloud Storage 本身沒有 DDoS 防禦機制,而且提供無額度上限的大頻寬空間,讓這個服務出現了一個漏洞,一旦公開的資源遭到惡意攻擊,系統無法自動識別和阻止這類異常流量,便可能導致企業難以及時發現異常。最終,企業在檢視帳單時才會發現大量非預期的費用暴增。
什麼是 DDoS?
分散式阻斷服務攻擊 (DDoS)攻擊是最容易造成前述悲劇的一種常見網路攻擊手法,攻擊者會透過大量且不間斷的存取服務的伺服器,造成伺服器過載而無法持續提供服務。
DDoS 攻擊可分為多種類型,包括:
- 流量型攻擊:透過大量數據流量(例如 UDP flood 或 SYN flood)充斥網絡,使頻寬被耗盡。
- 協議型攻擊:利用協議弱點進行攻擊,例如 TCP 的三向握手,使服務器處於半連接狀態,資源被占用。
- 應用層攻擊:針對應用層的操作,例如發送大量的 HTTP 請求,讓伺服器無法處理真實用戶請求。
DDoS 攻擊除了可能會造成服務被惡意流量佔據,導致真正需要服務資源的使用者無法存取外,更會因此產生巨量的網路流量,使後續帳單金額暴增。
如何在開放 Cloud Storage 存取的同時實施 DDoS 保護的兩大關鍵機制
如果想開放 Cloud Storage 的物件給外人存取,同時也想避免被 DDoS 攻擊(避免惡意地大量下載),可以怎麼做呢?
一、部署 Cloud CDN 搭配網頁應用程式防火牆(WAF) Cloud Armor
Cloud CDN 是一個全球性的內容快取(Content Delivery Network)服務,目的是在加速和優化使用者從 Google Cloud Platform 上的應用程式獲取靜態內容,從而提高訪問速度。
企業可以透過加入 Cloud CDN 的功能,將 Google Cloud Storage 的 bucket 作為 Cloud CDN 的源站(origin),使前次使用者存取的物件記錄留在 Cloud CDN 的記憶體內,後續的使用者再訪問相同物件時,會優先查詢 Cloud CDN 中是否已存在此物件,如果存在,就不必直接進入 Cloud Storage 內存取物件,若不存在或已過期(expired),才會回到源站存取或更新,進而降低 Google Cloud Storage 物件被訪問的次數。
此外,我們可以結合 Cloud Logging,設計一個 Cloud Function 來計算各個 IP 的請求次數,當某個 IP 的請求次數超過設定的閾值(threshold)時,將其加入到應用程式防火牆(WAF)中的規則中(例如黑名單規則),Google Cloud 的 Cloud Armor 就是這樣的服務,可以有效的進一步提升防護效果。
提醒您,如果要使用 Cloud Armor 預設的 Rate Limit 或地理位置偵測(geolocation)等 Cloud Armor 規則來進行防護,則需要在 Load Balancer 的 Backend Service 中選擇支援這些規則的服務(例如 Compute Engine, Google Kubernetes Engine 等),而非直接選擇 Google Cloud Storage。
二、使用 Cloud Function 存取 Google Cloud Storage 的 Signed URL
另一種架構則是可以透過建立一個 Cloud Function,提供使用者想要取得物件的時候,能透過 Google Cloud Storage 產生的 Signed URL 存取物該物件。
Signed URL 是一個特殊的連結,需要使用者的請求(例如瀏覽器或應用程式呼叫 API)帶有服務帳戶(service account)資訊,才能夠進行存取,因此只有擁有連結並通過驗證獲得授權的使使用者請求可以透過連結進入 Google Cloud Storage 並下載物件。
此外,這個連結是具有時效性的,當連結超過設定的時間後就會失效,令使用者只能在特定的時間內存取物件,無法任意無限次數地訪問。
Signed URL 雖然也可以直接在 Load Balancer 上進行設定,但選擇在 Load Balancer 後加上 Cloud Function 的架構,讓 Cloud Function 成為 Backend Service,可以額外運用 Cloud Armor 的防護策略(如 Rate Limit 和地理位置限制)來避免過量的存取。
總結
以上兩種方法,雖然都能有效阻擋惡意的流量攻擊,但仍然會增加額外的費用,例如大量的 logging 或 Cloud Function Invocation,但相較於遭受直接的 Google Cloud Storage 下載存取產生的鉅額費用,上述方法皆能大幅度降低這額外的成本,在協助企業防禦 DDoS 的目的上,除了避免荷包大失血,更重要的是確保雲端上的服務能正常運行,並增加攻擊者的困難度,在最後一道防線被攻陷之前,提早作出應變,如果需要進一步的 DDoS 防禦或雲端資源保護的資訊與支援,歡迎聯繫 iKala Cloud。
參考資料
[1] Web security best practices | Cloud CDN
[2] Cloud Armor Network Security | Google Cloud
[3] Configure advanced network DDoS protection | Google Cloud Armor