應用上雲除了對資源生命周期管理和應用傳遞是一個轉變,更重要是思維方式的轉變。本篇文章就簡單介紹下上雲的一個重要概念安全組(security group)。本文是安全組系列的第一篇,主要介紹安全組的基本概念、限制和如何配置入網規則。
安全組在雲端提供類似虛拟防火牆功能,用于設定單個或多個 ecs 執行個體的網絡通路控制,它是重要的安全隔離手段。在建立 ecs 執行個體時,必須選擇一個安全組。您還可以添加安全組規則,對該安全組下的所有 ecs 執行個體的出方向和入方向進行網絡控制。
安全組有下面的限制:
每個賬戶最多可以建立50個安全組,每個安全組最多100個安全組規則
一個執行個體最多可以加入5個同種網絡類型的安全組
同一個安全組之内的資源預設是網絡通的,不同安全組之間的資源預設是網絡不通
安全組應該是白名單的性質的,是以需要盡量開通最小的權限,預設拒絕所有的通路
單個安全組最大支援1000個執行個體
當您建立一個安全組的時候,預設規則均為出方向 accept all,入方向 deny all。安全組的出入規則,很多客戶在使用的時候并沒有按照自己的應用規範劃分。使得自己的應用加大了收到攻擊的風險。
安全組的出入規則可以參見下面的文檔:
<a href="https://help.aliyun.com/document_detail/25554.html">安全組in方向的通路權限設定</a>
<a href="https://help.aliyun.com/document_detail/25560.html">安全組out方向的通路權限設定</a>
除了可以限制ip和cidr網段之外,安全組的出入規則可以直接引用另外一個安全組,這樣就避免了有些時候cidr或者ip的不靈活,直接對另外一個安全組中的資源授權。通過這樣間接的可以通過安全組對應用進行分層。
安全組的入網規則,可以設定為另外一個相同網絡類型(“專有網絡”或”經典網絡”)的安全組。屬性為<code>sourcegroupid</code>
安全組的出網規則,可以設定為另外一個相同網絡類型(“專有網絡”或”經典網絡”)的安全組。屬性為<code>destgroupid</code>
出入規則是可以設定<code>priority</code>來設定權重,1為最高,100為最低
安全組也支援跨帳号授權,這個屬于進階功能,我們在以後的文章介紹
在上雲的時候,很多的客戶沒有重視安全組的出入規則的設定和長遠的規劃,影響了自己的業務擴充性。合理的規劃安全組是能幫助應用降低被攻擊的風險,同時可以幫助應用之間的結構和層次更清晰。下面是安全組最佳實踐的第一篇。
在開始安全組的實踐之前,下面有一些基本的建議。
首先安全組應該作為白名單使用, 這是最重要的規則。
使用最小的原則開放自己的應用出入規則,例如可以選擇開放具體的端口例如80。
使用一個安全組來管理所有的應用将會非常難以配置,因為不同的分層一定有不同的需求。
對于今天的常見的分布式應用來說,不同的應用類型應該使用不同的安全組,例如我們對web、service、database、cache層使用不同的安全組暴漏不同的出入規則和權限。
也沒有必要為每個執行個體設定一個安全組,這樣管理起來的成本也非常高。
優先考慮vpc網絡
不需要公網通路的資源不要提供公網ip
因為一個執行個體可以配置設定多個安全組,是以一個執行個體可能同時應用數百條規則。我們聚合所有配置設定的安全規則以判斷是否允許流入或留出,但龐大的安全組規則可能會增加您管理上的複雜程度。是以,我們建議您盡可能保持單個安全組的規則簡潔。
<code>調整線上的安全組的出入規則是比較危險的動作,如果您不确定的情況下不要随意的更新安全組的出入規則的設定。</code> 阿裡雲的控制台提供了克隆安全組和安全組規則的功能,您在修改安全組和規則的時候建議clone一個相同的安全組,然後進行調試,避免直接影響線上應用。
本文先介紹一些安全組的入網規則的實踐建議。
允許全部入網通路是經常犯的錯誤。使用0.0.0.0/0意味着所有的端口都對外暴漏了通路權限。這個是非常的不安全的。是以正确的做法是首先拒絕所有的端口對外開放。安全組應該是白名單通路。如果您需要暴漏服務,如果是web服務,預設情況下可以隻開放 80、8080、443之類的常用tcp端口。其它的端口都關閉。
如果您目前使用的入規則已經包含了0.0.0.0/0。首先您要重新審視下自己的應用需要對外暴漏的端口和服務。在确定某些端口是不想直接對外提供服務的可以加一條拒絕的規則。如果您的伺服器上也自己安裝了mysql資料庫服務,預設情況下您是不應該暴漏3306到公網的。您可以添加一條拒絕規則如下所示,下面的規則添加了一條拒絕規則。先将其設定的優先級為100,優先級最低。
上面的調整直接将導緻所有的端口都不能通路3306。這樣非常有可能阻止您的正常的業務需求。您可以通過授權另外一個安全組的資源進行如規則通路。
不同的安全組按照最小原則開放相應的出入規則。對于不同的應用分層應該使用不同的安全組,不同的安全組相應的出入規則。
例如對于常見的分布式應用,我們都會區分不同的安全組,由于不同的安全組可能網絡是不能通訊的,這個時候直接授權ip或者cidr網段就是非常痛苦的,我們可以直接授權另外一個安全組id的所有的資源都可以直接通路。例如我們的應用對web、database建立了不同的安全組, <code>sg-web</code>, <code>sg-databse</code>。在sg-database中我們可以加一條下面的規則,授權所有的<code>sg-web</code>安全組的資源可以通路我們的3306端口。
經典網絡中由于網段不太可控,我們建議您使用安全組id來授信入網規則,但是vpc中我們的ip位址是可以自己規劃的,您可以通過不同的vswitch來設定不同的ip域。
在vpc環境中,我們可以預設的拒絕所有的通路。然後授信自己的專有網絡的網段可以通路。通過直接授信可以相信的cidr網段。
變更安全組規則可能會導緻您的執行個體間網絡通信受到影響,為避免必要的網絡通信受到影響,請嘗試以下方法先放行必要的執行個體,再執行安全組政策收緊變更。執行收緊變更後請觀察一段時間,确認業務應用無異常後再執行其它必要的變更
将需要互通通路的執行個體,加入同一個安全組再執行變更操作。您可以選擇建立一個安全組,将需要互通的執行個體加入這個新的安全組後,安全組内的執行個體内網即可互通。
将需要互通通路的對端執行個體所綁定的安全組id,添加到執行個體安全組授權規則中;
将需要互通通路的對端執行個體内網ip,添加到執行個體安全組授權規則中;