云服務器實踐:配置安全組(二)
云服務器自帶的安全組設置可以提供虛擬防火墻功能,達到重要的安全隔離手段。那么創(chuàng)建ECS云服務器時怎么樣來配置安全組呢?上期說到了配置安全組的入網規(guī)則和安全組內網通訊的概念,本文接著闡述下安全規(guī)則的屬性。
阿里云的網絡類型分為 經典網絡 和 VPC,它們對安全組支持不同的設置規(guī)則:
· 如果是經典網絡,您可以設置以下幾個規(guī)則:內網入方向、內網出方向、公網入方向和公網出方向。
· 如果是 VPC 網絡,您可以設置:入方向 和 出方向。
安全規(guī)則的屬性
安全規(guī)則主要是描述不同的訪問權限,包括如下屬性:
· Policy:授權策略,參數值可以是 accept(接受)或 drop(拒絕)。
· Priority:優(yōu)先級,根據安全組規(guī)則的創(chuàng)建時間降序排序匹配。規(guī)則優(yōu)先級可選范圍為 1-100,默認值為 1,即最高優(yōu)先級。數字越大,代表優(yōu)先級越低。
· NicType:網絡類型。如果只指定了 SourceGroupId 而沒有指定 SourceCidrIp,表示通過安全組方式授權,此時,NicType 必須指定為 intranet。
· 規(guī)則描述:
· 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 格式。
授權一條入網請求規(guī)則
在控制臺或者通過 API 創(chuàng)建一個安全組時,入網方向默認 deny all,即默認情況下您拒絕所有入網請求。這并不適用于所有的情況,所以您要適度地配置您的入網規(guī)則。
比如,如果您需要開啟公網的 80 端口對外提供 HTTP 服務,因為是公網訪問,您希望入網盡可能多訪問,所以在 IP 網段上不應做限制,可以設置為 0.0.0.0/0,具體設置可以參考以下描述,其中,括號外為控制臺參數,括號內為 OpenAPI 參數,兩者相同就不做區(qū)分。
· 網卡類型(NicType):公網(internet)。如果是 VPC 類型的只需要填寫 intranet,通過 EIP 實現公網訪問。
· 授權策略(Policy):允許(accept)。
· 規(guī)則方向(NicType):入網。
· 協議類型(IpProtocol):TCP(tcp)。
· 端口范圍(PortRange):80/80。
· 授權對象(SourceCidrIp):0.0.0.0/0。
· 優(yōu)先級(Priority): 1。
說明 上面的建議僅對公網有效。內網請求不建議使用 CIDR 網段,請參考 經典網絡的內網安全組規(guī)則不要使用 CIDR 或者 IP 授權。
禁止一個入網請求規(guī)則
禁止一條規(guī)則時,您只需要配置一條拒絕策略,并設置較低的優(yōu)先級即可。這樣,當有需要時,您可以配置其它高優(yōu)先級的規(guī)則覆蓋這條規(guī)則。例如,您可以采用以下設置拒絕 6379 端口被訪問。
· 網卡類型(NicType):內網(intranet)。
· 授權策略(Policy):拒絕(drop)。
· 規(guī)則方向(NicType):入網。
· 協議類型(IpProtocol):TCP(tcp)。
· 端口范圍(PortRange):6379/6379。
· 授權對象(SourceCidrIp):0.0.0.0/0。
· 優(yōu)先級(Priority):100。
經典網絡的內網安全組規(guī)則不要使用 CIDR 或者 IP 授權
對于經典網絡的 ECS 實例,阿里云默認不開啟任何內網的入規(guī)則。內網的授權一定要謹慎。
說明 為了安全考慮,不建議開啟任何基于 CIDR 網段的授權。
對于彈性計算來說,內網的 IP 經常變化,另外,這個 IP 的網段是沒有規(guī)律的,所以,對于經典網絡的內網,建議您通過安全組授權內網的訪問。
例如,您在安全組 sg-redis 上構建了一個 redis 的集群,為了只允許特定的機器(如 sg-web)訪問這個 redis 的服務器編組,您不需要配置任何 CIDR,只需要添加一條入規(guī)則:指定相關的安全組 ID 即可。
· 網卡類型(NicType):內網(intranet)。
· 授權策略(Policy):允許(accept)。
· 規(guī)則方向(NicType):入網。
· 協議類型(IpProtocol):TCP(tcp)。
· 端口范圍(PortRange):6379/6379。
· 授權對象(SourceGroupId):sg-web。
· 優(yōu)先級(Priority):1。
對于 VPC 類型的實例,如果您已經通過多個 VSwitch 規(guī)劃好自己的 IP 范圍,您可以使用 CIDR 設置作為安全組入規(guī)則;但是,如果您的 VPC 網段不夠清晰,建議您優(yōu)先考慮使用安全組作為入規(guī)則。
將需要互相通信的 ECS 實例加入同一個安全組
一個 ECS 實例最多可以加入 5 個安全組,而同一安全組內的 ECS 實例之間是網絡互通的。如果您在規(guī)劃時已經有多個安全組,而且,直接設置多個安全規(guī)則過于復雜的話,您可以新建一個安全組,然后將需要內網通訊的 ECS 實例加入這個新的安全組。
安全組是區(qū)分網絡類型的,一個經典網絡類型的 ECS 實例只能加入經典網絡的安全組;一個 VPC 類型的 ECS 實例只能加入本 VPC 的安全組。
這里也不建議您將所有的 ECS 實例都加入一個安全組,這將會使得您的安全組規(guī)則設置變成夢魘。對于一個中大型應用來說,每個服務器編組的角色不同,合理地規(guī)劃每個服務器的入方向請求和出方向請求是非常有必要的。
在控制臺上,您可以根據文檔 加入安全組 的描述將一個實例加入安全組。
如果您對阿里云的 OpenAPI 非常熟悉,您可以參考 使用 OpenAPI 彈性管理 ECS 實例,通過 OpenAPI 進行批量操作。對應的 Python 片段如下。
試用
def join_sg(sg_id, instance_id):
request = JoinSecurityGroupRequest()
request.set_InstanceId(instance_id)
request.set_SecurityGroupId(sg_id)
response = _send_request(request)
return response
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
將 ECS 實例移除安全組
如果 ECS 實例加入不合適的安全組,將會暴露或者 Block 您的服務,這時您可以選擇將 ECS 實例從這個安全組中移除。但是在移除安全組之前必須保證您的 ECS 實例已經加入其它安全組。
說明 將 ECS 實例從安全組移出,將會導致這個 ECS 實例和當前安全組內的網絡不通,建議您在移出之前做好充分的測試。
對應的 Python 片段如下。
試用
def leave_sg(sg_id, instance_id):
request = LeaveSecurityGroupRequest()
request.set_InstanceId(instance_id)
request.set_SecurityGroupId(sg_id)
response = _send_request(request)
return response
# send open api request
def _send_request(request):
request.set_accept_format('json')
try:
response_str = clt.do_action(request)
logging.info(response_str)
response_detail = json.loads(response_str)
return response_detail
except Exception as e:
logging.error(e)
定義合理的安全組名稱和標簽
合理的安全組名稱和描述有助于您快速識別當前復雜的規(guī)則組合。您可以通過修改名稱和描述來幫助自己識別安全組。
您也可以通過為安全組設置標簽分組管理自己的安全組。您可以在控制臺直接 設置標簽,也通過 API 設置標簽。
刪除不需要的安全組
安全組中的安全規(guī)則類似于一條條白名單和黑名單。所以,請不要保留不需要的安全組,以免因為錯誤加入某個 ECS 實例而造成不必要的麻煩。
在安全組的使用過程中,通常會將所有的云服務器放置在同一個安全組中,從而可以減少初期配置的工作量。但從長遠來看,業(yè)務系統(tǒng)網絡的交互將變得復雜和不可控。在執(zhí)行安全組變更時,您將無法明確添加和刪除規(guī)則的影響范圍。
合理規(guī)劃和區(qū)分不同的安全組將使得您的系統(tǒng)更加便于調整,梳理應用提供的服務并對不同應用進行分層。這里推薦您對不同的業(yè)務規(guī)劃不同的安全組,并設置不同的安全組規(guī)則。
【阿里云,阿里巴巴集團旗下云計算品牌,全球卓越的云計算技術和服務提供商。海商(hydrodefense.cn)作為阿里云湖南唯一授權服務中心,國內知名商城系統(tǒng)及商城網站建設提供商,專為企業(yè)提供專業(yè)完善電商整體解決方案、微商云、視頻云、醫(yī)療云等,咨詢阿里云服務器詳情可電聯:18684778716(微信同號)】