這篇文章帶給大家的內容是關於如何授權、撤銷安全群組規則以及加入、離開安全群組,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
本文將介紹安全群組的以下幾個內容:
授權 和 撤銷 安全群組規則。
加入安全群組 和 離開安全群組。
阿里雲的網路類型分為經典網路和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 授權
對於經典網路的ECS 實例,阿里雲預設不會開啟任何內網的入規則。內網的授權一定要謹慎。
為了安全考慮,不建議開啟任何基於 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 片段如下。
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)
定義合理的安全群組名稱和標籤
#合理的安全群組名稱和描述有助於您快速識別當前複雜的規則組合。您可以透過修改名稱和描述來幫助自己識別安全群組。
您也可以透過為安全性群組設定標籤分組來管理自己的安全性群組。您可以在控制台直接 設定標籤,也透過 API 設定標籤。
刪除不需要的安全性群組
安全群組中的安全性規則類似於一條白名單和黑名單。所以,請不要保留不需要的安全性群組,以免因為錯誤加入某個 ECS 執行個體而造成不必要的麻煩。
以上是如何授權、撤銷安全群組規則以及加入、離開安全群組的詳細內容。更多資訊請關注PHP中文網其他相關文章!