網路ACL(Access Control List)是在虛擬交換器上生效的規則,對經交換器跨子網的流量進行存取控制,與安全性群組結合使用可以達到縱深防禦的效果。
安全風險
安全性群組是執行個體維度(確切說是網卡維度),規定執行個體應該允許/禁止什麼網路訪問行為,考慮執行個體本身的業務屬性和安全需求。網路ACL是子網維度,規定跨子網通訊應該允許/禁止什麼網路訪問行為,考慮子網的業務屬性和安全需求。安全性群組實現了靈活的、細粒度的網路存取控制能力,結合網路ACL可以做有益補充。通過網路ACL規則疊加防護,可以避免執行個體忘記加入安全性群組或安全性群組規則誤配置帶來的網路風險。
流量進入VPC網路會先到達交換器,網路ACL相較於安全性群組、Cloud Firewall會更加前置,入方向流量先用網路ACL過濾掉非法流量,有助於節省後面的處理資源。對於出公網流量先到達交換器再到公網出口,出方向流量先用網路ACL過濾掉不必要流量,有助於節省公網出口頻寬。
最佳實務:使用網路ACL對安全性群組規則做補充
背景和挑戰
在雲端運算環境中,我們常常會遇到需要打通多個VPC(Virtual Private Cloud)的情境,以實現業務的互聯互連。例如,我們有兩個獨立的VPC:
VPC1 (10.200.0.0/16): 部署了需要訪問VPC2資源的應用。
VPC2 (10.1.0.0/16): 承載了多種業務執行個體,網路環境複雜。
初期,VPC2為了開發的便利性和業務的快速上線,其內部的安全性群組規則配置較為寬鬆,存在一些安全隱患。例如,部分安全性群組對整個10.0.0.0/8網段開放了連接埠,甚至一些僅用於內部訪問的ECS執行個體也配置了對所有來源 (0.0.0.0/0) 開放的規則。
當通過VPC對等串連(VPC Peering Connection)將VPC1和VPC2打通,旨在讓VPC1中的服務能訪問VPC2內10.1.38.0/24叢集的80連接埠時,這些潛在的安全風險便會暴露出來。僅僅為目的地組群(10.1.38.0/24)配置精確的安全性群組規則是遠遠不夠的。因為對等串連實際上是將VPC1的10.200.0.0/16網段和VPC2的10.1.0.0/16網段部分或全部互聯,VPC2中其他配置不當的執行個體和服務,也可能因此意外地暴露給VPC1,造成安全性漏洞。
解決方案:使用網路ACL加固邊界安全
為瞭解決上述問題,並建立一個清晰、可靠的安全邊界,我們可以在VPC2負責與VPC1對接的交換器上配置網路ACL。網路ACL作為一種無狀態的包過濾工具,作用於子網層級,能夠在流量進入或離開子網時進行過濾,可以將其理解為VPC子網的“防火牆”。通過它,我們可以實現比安全性群組更宏觀、更前置的安全控制。
具體的配置策略如下:
預設拒絕: 首先,在網路ACL中設定一條預設規則,拒絕所有來自VPC1網段 (10.200.0.0/16) 的入站流量,以及所有去往VPC1的出站流量。這建立了一個安全的基準,確保在沒有明確許可的情況下,兩個VPC之間無法通訊。
精確允許: 然後,再添加更高優先順序的規則,明確允許VPC1 (10.200.0.0/16) 與VPC2中目的地組群 (10.1.38.0/24) 之間通過80連接埠進行雙向通訊。
入站規則: 允許源地址為10.200.0.0/16,目標地址為10.1.38.0/24,協議為TCP,連接埠為80的流量進入。
出站規則: 允許源地址為10.1.38.0/24,目標地址為10.200.0.0/16,協議為TCP,使用臨時連接埠範圍的流量出去(響應流量)。
通過這種方式,交換器會首先通過網路ACL過濾掉所有非法的訪問請求,只有被明確允許的合法流量才會被轉寄到子網內的ECS執行個體。這樣,即便某些ECS執行個體自身綁定的安全性群組規則存在缺陷,也不會暴露給VPC1,從而極大地提升了跨VPC通訊的安全性。