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)。
端口範圍(portrange):6379/6379。
優先級(priority):100。
經典網絡的内網安全組規則不要使用 cidr 或者 ip 授權
對于經典網絡的 ecs 執行個體,阿裡雲預設不開啟任何内網的入規則。内網的授權一定要謹慎。
為了安全考慮,不建議開啟任何基于 cidr 網段的授權。
對于彈性計算來說,内網的 ip 經常變化,另外,這個 ip 的網段是沒有規律的,是以,對于經典網絡的内網,建議您通過安全組授權内網的通路。
例如,您在安全組 sg-redis 上建構了一個 redis 的叢集,為了隻允許特定的機器(如 sg-web)通路這個 redis 的伺服器編組,您不需要配置任何 cidr,隻需要添加一條入規則:指定相關的安全組 id 即可。
授權對象(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 設定标簽。
删除不需要的安全組
安全組中的安全規則類似于一條條白名單和黑名單。是以,請不要保留不需要的安全組,以免因為錯誤加入某個 ecs 執行個體而造成不必要的麻煩。
<a href="https://help.aliyun.com/document_detail/51171.html?spm=5176.doc51371.6.738.x5slie#classicnetworknocidrorip">原文連結</a>