本文在介紹如何配置安全組的入網(wǎng)規(guī)則以及安全組相關(guān)的信息的基礎(chǔ)上,重點探討了其具體步驟,本文內(nèi)容很緊湊,希望大家耐心學(xué)習(xí)。
在云端安全組提供類似虛擬防火墻功能,用于設(shè)置單個或多個 ECS 實例的網(wǎng)絡(luò)訪問控制,是重要的安全隔離手段。創(chuàng)建 ECS 實例時,您必須選擇一個安全組。您還可以添加安全組規(guī)則,對某個安全組下的所有 ECS 實例的出方向和入方向進行網(wǎng)絡(luò)控制。
本文主要介紹如何配置安全組的入網(wǎng)規(guī)則。
安全組相關(guān)的信息
在配置安全組的入網(wǎng)規(guī)則之前,您應(yīng)已經(jīng)了解以下安全組相關(guān)的信息:
安全組限制
安全組默認規(guī)則
設(shè)置安全組 In 方向的訪問權(quán)限
設(shè)置安全組 Out 方向的訪問權(quán)限
安全組實踐的基本建議
在開始安全組的實踐之前,下面有一些基本的建議:
最重要的規(guī)則:安全組應(yīng)作為白名單使用。
開放應(yīng)用出入規(guī)則時應(yīng)遵循“最小授權(quán)”原則,例如,您可以選擇開放具體的端口(如 80 端口)。
不應(yīng)使用一個安全組管理所有應(yīng)用,因為不同的分層一定有不同的需求。
對于分布式應(yīng)用來說,不同的應(yīng)用類型應(yīng)該使用不同的安全組,例如,您應(yīng)對 Web、Service、Database、Cache 層使用不同的安全組,暴露不同的出入規(guī)則和權(quán)限。
沒有必要為每個實例單獨設(shè)置一個安全組,控制管理成本。
優(yōu)先考慮 VPC 網(wǎng)絡(luò)。
不需要公網(wǎng)訪問的資源不應(yīng)提供公網(wǎng) IP。
盡可能保持單個安全組的規(guī)則簡潔。因為一個實例最多可以加入 5 個安全組,一個安全組最多可以包括 100 個安全組規(guī)則,所以一個實例可能同時應(yīng)用數(shù)百條安全組規(guī)則。您可以聚合所有分配的安全規(guī)則以判斷是否允許流入或留出,但是,如果單個安全組規(guī)則很復(fù)雜,就會增加管理的復(fù)雜度。所以,應(yīng)盡可能地保持單個安全組的規(guī)則簡潔。
調(diào)整線上的安全組的出入規(guī)則是比較危險的動作。如果您無法確定,不應(yīng)隨意更新安全組出入規(guī)則的設(shè)置。阿里云的控制臺提供了克隆安全組和安全組規(guī)則的功能。如果您想要修改線上的安全組和規(guī)則,您應(yīng)先克隆一個安全組,再在克隆的安全組上進行調(diào)試,從而避免直接影響線上應(yīng)用。
設(shè)置安全組的入網(wǎng)規(guī)則
以下是安全組的入網(wǎng)規(guī)則的實踐建議。
不要使用 0.0.0.0/0 的入網(wǎng)規(guī)則
允許全部入網(wǎng)訪問是經(jīng)常犯的錯誤。使用 0.0.0.0/0 意味著所有的端口都對外暴露了訪問權(quán)限。這是非常不安全的。正確的做法是,先拒絕所有的端口對外開放。安全組應(yīng)該是白名單訪問。例如,如果您需要暴露 Web 服務(wù),默認情況下可以只開放 80、8080 和 443 之類的常用TCP端口,其它的端口都應(yīng)關(guān)閉。
??{?"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"}?,
關(guān)閉不需要的入網(wǎng)規(guī)則
如果您當(dāng)前使用的入規(guī)則已經(jīng)包含了 0.0.0.0/0,您需要重新審視自己的應(yīng)用需要對外暴露的端口和服務(wù)。如果確定不想讓某些端口直接對外提供服務(wù),您可以加一條拒絕的規(guī)則。比如,如果您的服務(wù)器上安裝了 MySQL 數(shù)據(jù)庫服務(wù),默認情況下您不應(yīng)該將 3306 端口暴露到公網(wǎng),此時,您可以添加一條拒絕規(guī)則,如下所示,并將其優(yōu)先級設(shè)為100,即優(yōu)先級最低。
{?"IpProtocol"?:?"tcp",?"FromPort"?:?"3306",?"ToPort"?:?"3306",?"SourceCidrIp"?: ??????????"0.0.0.0/0",?"Policy":?"drop",?Priority:?100}?,
上面的調(diào)整會導(dǎo)致所有的端口都不能訪問 3306 端口,極有可能會阻止您正常的業(yè)務(wù)需求。此時,您可以通過授權(quán)另外一個安全組的資源進行入規(guī)則訪問。
授權(quán)另外一個安全組入網(wǎng)訪問
不同的安全組按照最小原則開放相應(yīng)的出入規(guī)則。對于不同的應(yīng)用分層應(yīng)該使用不同的安全組,不同的安全組應(yīng)有相應(yīng)的出入規(guī)則。
例如,如果是分布式應(yīng)用,您會區(qū)分不同的安全組,但是,不同的安全組可能網(wǎng)絡(luò)不通,此時您不應(yīng)該直接授權(quán) IP 或者 CIDR 網(wǎng)段,而是直接授權(quán)另外一個安全組 ID 的所有的資源都可以直接訪問。比如,您的應(yīng)用對 Web、Database 分別創(chuàng)建了不同的安全組:sg-web 和 sg-database。在sg-database 中,您可以添加如下規(guī)則,授權(quán)所有的 sg-web 安全組的資源訪問您的 3306 端口。
??{?"IpProtocol"?:?"tcp",?"FromPort"?:?"3306",?"ToPort"?:?"3306",?"SourceGroupId"?:?"sg-web",?"Policy":? ???????????????"accept",?Priority:?2}?,
授權(quán)另外一個 CIDR 可以入網(wǎng)訪問
經(jīng)典網(wǎng)絡(luò)中,因為網(wǎng)段不太可控,建議您使用安全組 ID 來授信入網(wǎng)規(guī)則。
VPC 網(wǎng)絡(luò)中,您可以自己通過不同的 VSwitch 設(shè)置不同的 IP 域,規(guī)劃 IP 地址。所以,在 VPC 網(wǎng)絡(luò)中,您可以默認拒絕所有的訪問,再授信自己的專有網(wǎng)絡(luò)的網(wǎng)段訪問,直接授信可以相信的 CIDR 網(wǎng)段。
????{?"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}?,
變更安全組規(guī)則步驟和說明
變更安全組規(guī)則可能會影響您的實例間的網(wǎng)絡(luò)通信。為了保證必要的網(wǎng)絡(luò)通信不受影響,您應(yīng)先嘗試以下方法放行必要的實例,再執(zhí)行安全組策略收緊變更。
注意:執(zhí)行收緊變更后,應(yīng)觀察一段時間,確認業(yè)務(wù)應(yīng)用無異常后再執(zhí)行其它必要的變更。
新建一個安全組,將需要互通訪問的實例加入這個安全組,再執(zhí)行變更操作。
如果授權(quán)類型為 安全組訪問,則將需要互通訪問的對端實例所綁定的安全組 ID 添加為授權(quán)對象;
如果授權(quán)類型為 地址段訪問,則將需要互通訪問的對端實例內(nèi)網(wǎng) IP 添加為授權(quán)對象。