【Explanation】Azure Security — Network Security Group & Application Security Group

Kellen
9 min readMay 18, 2024

--

Network-level segmentation

以常見的網路層保護當作例子,Azure 有 Segmentation patterns 在設計網路架構的時候,有一個很重要的原則是 Zero Trust,必須要確保資源與資源的溝通,是在明確的允許規則放行,否則一律都要 Deny All 來防止資源不會被未經授權的人存取或攻擊,儘可能 leverage 這些 Cloud Native 的方案作一個縱深防禦的機制,而 Network Security Group 與 Application Security Group 就是今天要說明的主題。

Network Security Group

網絡安全組(Network Security Group,NSG)是 Azure 虛擬網路上的類似防火牆的服務,可套用於虛擬機器的 NIC(網路介面)或 VNet 子網路。可用於設定流量進出虛擬網絡的安全性。NSG 透過規則來允許或拒絕特定的網絡流量通過,以保護資源不被未經授權存取或攻擊。像是在 Azure 建立 VM 完成後,接續就是設定網路安全性群組 NSG 限制來源 IP 位址與決定開啟哪些服務埠號,避免網路上的惡意攻擊。

NSG 產品定位說明

NSG 是在 SDN(軟體定義網路)上運作的第四層 狀態防火牆,Azure 的 NSG 定位上與 GCP VPC 中的 Firewall rule 比較接近;而 Azure Firewall 定位上為中央管理型式的網路工具,從 OSI7 層中的 L3 至 L7 都可以有管理的能力,類似於 GCP 的 Cloud Armor,以下比較 NSG vs Firwall

Azure Firewall 與 NSG 滿常結合一起使用增強防禦能力,NSG 提供對 VNet 的精細控制,例如允許僅從授權的內部電腦透過 SSH 存取特定子網路。 Azure 防火牆可作為集中式 Gateway,監控所有傳入和傳出流量,同時提供增強的威脅防禦

預設安全性規則

Azure 會在您建立的每個網路安全性群組中,建立下列預設規則(紅框)

Inbound 三條預設規則

  • AllowVNetInBound
  • AllowAzureLoadBalancerInBound
  • DenyAllInbound

Outbound 三條預設規則

  • AllowVnetOutBound
  • AllowInternetOutBound
  • DenyAllOutBound

Archietcture

NSG 可應用兩種資源:子網、網路介面(NIC),下圖顯示了一個虛擬網路,其中 VM1 和 VM2 位於 Subnet1 中,VM3 位於 Subnet2 中。此虛擬網路將 NSG1 應用於子網路 1,並將 NSG2 應用於 Subnet2。此外,還可以將 NSG2 應用到應用了 NSG1 的子 Subnet1 中的 VM1 的 NIC。

Azure 建議將 NSG 與子網路或網路介面關聯,除非有特定原因。不建議兩者同時關聯。與子網路關聯的 NSG 中的規則可能與與網路介面關聯的 NSG 中的規則發生衝突,導致可能需要進行故障排除的意外通訊問題。

https://learn.microsoft.com/en-us/azure/virtual-network/network-security-group-how-it-works

Rules

包含優先順序、來源或目的地、通訊協定、方向、連接埠範圍、動作。

此外來源或目的地也可以使用 servcie tag,根據預設,servcie tag 會反映整個雲端的範圍。 某些服務標籤也會將對應的 IP 範圍限定為指定的區域,以提供更精細的控制。 例如,服務標籤 Storage 代表整個雲端的 Azure 儲存體,而 Storage.WestUS 則會將範圍縮小為僅限來自美國西部區域的儲存體 IP 位址範圍。

其他限制

與其他 CSP 作法一致,預設直接把 25 port 拔掉,像一般小民普遍使用 Pay-as-you-Go 方案,所有資源的輸出連接埠 25 ,無法進行任何移除限制的要求,僅「Enterprise 合約」申請機制才有機會使用。

NSG 設定

在設定了 VM 並設定網路安全性群組選取 [新建] 輸入 nsg-1 後,若是要新增或刪除的話可至 Inbound/Outbound security rules 設定

類型共有四種可以選擇

查驗一下 NSG 狀態如下

有看到 ⚠️ 是 Azure 建議要調整,不過沒事幹啥設定成全世界都可以來訪問你的機器 =.=凸

雖然 VM 是沒有外部 IP,但由於我們有啟用了 Bastion Server,因此藍框這一段是不需要的,VM 的連線可由第二條來獲得滿足(User -> Bastion -> VM)並只限定由內部網路進行連線。

移除後重新登入

AzureBastionSubnet 的 IPv4 為 10.0.1.0/26,剛好 10.0.1.5 確實是在 AzureBastionSubnet 之中!

根據CIDR(Classless Inter-Domain Routing)表示法,這個 IP 範圍可以計算出以下的 IP 地址範圍:10.0.1.0 ~ 10.0.1.63

事實上 Azure Bastion 是 Azure 的完全託管平台 PaaS 服務,經過內部強化後提供安全的 RDP/SSH 連線,是不需再去處理 AzureBastionSubnet 及其 NSG的。

Application Security Group

當前面部署好網路安全群組(NSG)時,它會指派給 NIC 或子網路(首選),而 Application Security Group, ASG(應用程式安全性群組)可讓您將 ASG 設定為應用程式結構的抽象物件或網路物件,以便將虛擬機器分組。

這樣的好處是簡化作業繁鎖度,想像一下如果隨著虛擬機器的新增、刪除或更新,維護 NSG 所需的管理開銷可能會變得相當大,這就是 ASG 可以發揮作用的地方,來簡化 NSG 規則的創建和規則的持續維護。

從以下圖中可以得知原本套用至目的端主機,會需要一台一台設定,但透過 ASG 群組標籤可直接將相同性質的後端主機服務直接套用即可,除了管理面上設置方便很多外,不需要去管理 IP,還可以在同一組 NSG分別擁有不同的存取限制需求都能分別套用至不同目標主機中,並讓擴展性更好。

VM 綁定 Application Security Group

即可於 NSG 這邊的類型選定 ASG 的方式進行

其次是 Private Endpoint 也可以套用只有特定 Application Security Group 可以訪問

最終以此圖說明,期待 NSG 作為網路過濾處理及 ASG 作為 Application 邏輯上的分組處理。

AZ-900 Episode 21 | Azure Security Groups | Network and Application Security Groups (NSG, ASG)

--

--

Kellen

Backend(Python)/K8s and Container eco-system/Technical&Product Manager/host Developer Experience/早期投入資料創新與 ETL 工作,近期研究 GCP/Azure/AWS 相關的解決方案的 implementation