在安全性群組的使用過程中,通常會將所有的雲端服務器放置在同一個安全性群組中,從而可以減少初期配置的工作量。但從長遠來看,業務系統網路的互動將變得複雜和不可控。在執行安全性群組變更時,您將無法明確添加和刪除規則的影響範圍。

合理規劃和區分不同的安全性群組將使得您的系統更加便於調整,梳理應用提供的服務並對不同應用進行分層。這裡推薦您對不同的業務規劃不同的安全性群組,並設定不同的安全性群組規則。

區分不同的安全性群組

  • 公網服務的雲端服務器和內網伺服器盡量屬於不同的安全性群組

    是否對外提供公網服務,包括主動暴露某些連接埠對外訪問(例如 80、443 等),被動地提供連接埠轉寄規則(例如雲端服務器具有公網 IP、EIP、NAT 連接埠轉寄規則等),都會導致自己的應用可能被公網訪問到。

    2 種情境的雲端服務器所屬的安全性群組規則要採用最嚴格的規則,建議拒絕優先,預設情況下應當關閉所有的連接埠和協議,僅僅暴露對外提供需要服務的連接埠,例如 80、443。由於僅對屬於對外公網訪問的伺服器編組,調整安全性群組規則時也比較容易控制。

    對於對外提供伺服器編組的職責應該比較明晰和簡單,避免在同樣的伺服器上對外提供其它的服務。例如 MySQL、Redis 等,建議將這些服務安裝在沒有公網存取權限的雲端服務器上,然後通過安全性群組的組組授權來訪問。

    如果當前有公網雲端服務器已經和其它的應用在同一個安全性群組 SG_CURRENT。您可以通過下面的方法來進行變更。

    1. 梳理當前提供的公網服務暴露的連接埠和協議,例如 80、443。
    2. 新建立一個安全性群組,例如 SG_WEB, 然後添加相應的連接埠和規則。
      说明 授權策略:允許,協議類型:ALL, 連接埠:80/80,授權對象:0.0.0.0/0, 授權策略:允許,協議類型:ALL,連接埠:443/443,授權對象:0.0.0.0/0。
    3. 選擇安全性群組 SG_CURRENT, 然後添加一條安全性群組規則,組組授權,允許 SG_WEB 中的資源訪問SG_CURRENT。
      说明 授權策略:允許,協議類型:ALL,連接埠:-1/-1,授權對象:SG_WEB,優先順序:按照實際情況自訂[1-100]。
    4. 將一台需要切換安全性群組的執行個體 ECS_WEB_1 添加到新的安全性群組中。
      1. 在 ECS 控制台中,選擇 安全性群組管理
      2. 選擇 SG_WEB > 管理執行個體 > 添加執行個體,選擇執行個體 ECS_WEB_1 加入到新的安全性群組 SG_WEB 中,確認 ECS_WEB_1 執行個體的流量和網路工作正常。
    5. 將 ECS_WEB_1 從原來的安全性群組中移出。
      1. 在 ECS 控制台中,選擇 安全性群組管理
      2. 選擇 SG_WEB > 管理執行個體 > 添加執行個體,選擇 ECS_WEB_1 ,從 SG_CURRENT 移除,測試網路連通性,確認流量和網路工作正常。
      3. 如果工作不正常,將 ECS_WEB_1 仍然加回到安全性群組 SG_CURRENT 中,檢查設定的 SG_WEB 暴露的連接埠是否符合預期,然後繼續變更。
    6. 執行其它的伺服器安全性群組變更。
  • 不同的應用使用不同的安全性群組

    在生產環境中,不同的作業系統大多情況下不會屬於同一個應用分組來提供負載平衡服務。提供不同的服務意味著需要暴露的連接埠和拒絕的連接埠是不同的,建議不同的作業系統盡量歸屬於不同的安全性群組。

    例如,對於 Linux 作業系統,可能需要暴露 TCP(22)連接埠來實現 SSH,對 Windows 可能需要開通 TCP(3389) 遠端桌面連線。

    除了不同的作業系統歸屬不同的安全性群組,即便同一個鏡像類型,提供不同的服務,如果之間不需要通過內網進行訪問的話,最好也劃歸不同的安全性群組。這樣方便解耦,並對未來的安全性群組規則進行變更,做到職責單一。

    在規劃和新增應用時,除了考慮劃分不同的虛擬交換器配置子網,也應該同時合理的規劃安全性群組。使用網段+安全性群組約束自己作為服務提供者和消費者的邊界。

    具體的變更流程參見上面的操作步驟。

  • 生產環境和測試環境使用不同的安全性群組

    為了更好的做系統的隔離,在實際開發過程中,您可能會構建多套的測試環境和一套線上環境。為了更合理的做網路隔離,您需要對不同的環境配置使用不同的安全性原則,避免因為測試環境的變更重新整理到了線上影響線上的穩定性。

    通過建立不同的安全性群組,限制應用的訪問域,避免生產環境和測試環境聯通。同時也可以對不同的測試環境分配不同的安全性群組,避免多套測試環境之間互相干擾,提升開發效率。

