規劃及實作網路安全性群組 (NSG) 與應用程式安全性群組 (ASG)
您可以使用 Azure 網路安全性群組,篩選在 Azure 虛擬網路中往返 Azure 資源間的網路流量。 網路安全性群組包含安全性規則,用來允許或拒絕進出多種 Azure 資源類型的輸入和輸出網路流量。 針對每個規則,您可以指定來源與目的地、連接埠和通訊協定。
網路安全性群組 (NSG)
安全性規則
視 Azure 訂用帳戶限制而定,網路安全性群組可包含多個規則。 每個規則都會指定下列屬性:
屬性 | 說明 |
---|---|
名稱 | 網路安全性群組內的唯一名稱。 名稱長度最多可達 80 個字元。 開頭必須是文字字元,結尾也必須是文字字元或 '_'。 名稱可包含文字字元或 '.'、'-'、'_'。 |
優先順序 | 100 到 4096 之間的數字。 系統會依照優先權順序處理規則,較低的數字會在較高的數字之前處理,因為較低的數字具有較高的優先順序。 一旦流量符合規則,處理就會停止。 因此,如果有較低優先順序 (較高數字) 的規則具有與較高優先順序之規則相同的屬性存在,則不會進行處理。 Azure 預設安全性規則的編號最高,而優先順序最低,以確保一律先處理自訂規則。 |
來源或目的地 | 任何或個別的 IP 位址、無類別網域間路由 (CIDR) 區塊 (例如 10.0.0.0/24)、服務標籤或應用程式安全性群組。 如果您指定 Azure 資源的位址,請指定指派給資源的私人 IP 位址。 在 Azure 將公用 IP 位址轉換為私人 IP 位址以處理輸入流量後,系統才會針對網路安全性群組進行處理;而在將私人 IP 位址轉換為公用 IP 位址以處理輸出流量前,才會針對其進行處理。 當您指定範圍、服務標籤或應用程式安全性群組時,需要較少的安全性規則。 在規則中指定多個個別 IP 位址和範圍 (您無法指定多個服務標籤或應用程式群組) 的功能也稱為增強型安全性規則。 擴增安全性規則只能在透過 Resource Manager 部署模型建立的網路安全性群組中建立。 您無法在透過傳統部署模型建立的網路安全性群組中指定多個 IP 位址和 IP 位址範圍。 |
通訊協定 | [TCP]、[UDP]、[ICMP]、[ESP]、[AH] 或 [任何]。 ESP 和 AH 通訊協定目前無法透過 Azure 入口網站取得,但可透過 Azure Resource Manager 範本使用。 |
方向 | 規則適用於連入還是連出流量。 |
連接埠範圍 | 您可以指定個別連接埠或連接埠範圍。 例如,您可以指定 80 或 10000-10005。 指定範圍讓您可建立較少的安全性規則。 擴增安全性規則只能在透過 Resource Manager 部署模型建立的網路安全性群組中建立。 您無法在透過傳統部署模型建立之網路安全性群組的相同安全性規則中指定多個連接埠與連接埠範圍。 |
動作 | 允許或拒絕 |
安全性規則會根據五元組 (1.來源、2.來源連接埠、3.目的地、4.目的地連接埠和 5.通訊協定) 資訊進行評估並套用。 您無法使用相同的優先順序和方向建立兩個安全性規則。 會為現有的連線建立流程記錄。 根據流量記錄的連接狀態,允許或拒絕通訊。 流量記錄允許網路安全性群組是具狀態。 例如,如果您針對連接埠 80 的任何位址指定輸出安全性規則,則不需要為輸出流量的回應指定輸入安全性規則。 只有在外部起始通訊時,才需要指定輸入安全性規則。 反之亦然。 如果允許透過連接埠的輸入流量,則不需要指定輸出安全性規則來回應透過連接埠的流量。
當您移除允許連線的安全性規則時,現有的連線可能不會中斷。 修改網路安全性群組規則只會影響新連線。 在網路安全性群組中建立新規則或更新現有的規則時,只會將該規則套用至新的連線。 不會以新的規則對現有的連線進行重新評估。
網路安全性群組如何篩選網路流量
您可以將數個 Azure 服務中的資源部署到 Azure 虛擬網路。 您可以將零個或一個網路安全性群組關聯至每個虛擬網路子網路,以及虛擬機器中的網路介面。 您可以將相同的網路安全性群組關聯至所需數量的子網路和網路介面。 下圖以不同案例說明網路安全性群組可如何部署,以 允許網路流量透過 TCP 連接埠 80 來進出網際網路:
請參考影像及下列文字,以了解 Azure 如何處理網路安全性群組的輸入和輸出規則:
輸入流量
針對輸入流量,Azure 會先處理子網路的相關聯網路安全性群組中的規則 (如果有的話),然後再處理網路介面的相關聯網路安全性群組中的規則 (如果有的話)。 此流程也包含子網路內部流量。
- VM1:NSG1 與 Subnet1 相關聯,且 VM1 位於 Subnet1 中,因此會處理 NSG1 中的安全性規則。 除非您已建立允許連接埠 80 輸入的規則,否則 DenyAllInbound 預設安全性規則會拒絕流量。 NSG2 不會評估流量,因為其與網路介面相關聯。 如果 NSG1 在其安全性規則中允許連接埠 80,NSG2 會處理流量。 若要允許從連接埠 80 到虛擬機器,NSG1 和 NSG2 都必須有規則來允許從網際網路到連接埠 80。
- VM2:VM2 也位於 Subnet1 中,因此會處理 NSG1 中的規則。 由於 VM2 沒有與其網路介面相關聯的網路安全性群組,因此接收允許通過 NSG1 的所有流量,或拒絕 NSG1 拒絕的所有流量。 如果網路安全性群組與子網路相關聯,則相同子網路中的所有資源會一起接收或拒絕流量。
- VM3:由於沒有與 Subnet2 相關聯的網路安全性群組,因此允許流量進入子網路並由 NSG2 處理,因為 NSG2 與連結至 VM3 的網路介面相關聯。
- VM4:沒有與 Subnet3 或虛擬機器中的網路介面相關聯的網路安全性群組,因此允許流量進入 VM4。 如果沒有任何網路安全性群組與子網路和網路介面相關聯,則所有網路流量都可以通過子網路和網路介面。
輸出流量
針對輸出流量,Azure 會先處理網路介面的相關聯網路安全性群組中的規則 (如果有的話),然後再處理子網路的相關聯網路安全性群組中的規則 (如果有的話)。 此流程也包含子網路內部流量。
- VM1:處理 NSG2 中的安全性規則。 除非您建立安全性規則,拒絕輸出到網際網路的連接埠 80,否則 NSG1 和 NSG2 中的 AllowInternetOutbound 預設安全性規則都會允許流量。 如果 NSG2 在其安全性規則中拒絕連接埠 80,則會拒絕流量,而 NSG1 永遠不會評估該流量。 若要拒絕流量從連接埠 80 輸出虛擬機器,其中一個網路安全性群組或兩個網路安全性群組必須有規則來拒絕將流量流向網際網路的連接埠 80。
- VM2:因為連結到 VM2 的網路介面沒有相關聯的網路安全性群組,所有流量都會透過網路介面傳送至子網路。 處理 NSG1 中的規則。
- VM3:如果 NSG2 在其安全性規則中拒絕連接埠 80,則會拒絕流量。 如果 NSG2 沒有拒絕連接埠 80,NSG2 中的 AllowInternetOutbound 預設安全性規則會允許流量,因為沒有與子網路 2 相關聯的網路安全性群組。
- VM4:允許來自 VM4 的所有網路流量,因為連結至虛擬機器的網路介面或子網路 3 沒有相關聯的網路安全性群組。
子網路內部流量
請務必注意,在 NSG 中與子網路相關聯的安全性規則可能會影響其內部 VM 之間的連線能力。 根據預設,相同子網路中的虛擬機器可以根據允許子網路內部流量的預設 NSG 規則進行通訊。 如果您將規則新增至 NSG1,以拒絕所有輸入和輸出流量,VM1 和 VM2 將無法彼此通訊。
藉由檢視網路介面的有效安全性規則,您就可以輕鬆地檢視網路介面中套用的彙總規則。 您也可以使用 Azure 網路監看員中的 IP 流量驗證功能,來判斷是否允許網路介面的雙向通訊。 您可以使用 IP 流量驗證,來判斷是否允許或拒絕通訊。 此外,使用 IP 流量驗證,來呈現負責允許或拒絕流量的網路安全性規則身分識別。
網路安全性群組會與子網路或部署在傳統部署模型中的虛擬機器和雲端服務相關聯,以及與 Resource Manager 部署模型中的子網路或網路介面相關聯。
除非您有特殊原因要這麼做,否則我們建議您讓網路安全性群組與子網路或網路介面的其中一個建立關聯,而非同時與這兩者建立關聯。 因為如果與子網路相關聯的網路安全性群組中,以及與網路介面相關聯的網路安全性群組中都存在規則,則這兩個規則可能會發生衝突,您可能會遇到需要進行疑難排解的非預期通訊問題。
應用程式安全性群組 (ASG)
應用程式安全性群組可讓您將網路安全性設定為應用程式結構的自然延伸,以便分組虛擬機器,並定義以那些群組為基礎的網路安全性原則。 您可以大規模重複使用您的安全性原則,而不需進行明確 IP 位址的手動維護。 此平台可處理明確 IP 位址和多個規則集的複雜性,讓您專注於商務邏輯。 若要進一步了解應用程式安全性群組,請考慮下列範例:
在上圖中,NIC1 和 NIC2 都是 AsgWeb 應用程式安全性群組的成員。 NIC3 是 AsgLogic 應用程式安全性群組的成員。 NIC4 是 AsgDb 應用程式安全性群組的成員。 雖然在此範例中的每個網路介面 (NIC) 都只是某個網路安全性群組的成員,但網路介面可以是多個應用程式安全性群組的成員,數量上限可參照 Azure 限制。 沒有任何網路介面具有已建立關聯的網路安全性群組。 NSG1 與這兩個子網路相關聯且包含下列規則:
Allow-HTTP-Inbound-Internet
若要允許從網際網路到 web 伺服器的流量,則此為必要規則。 因為來自網際網路的輸入流量遭 DenyAllInbound 預設安全性規則拒絕,所以 AsgLogic 或 AsgDb 應用程式安全性群組不需要任何其他的規則。
優先順序 | 來源 | 來源連接埠 | 目的地 | 目的地連接埠 | 通訊協定 | 存取權限 |
---|---|---|---|---|---|---|
100 | 網際網路 | * | AsgWeb | 80 | TCP | 允許 |
Deny-Database-All
因為 AllowVNetInBound 預設安全性規則允許相同虛擬網路中資源之間的所有通訊,所以需要此規則才能拒絕來自所有資源的流量。
優先順序 | 來源 | 來源連接埠 | 目的地 | 目的地連接埠 | 通訊協定 | 存取權限 |
---|---|---|---|---|---|---|
120 | * | * | AsgDb | 1433 | 任何 | 拒絕 |
Allow-Database-BusinessLogic
此規則會允許流量從 AsgLogic 應用程式安全性群組流向 AsgDb 應用程式安全性群組。 此規則的優先順序高於 Deny-Database-All 規則的優先順序。 因此,會在 Deny-Database-All 規則之前處理此規則,以允許來自 AsgLogic 應用程式安全性群組的流量,但會封鎖所有其他的流量。
優先順序 | 來源 | 來源連接埠 | 目的地 | 目的地連接埠 | 通訊協定 | 存取權限 |
---|---|---|---|---|---|---|
110 | AsgLogic | * | AsgDb | 1433 | TCP | 允許 |
應用程式安全性群組成員的網路介面會套用將其指定為來源或目的地的規則。 此規則不會影響其他網路介面。 如果網路介面不是應用程式安全性群組的成員,則此規則不適用於此網路介面,即使子網路與網路安全性群組相關聯也一樣。
應用程式安全性群組有下列限制:
您可以在訂用帳戶中擁有的應用程式安全性群組數量會有所限制,而且還有其他與應用程式安全性群組相關的限制。
指派給應用程式安全性群組的所有網路介面,都必須存在於指派給應用程式安全性群組之第一個網路介面所在的相同虛擬網路中。 例如,如果指派給應用程式安全性群組 AsgWeb 的第一個網路介面位於名為 VNet1 的虛擬網路中,則後續所有指派給 ASGWeb 的網路介面都必須存在於 VNet1 中。 您無法將不同虛擬網路的網路介面新增至相同的應用程式安全性群組。
如果您指定應用程式安全性群組作為安全性規則中的來源和目的地,則兩個應用程式安全性群組中的網路介面都必須存在於相同的虛擬網路中。
- 例如,如果 AsgLogic 有來自 VNet1 的網路介面,而 AsgDb 有來自 VNet2 的網路介面。 在此案例中,就無法將 AsgLogic 指派為來源和將 AsgDb 指派為規則中的目的地。 來源和目的地應用程式安全性群組的所有網路介面都必須存在於相同的虛擬網路中。
若要將所需的安全性規則數量及規則變更需求降到最低,請規劃好您需要的應用程式安全性群組,並盡可能使用服務標籤或應用程式安全性群組來建立規則,而不是使用個別的 IP 位址或 IP 位址範圍。