天天看點

【ECS】ECS安全組實踐——入方向規則的最佳實踐

安全組實踐建議

您在雲端安全組提供類似虛拟防火牆功能,用于設定單台或多台ECS執行個體的網絡通路控制,是重要的安全隔離手段。建立ECS執行個體時,您必須選擇一個安全組。您還可以添加安全組規則,對某個安全組下的所有ECS執行個體的出方向和入方向進行網絡控制。

在使用安全組前,您應先了解以下實踐建議:

  • 最重要的規則:安全組應作為白名單使用。
  • 開放應用出入規則時應遵循最小授權原則。例如,您可以選擇開放具體的端口,如80端口。
  • 不應使用一個安全組管理所有應用,因為不同的分層一定有不同的需求。
  • 對于分布式應用來說,不同的應用類型應該使用不同的安全組,例如,您應對Web層、Service層、Database層、Cache層使用不同的安全組,暴露不同的出入規則和權限。
  • 避免為每台執行個體單獨設定一個安全組,控制管理成本。
  • 優先考慮專有網絡VPC。
  • 不需要公網通路的資源不應提供公網IP。
  • 盡可能保持單個安全組的規則簡潔。因為一台執行個體最多可以加入五個安全組,一個安全組最多可以包括200條安全組規則,是以一台ECS執行個體可能同時應用數百條安全組規則。您可以聚合所有配置設定的安全規則以判斷是否允許流入或流出,但是,如果單個安全組規則很複雜,就會增加管理的複雜度。
  • 阿裡雲的控制台提供了克隆安全組和安全組規則的功能。如果您想要修改線上的安全組和規則,您應先克隆一個安全組,再在克隆的安全組上進行調試,避免直接影響線上應用。

    說明 調整線上的安全組的出入規則是比較危險的動作。如果您無法确定,不應随意更新安全組出入規則的設定。

避免設定0.0.0.0/0授權對象

允許全部入網通路是經常犯的錯誤。使用0.0.0.0/0意味着所有的端口都對外暴露了通路權限。這是非常不安全的。正确的做法是,先拒絕所有的端口對外開放。安全組應該是白名單通路。例如,如果您需要暴露Web服務,預設情況下可以隻開放80、8080和443之類的常用TCP端口,其它的端口都應關閉。

{ "IpProtocol" : "tcp", "FromPort" : "80", "ToPort" : "80", "SourceCidrIp" : "0.0.0.0/0", "Policy": "accept"} ,
{ "IpProtocol" : "tcp", "FromPort" : "8080", "ToPort" : "8080", "SourceCidrIp" : "0.0.0.0/0", "Policy": "accept"} ,
{ "IpProtocol" : "tcp", "FromPort" : "443", "ToPort" : "443", "SourceCidrIp" : "0.0.0.0/0", "Policy": "accept"} ,      

關閉不需要的入網規則

如果您目前使用的入規則已經包含了0.0.0.0/0,您需要重新審視自己的應用需要對外暴露的端口和服務。如果确定不想讓某些端口直接對外提供服務,您可以加一條拒絕的規則。例如,如果您的伺服器上安裝了MySQL資料庫服務,預設情況下您不應該将3306端口暴露到公網,此時,您可以添加一條拒絕規則,如下所示,并将其優先級設為100,即優先級最低。

{ "IpProtocol" : "tcp", "FromPort" : "3306", "ToPort" : "3306", "SourceCidrIp" : "0.0.0.0/0", "Policy": "drop", Priority: 100} ,      

上面的調整會導緻所有的端口都不能通路3306端口,極有可能會阻止您正常的業務需求。此時,您可以通過授權另外一個安全組的資源進行入規則通路。

以安全組為授權對象添加規則

不同的安全組按照最小原則開放相應的出入規則。對于不同的應用分層應該使用不同的安全組,不同的安全組應有相應的出入規則。

例如,如果是分布式應用,您會區分不同的安全組,但是,不同的安全組可能網絡不通,此時您不應該直接授權IP或者CIDR網段,而是直接授權另外一個安全組ID的所有的資源都可以直接通路。例如,您的應用對Web、Database分别建立了不同的安全組:sg-web和sg-database。在sg-database中,您可以添加如下規則,授權所有的sg-web安全組的資源通路您的3306端口。

{ "IpProtocol" : "tcp", "FromPort" : "3306", "ToPort" : "3306", "SourceGroupId" : "sg-web", "Policy": "accept", Priority: 2} ,      

以IP位址段為授權對象添加規則

經典網絡中,因為網段不太可控,建議您使用安全組ID來授信入網規則。

VPC網絡中,您可以自己通過不同的vSwitch設定不同的IP域,規劃IP位址。是以,在VPC網絡中,您可以預設拒絕所有的通路,再授信自己的專有網絡的網段通路,直接授信可以相信的CIDR網段。

{ "IpProtocol" : "icmp", "FromPort" : "-1", "ToPort" : "-1", "SourceCidrIp" : "10.0.0.0/24", Priority: 2} ,
{ "IpProtocol" : "tcp", "FromPort" : "0", "ToPort" : "65535", "SourceCidrIp" : "10.0.0.0/24", Priority: 2} ,
{ "IpProtocol" : "udp", "FromPort" : "0", "ToPort" : "65535", "SourceCidrIp" : "10.0.0.0/24", Priority: 2} ,      

變更安全組規則步驟

變更安全組規則可能會影響您的執行個體間的網絡通信。為了保證必要的網絡通信不受影響,您應先嘗試以下方法放行必要的執行個體,再執行安全組政策收緊變更。

說明 執行收緊變更後,應觀察一段時間,确認業務應用無異常後再執行其它必要的變更。
  • 建立一個安全組,将需要互通通路的執行個體加入這個安全組,再執行變更操作。
  • 如果授權類型為安全組通路,則将需要互通通路的對端執行個體所綁定的安全組ID添加為授權對象。
  • 如果授權類型為位址段通路,則将需要互通通路的對端執行個體内網IP添加為授權對象。

具體操作指引請參見

添加安全組規則