僅對需要公網訪問子網或者雲端服務器分配公網 IP

不論是傳統網路還是Virtual Private Cloud 中,合理的分配公網 IP 可以讓系統更加方便地進行公網管理,同時減少系統受攻擊的風險。在專用網路的情境下,建立虛擬交換器時,建議您盡量將需要公網訪問的服務區的 IP 區間放在固定的幾個交換器(子網 CIDR)中,方便審計和區分,避免不小心暴露公網訪問。

在分布式應用中,大多數應用都有不同的分層和分組,對於不提供公網訪問的雲端服務器盡量不提供公網IP,如果是有多台伺服器提供公網訪問,建議您配置公網流量分發的負載平衡服務來公網服務,提升系統的可用性,避免單點。

對於不需要公網訪問的雲端服務器盡量不要分配公網 IP。專用網路中當您的雲端服務器需要訪問公網的時候,優先建議您使用 NAT Gateway,用於為 VPC 內無公網 IP 的 ECS 執行個體提供訪問互連網的代理服務,您只需要配置相應的 SNAT 規則即可為具體的 CIDR 網段或者子網提供公網訪問能力,具體配置參見SNAT。避免因為只需要訪問公網的能力而在分配了公網 IP(EIP) 之後也向公網暴露了服務。

最小原則

安全性群組應該是白名單性質的,所以需盡量開放和暴露最少的連接埠,同時儘可能少地分配公網 IP。若想訪問線上機器進行任務日誌或錯誤排查的時候直接分配公網 IP,掛載 EIP 雖然簡便,但是畢竟會將整個機器暴露在公網之上,更安全的策略是通過跳板機來管理。

使用跳板機

跳板機由於其自身的許可權巨大,除了通過工具做好審計記錄。在專用網路中,建議將跳板機分配在專有的虛擬交換器之中,對其提供相應的 EIP 或者 NAT 連接埠轉寄表。

首先建立專有的安全性群組 SG_BRIDGE,例如開放相應的連接埠,例如 Linux TCP(22) 或者 Windows RDP(3389)。為了限制安全性群組的入網規則,可以限制能登入的授權對象為企業的公網出口範圍,減少被登入和掃描的機率。

然後將作為跳板機的雲端服務器加入到該安全性群組中。為了讓該機器能訪問相應的雲端服務器,可以配置相應的組授權。例如在 SG_CURRENT 添加一條規則允許 SG_BRIDGE 訪問某些連接埠和協議。

使用跳板機 SSH 時,建議您優先使用 SSH 金鑰對 而不是密碼登入。

總之,合理的安全性群組規劃使您在擴容應用時更加遊刃有餘,同時讓您的系統更加安全。