阿里雲伺服器ECS安全組操作介紹
一.本文將介紹安全組的以下幾個內容:
授權 和 撤銷 安全組規則。
加入安全組 和 離開安全組。
阿里雲的網路型別分為 經典網路 和 VPC,它們對安全組支援不同的設定規則:
如果是經典網路,您可以設定以下幾個規則:內網入方向、內網出方向、公網入方向和公網出方向。
如果是 VPC 網路,您可以設定:入方向 和 出方向。
二.安全組內網通訊的概念
預設只有同一個安全組的 ECS 例項可以網路互通。即使是同一個賬戶下的 ECS 例項,如果分屬不同安全組,內網網路也是不通的。這個對於經典網路和 VPC 網路都適用。所以,經典網路的 ECS 例項也是內網安全的。
如果您有兩臺 ECS 例項,不在同一個安全組,您希望它們內網不互通,但實際上它們卻內網互通,那麼,您需要檢查您的安全組內網規則設定。如果內網協議存在下面的協議,建議您重新設定。
允許所有埠;
授權物件為 CIDR 網段 (SourceCidrIp):0.0.0.0/0 或者 10.0.0.0/8 的規則。
如果是經典網路,上述協議會造成您的內網暴露給其它的訪問。
如果您想實現在不同安全組的資源之間的網路互通,您應使用安全組方式授權。對於內網訪問,您應使用源安全組授權,而不是 CIDR 網段授權。
三. 安全規則的屬性
安全規則主要是描述不同的訪問許可權,包括如下屬性:
Policy:授權策略,引數值可以是 accept(接受)或 drop(拒絕)。
Priority:優先順序,根據安全組規則的建立時間降序排序匹配。規則優先順序可選範圍為 1-100,預設值為 1,即最高優先順序。數字越大,代表優先順序越低。
NicType:網路型別。如果只指定了 SourceGroupId 而沒有指定 SourceCidrIp,表示通過安全組方式授權,此時,NicType 必須指定為 intranet。
規則描述:
IpProtocol:IP 協議,取值:tcp | udp | icmp | gre | all。all 表示所有的協議。
PortRange:IP 協議相關的埠號範圍:
IpProtocol 取值為 tcp 或 udp 時,埠號取值範圍為 1~65535,格式必須是“起始埠號/終止埠號”,如“1/200”表示埠號範圍為1~200。如果輸入值為“200/1”,介面呼叫將報錯。
IpProtocol 取值為 icmp、gre 或 all 時,埠號範圍值為 -1/-1,表示不限制埠。
如果通過安全組授權,應指定 SourceGroupId,即源安全組 ID。此時,根據是否跨賬號授權,您可以選擇設定源安全組所屬的賬號 SourceGroupOwnerAccount;
如果通過 CIDR 授權,應指定 SourceCidrIp,即源 IP 地址段,必須使用 CIDR 格式。
四. 授權一條入網請求規則
在控制檯或者通過 API 建立一個安全組時,入網方向預設 deny all,即預設情況下您拒絕所有入網請求。這並不適用於所有的情況,所以您要適度地配置您的入網規則。
比如,如果您需要開啟公網的 80 埠對外提供 HTTP 服務,因為是公網訪問,您希望入網儘可能多訪問,所以在 IP 網段上不應做限制,可以設定為 0.0.0.0/0,具體設定可以參考以下描述,其中,括號外為控制檯引數,括號內為 OpenAPI 引數,兩者相同就不做區分。
網絡卡型別(NicType):公網(internet)。如果是 VPC 型別的只需要填寫 intranet,EIP 實現公網訪問。
授權策略(Policy):允許(accept)。
規則方向(NicType):入網。
協議型別(IpProtocol):TCP(tcp)。
埠範圍(PortRange):80/80。
授權物件(SourceCidrIp):0.0.0.0/0。
優先順序(Priority): 1。
注意:上面的建議僅對公網有效。內網請求不建議使用 CIDR 網段,請參考 經典網路的內網安全組規則不要使用 CIDR 或者 IP 授權。
五. 禁止一個入網請求規則
禁止一條規則時,您只需要配置一條拒絕策略,並設定較低的優先順序即可。這樣,當有需要時,您可以配置其它高優先順序的規則覆蓋這條規則。例如,您可以採用以下設定拒絕 6379 埠被訪問。
網絡卡型別(NicType):內網(intranet)。
授權策略(Policy):拒絕(drop)。
規則方向(NicType):入網。
協議型別(IpProtocol):TCP(tcp)。
埠範圍(PortRange):6379/6379。
授權物件(SourceCidrIp):0.0.0.0/0。
優先順序(Priority):100。
六.經典網路的內網安全組規則不要使用 CIDR 或者 IP 授權
為了安全考慮,不建議開啟任何基於 CIDR 網段的授權。
對於彈性計算來說,內網的 IP 經常變化,另外,這個 IP 的網段是沒有規律的,所以,對於經典網路的內網,建議您通過安全組授權內網的訪問。
例如,您在安全組 sg-redis 上構建了一個 redis 的叢集,為了只允許特定的機器(如 sg-web)訪問這個 redis 的伺服器編組,您不需要配置任何 CIDR,只需要新增一條入規則:指定相關的安全組 ID 即可。
網絡卡型別(NicType):內網(intranet)。
授權策略(Policy):允許(accept)。
規則方向(NicType):入網。
協議型別(IpProtocol):TCP(tcp)。
埠範圍(PortRange):6379/6379。
授權物件(SourceGroupId):sg-web。
優先順序(Priority):1。
對於 VPC 型別的例項,如果您已經通過多個 VSwitch 規劃好自己的 IP 範圍,您可以使用 CIDR 設定作為安全組入規則;但是,如果您的 VPC 網段不夠清晰,建議您優先考慮使用安全組作為入規則。
七. 將需要互相通訊的 ECS 例項加入同一個安全組
一個 ECS 例項最多可以加入 5 個安全組,而同一安全組內的 ECS 例項之間是網路互通的。如果您在規劃時已經有多個安全組,而且,直接設定多個安全規則過於複雜的話,您可以新建一個安全組,然後將需要內網通訊的 ECS 例項加入這個新的安全組。
安全組是區分網路型別的,一個經典網路型別的 ECS 例項只能加入經典網路的安全組;一個 VPC 型別的 ECS 例項只能加入本 VPC 的安全組。
這裡也不建議您將所有的 ECS 例項都加入一個安全組,這將會使得您的安全組規則設定變成夢魘。對於一箇中大型應用來說,每個伺服器編組的角色不同,合理地規劃每個伺服器的入方向請求和出方向請求是非常有必要的。
在控制檯上,您可以根據文件 加入安全組 的描述將一個例項加入安全組。
如果您對阿里雲的 OpenAPI 非常熟悉,您可以參考 使用 OpenAPI 彈性管理 ECS 例項,通過 OpenAPI 進行批量操作。對應的 Python 片段如下。
八. 將 ECS 例項移除安全組
如果 ECS 例項加入不合適的安全組,將會暴露或者 Block 您的服務,這時您可以選擇將 ECS 例項從這個安全組中移除。但是在移除安全組之前必須保證您的 ECS 例項已經加入其它安全組。
注意:將 ECS 例項從安全組移出,將會導致這個 ECS 例項和當前安全組內的網路不通,建議您在移出之前做好充分的測試。
對應的 Python 片段如下。
九. 定義合理的安全組名稱和標籤
合理的安全組名稱和描述有助於您快速識別當前複雜的規則組合。您可以通過修改名稱和描述來幫助自己識別安全組。
您也可以通過為安全組設定標籤分組管理自己的安全組。您可以在控制檯直接 設定標籤,也通過 API 設定標籤。
十.刪除不需要的安全組