Network Security Group (NSG) là gì?
Network Security Group (NSG - Nhóm bảo mật mạng) là tài nguyên Azure cung cấp khả năng lọc lưu lượng mạng (network traffic filtering) tại tầng 3 (Network) và tầng 4 (Transport) của mô hình OSI. NSG hoạt động như một tường lửa phân tán (distributed firewall) cho phép hoặc từ chối lưu lượng mạng đến/từ các tài nguyên Azure trong Virtual Network (VNet).
Cách hoạt động của NSG
- NSG chứa danh sách Quy tắc bảo mật (Security Rules) theo thứ tự ưu tiên (Priority).
- Mỗi quy tắc định nghĩa: Nguồn (Source), Đích (Destination), Cổng (Port), Giao thức (Protocol), Hành động (Action: Allow/Deny), Ưu tiên (Priority: 100-4096).
- Azure xử lý quy tắc theo thứ tự ưu tiên từ thấp đến cao (100 = ưu tiên cao nhất). Quy tắc khớp đầu tiên được áp dụng, dừng xử lý.
- Có quy tắc mặc định ngầm (Default Rules) cho phép: VNet-to-VNet, Azure Load Balancer, Deny All Inbound/Outbound (ưu tiên thấp).
Phạm vi áp dụng (Scope)
NSG có thể gán cho:
- Subnet: Áp dụng cho tất cả tài nguyên trong subnet (VM, AKS nodes, App Service Environment, VMSS, etc.). Khuyên dùng cho quản trị tập trung.
- Network Interface (NIC): Áp dụng cho một VM cụ thể (hoặc NIC của VM). Dùng cho ngoại lệ, quy tắc đặc thù per-VM.
Lưu ý: Một NIC/Subnet chỉ gán được một NSG. Một NSG có thể gán cho nhiều NIC/Subnet.
Cấu trúc Quy tắc bảo mật (Security Rule)
| Thuộc tính | Mô tả | Ví dụ |
|---|---|---|
| Name | Tên quy tắc (duy nhất trong NSG) | Allow-HTTP-Inbound |
| Priority | Số nguyên 100-4096 (thấp = ưu tiên cao) | 100, 110, 1000 |
| Source / Destination | IP CIDR, Service Tag, Application Security Group (ASG) | 10.0.0.0/16, Internet, VirtualNetwork, AzureLoadBalancer, asg-web |
| Protocol | TCP, UDP, ICMP, ESP, AH, * (tất cả) | TCP, * |
| Port Range | Cổng đơn, phạm vi, hoặc * (tất cả) | 80, 443, 8080-8090, * |
| Action | Allow (Cho phép) hoặc Deny (Từ chối) | Allow, Deny |
| Direction | Inbound (Vào) hoặc Outbound (Ra) | Inbound, Outbound |
| Description | Mô tả mục đích quy tắc | Allow HTTP from Internet to Web ASG |
Service Tags (Nhãn dịch vụ) - Tiện ích mạnh của Azure
Thay vì hard-code dải IP Azure (thay đổi thường xuyên), dùng Service Tag:
- VirtualNetwork: Toàn bộ không gian địa chỉ VNet (kể cả peered VNet)
- AzureLoadBalancer: Health probe của Azure LB (168.63.129.16)
- Internet: Tất cả IP công cộng bên ngoài Azure
- AzureCloud, AzureStorage, AzureSql, AzureKeyVault, AzureMonitor, AzureActiveDirectory, ApiManagement, AppService, EventHub, ServiceBus...
- Tag theo region: AzureCloud.EastUS, Storage.WestEurope...
Application Security Group (ASG) - Quản trị theo ứng dụng
ASG cho phép gom nhóm VM theo vai trò ứng dụng (web, app, db) thay vì quản lý IP. NSG rule tham chiếu ASG làm Source/Destination.
Ví dụ thực tế:
- Tạo ASG:
asg-web,asg-app,asg-db - Gán NIC của VM web vào
asg-web, VM app vàoasg-app... - NSG Rule: Source: asg-web, Dest: asg-app, Port: 8080, Protocol: TCP, Action: Allow
- Khi scale out VM web, chỉ cần gán NIC mới vào
asg-web → tự động áp dụng quy tắc.
Tạo NSG - Các cách thực hiện
Azure Portal
- Tìm "Network Security Groups" → Create
- Chọn Subscription, Resource Group, Region, Name
- Tạo xong → vào NSG → Inbound/Outbound security rules → Add quy tắc
- Gán NSG cho Subnet hoặc NIC: Subnets / Network interfaces → Associate
Azure CLI
# Tạo NSG
az network nsg create -g MyRG -n MyNSG -l eastus
# Tạo quy tắc cho phép HTTP inbound
az network nsg rule create -g MyRG --nsg-name MyNSG -n Allow-HTTP --priority 100 \
--source-address-prefixes Internet --destination-port-ranges 80 --protocol Tcp --access Allow --direction Inbound
# Gán cho Subnet
az network vnet subnet update -g MyRG --vnet-name MyVNet -n MySubnet --network-security-group MyNSG
Terraform
resource "azurerm_network_security_group" "example" {
name = "example-nsg"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
security_rule {
name = "AllowHTTPInbound"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "80"
source_address_prefix = "Internet"
destination_address_prefix = "*"
}
}
Xử lý quy tắc NSG - Thứ tự ưu tiên quan trọng
Khi một gói tin đến NIC của VM trong subnet có NSG:
- Xử lý quy tắc NSG gán cho NIC (nếu có) theo priority
- Nếu không khớp rule nào → Xử lý quy tắc NSG gán cho Subnet theo priority
- Nếu vẫn không khớp → Áp dụng Default Rules (Deny All Inbound/Outbound)
Best Practice: Chỉ gán NSG ở cấp Subnet. Dùng ASG để phân biệt quy tắc per-workload. Tránh gán NSG ở cả NIC và Subnet trừ khi cần thiết (phức tạp debug).
NSG vs Azure Firewall - So sánh
| Đặc điểm | NSG | Azure Firewall |
|---|---|---|
| Tầng OSI | Layer 3, 4 (IP, Port, Protocol) | Layer 3, 4, 7 (Application) |
| FQDN Filtering | Không | Có (FQDN, SQL FQDN, Wildcard) |
| TLS Inspection | Không | Có (TLS Inspection preview) |
| IDPS (IPS/IDS) | Không | Có (Signature-based, managed rules) |
| Threat Intelligence | Không | Có (Microsoft Threat Intelligence) |
| SNAT/DNAT | Không | Có (DNAT inbound, SNAT outbound) |
| Chi phí | Miễn phí (chỉ trả lưu lượng) | ~$1.25/giờ + dữ liệu xử lý |
| Phạm vi | VNet/Subnet/NIC | Hub VNet (centrally managed) |
| Logging | Flow Logs (NSG Flow Logs → Storage/Log Analytics) | Structured logs (App, Network, DNS, Threat) |
Best Practices cho NSG
- Ít nhất một NSG per Subnet (Management, Web, App, Data, Gateway...)
- Deny by default: Chỉ allow port cần thiết. Sử dụng priority cao cho Deny rules cụ thể nếu cần.
- Dùng Service Tags thay vì IP CIDR cứng cho dịch vụ Azure.
- Dùng ASG cho quy tắc theo workload (web→app, app→db).
- Bật NSG Flow Logs → Log Analytics Workspace → KQL query, Alert, Workbook.
- Test trước khi áp dụng: Dùng IP Flow Verify (Network Watcher) kiểm tra quy tắc cho phép/chặn IP:Port cụ thể.
- Đặt tên quy tắc có ý nghĩa:
Allow-HTTP-Inet-To-ASG-Web,Deny-RDP-From-Internet. - Giữ khoảng priority: 100, 110, 120... để dễ chèn rule mới.
- Review định kỳ: Xóa rule không dùng, gộp rule trùng lặp.
Kết luận
NSG là khối xây dựng nền tảng cho bảo mật mạng trong Azure, cung cấp lọc gói tin stateful tại L3/L4 miễn phí, tích hợp chặt chẽ với VNet, ASG, Service Tags. Dùng NSG cho kiểm soát truy cập mạng cơ bản, phân đoạn workload. Khi cần kiểm soát L7 (FQDN, TLS inspection, IPS, Threat Intel), triển khai Azure Firewall tại Hub VNet kết hợp NSG ở Spoke VNet (Hub-Spoke topology).