全部產品
Search
文件中心

Elastic Compute Service:ECS安全性群組實踐(入方向規則)

更新時間:Jun 19, 2024

您可以通過配置安全性群組規則,允許或禁止安全性群組內的ECS執行個體訪問公網或私網,實現對雲資源的存取控制和網路安全防護。本文介紹配置安全性群組的入方向規則的最佳實務。

安全性群組實踐建議

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

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

  • 最重要的規則:安全性群組應作為白名單使用。

  • 開放應用出入規則時應遵循最小授權原則。例如,您可以選擇開放具體的連接埠,如80連接埠。

  • 不應使用一個安全性群組管理所有應用,因為不同的分層一定有不同的需求。

  • 對於分布式應用來說,不同的應用類型應該使用不同的安全性群組,例如,您應對Web層、Service層、Database層、Cache層使用不同的安全性群組,暴露不同的出入規則和許可權。

  • 避免為每台執行個體單獨設定一個安全性群組,控制管理成本。

  • 優先考慮Virtual Private Cloud。

  • 不需要公網訪問的資源不必提供公網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-websg-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} ,

修改安全性群組規則步驟

修改安全性群組規則可能會影響您的執行個體間的網路通訊。為了保證必要的網路通訊不受影響,您應先嘗試以下方法允許存取必要的執行個體,再執行安全性群組策略收緊變更。

說明

執行收緊變更後,應觀察一段時間,確認業務應用無異常後再執行其它必要的變更。

  1. 建立一個安全性群組,將需要互連訪問的執行個體加入這個安全性群組。具體操作,請參見建立安全性群組安全性群組與ECS執行個體關聯的管理

  2. 根據授與類型選擇對應方式修改原有安全性群組規則。具體操作,請參見修改安全性群組規則

    • 如果授與類型為安全性群組訪問,則需要將互連訪問的對端執行個體所綁定的安全性群組ID添加為授權對象。

    • 如果授與類型為位址區段訪問,則需要將互連訪問的對端執行個體內網IP添加為授權對象。