在安全組的使用過程中,通常會將所有的云服務器放置在同一個安全組中,從而可以減少初期配置的工作量。但從長遠來看,業務系統網絡的交互將變得復雜和不可控。在執行安全組變更時,您將無法明確添加和刪除規則的影響范圍。合理規劃和區分不同的安全組將使您的系統更加便于調整,梳理應用提供的服務并對不同應用進行分層。本文推薦您對不同的業務規劃不同的安全組,并設置不同的安全組規則。
區分不同的安全組
公網服務的云服務器和內網服務器盡量屬于不同的安全組
是否對外提供公網服務,包括主動暴露某些端口對外訪問(例如80、443 等),被動地提供端口轉發規則(例如云服務器具有公網IP、EIP、NAT端口轉發規則等),都會導致自己的應用可能被公網訪問到。
2種場景的云服務器所屬的安全組規則要采用最嚴格的規則,建議拒絕優先,默認情況下應當關閉所有的端口和協議,僅僅暴露對外提供需要服務的端口,例如80、443。由于僅對屬于對外公網訪問的服務器編組,調整安全組規則時也比較容易控制。
對于對外提供服務器編組的職責應該比較清晰和簡單,避免在同樣的服務器上對外提供其他的服務。例如MySQL、Redis等,建議將這些服務安裝在沒有公網訪問權限的云服務器上,然后通過安全組的組組授權來訪問。
如果當前有公網云服務器已經和其他的應用在同一個安全組SG_CURRENT。您可以通過下面的方法來進行變更。
梳理當前提供的公網服務暴露的端口和協議,例如80、443。
創建一個安全組,例如SG_WEB, 然后添加相應的端口和規則。具體操作,請參見創建安全組。
授權策略:允許
協議類型:ALL
端口:80/80和443/443
授權對象:0.0.0.0/0
選擇安全組SG_CURRENT, 然后添加一條安全組規則,組組授權,允許SG_WEB中的資源訪問SG_CURRENT。具體操作,請參見添加安全組規則。
授權策略:允許
協議類型:ALL
端口:-1/-1
授權對象:SG_WEB
優先級:按照實際情況自定義[1-100]
將一臺需要切換安全組的實例ECS_WEB_1添加到新的安全組中。
登錄ECS管理控制臺。
在左側導航欄,選擇
。找到安全組SG_WEB,在操作列中選擇 > 管理實例。
在云服務器ECS實例頁簽中,單擊實例加入安全組。
在彈出的對話框中,選擇實例ECS_WEB_1加入到新的安全組SG_WEB中,并單擊確定。確認ECS_WEB_1實例的流量和網絡工作正常。
將ECS_WEB_1從原來的安全組中移出。
登錄ECS管理控制臺。
在左側導航欄,選擇
。找到安全組SG_CURRENT,在操作列中選擇 > 管理實例。
在云服務器ECS實例頁簽中,選中需要移出安全組的實例ECS_WEB_1,然后單擊列表下方的移出安全組。
在彈出的對話框中,單擊確定。
測試網絡連通性,確認流量和網絡工作正常。
如果工作不正常,將ECS_WEB_1仍然加回到安全組SG_CURRENT中,檢查設置的SG_WEB暴露的端口是否符合預期,然后繼續變更。
執行其他的服務器安全組變更。
不同的應用使用不同的安全組
在生產環境中,不同的操作系統大多數情況下不會屬于同一個應用分組來提供負載均衡服務。提供不同的服務意味著需要暴露的端口和拒絕的端口是不同的,建議不同的操作系統盡量歸屬于不同的安全組。
例如,對于Linux操作系統,可能需要暴露TCP(22)端口來實現SSH,對Windows可能需要開通TCP(3389)遠程桌面連接。
除了不同的操作系統歸屬不同的安全組,即便同一個鏡像類型,提供不同的服務,如果之間不需要通過內網進行訪問,建議也劃歸不同的安全組。這樣方便解耦,并對未來的安全組規則進行變更,做到職責單一。
在規劃和新增應用時,除了考慮劃分不同的虛擬交換機配置子網外,同時也應該合理地規劃安全組。使用網段+安全組約束自己作為服務提供者和消費者的邊界。
具體的變更流程請參見上面的操作步驟。
生產環境和測試環境使用不同的安全組
為了更好地進行系統的隔離,在實際開發過程中,您可能會構建多套的測試環境和一套線上環境。為了更合理地進行網絡隔離,您需要對不同的環境配置使用不同的安全策略,避免因為測試環境的變更刷新到線上,從而影響線上的穩定性。
通過創建不同的安全組,限制應用的訪問域,避免生產環境和測試環境連通。同時也可以對不同的測試環境分配不同的安全組,避免多套測試環境之間互相干擾,提升開發效率。
僅對需要公網訪問的云服務器分配公網IP
不論是經典網絡還是專有網絡(VPC)中,合理地分配公網IP可以讓系統更加方便地進行公網管理,同時減少系統受攻擊的風險。在專有網絡的場景下,創建虛擬交換機時,建議您盡量將需要公網訪問的服務區的IP區間放在固定的幾個交換機(子網CIDR)中,方便審計和區分,避免不小心暴露公網訪問。
在分布式應用中,大多數應用都有不同的分層和分組,對于不提供公網訪問的云服務器盡量不提供公網IP,如果有多臺服務器提供公網訪問,建議您配置公網流量分發的負載均衡服務來提供公網服務,提升系統的可用性,避免單點故障。詳情請參見負載均衡服務。
對于不需要公網訪問的云服務器盡量不要分配公網IP。專有網絡中當您的云服務器需要訪問公網的時候,優先建議您使用NAT網關,用于為VPC內無公網IP的ECS實例提供訪問互聯網的代理服務,您只需要配置相應的SNAT規則即可為具體的CIDR網段或者子網提供公網訪問能力,避免因為只需要訪問公網的能力而在分配了公網IP(EIP)之后也向公網暴露了服務。具體配置,請參見創建和管理SNAT條目。
最小原則
安全組應該是白名單性質的,所以需盡量開放和暴露最少的端口,同時盡可能少地分配公網IP。若想訪問線上機器進行任務日志或錯誤排查的時候直接分配公網IP,掛載EIP雖然簡便,但是會將整個機器暴露在公網之上,更安全的策略是通過跳板機來管理。
使用跳板機
跳板機由于其自身的權限巨大,除了通過工具做好審計記錄外。在專有網絡中,建議將跳板機分配在專有的虛擬交換機之中,對其提供相應的EIP或者NAT端口轉發表。
首先創建專有的安全組SG_BRIDGE,例如開放相應的端口,如 Linux TCP(22)或者Windows RDP(3389)。為了限制安全組的入網規則,可以將能登錄的授權對象限制為企業的公網出口范圍,減少被登錄和掃描的概率。
然后將作為跳板機的云服務器加入到該安全組中。為了讓該機器能訪問相應的云服務器,可以配置相應的組授權。例如在SG_CURRENT添加一條規則允許SG_BRIDGE訪問某些端口和協議。
使用跳板機SSH時,建議您優先使用SSH密鑰對登錄。詳情請參見SSH密鑰對。
總之,合理的安全組規劃使您在擴容應用時更加游刃有余,同時讓您的系統更加安全。