AZ-500 LAB 20 ~60 phút Chương 05 Secure Networking

Application Security Group Web / DB

Tạo hai ASG (asg-web, asg-db), gán NIC của VM Web và VM DB vào từng ASG tương ứng, viết NSG rule dùng ASG làm source/destination thay vì IP tĩnh, kiểm tra chỉ Web mới kết nối được DB trên port 3306.

🎯 Mục Tiêu Lab

Tạo 2 Application Security Group: asg-webasg-db

Tạo 2 VM: vm-web (Ubuntu) và vm-db (Ubuntu) trong cùng subnet

Gán NIC của từng VM vào ASG tương ứng

Tạo NSG rule: asg-web → asg-db port 3306 Allow; mọi nguồn khác Deny

Kiểm tra effective security rules trên từng NIC

Hiểu lợi ích của ASG: scale mà không cần cập nhật rule IP tĩnh

📋 Chuẩn Bị

Yêu cầu:
  • Azure subscription với quyền Contributor
  • Hoàn thành Lab 19 (hiểu NSG cơ bản)
  • Azure CLI 2.50+ hoặc Azure Portal
Tài nguyên sẽ tạo:
  • RG: rg-az500-asg-lab20
  • VNet: vnet-az500-lab20 (10.20.0.0/16)
  • ASG: asg-webasg-db
  • VM: vm-az500-webvm-az500-db

🏗️ Kịch Bản

HoaTranLab triển khai ứng dụng 2 tầng: tầng Web (port 80/443) và tầng DB (MySQL port 3306). Yêu cầu bảo mật: chỉ Web server được kết nối DB; DB không expose ra internet. Dùng ASG để rule NSG tự động apply khi thêm VM mới vào nhóm mà không cần sửa rule IP tĩnh.

🧪 Các Bước Thực Hiện

1

Tạo RG, VNet và 2 Application Security Group

Cách 1 — Portal
  1. 1.1Tạo Resource Group rg-az500-asg-lab20, region Southeast Asia
  2. 1.2Tạo VNet vnet-az500-lab20 (10.20.0.0/16), subnet snet-app (10.20.1.0/24)
  3. 1.3Portal → search "Application security groups"+ Create → Name: asg-web, RG: rg-az500-asg-lab20 → Create
  4. 1.4Lặp lại tạo ASG thứ hai: asg-db
Cách 2 — Azure CLI
Azure CLI— Tạo ASG trước khi tạo VM
# Resource group + VNet
az group create --name rg-az500-asg-lab20 --location southeastasia \
  --tags "owner=hoatranlab" "env=lab" "module=az500-ch05"

az network vnet create \
  --resource-group rg-az500-asg-lab20 \
  --name vnet-az500-lab20 \
  --address-prefix 10.20.0.0/16 \
  --subnet-name snet-app \
  --subnet-prefix 10.20.1.0/24

# Tạo 2 Application Security Group
az network asg create \
  --resource-group rg-az500-asg-lab20 \
  --name asg-web \
  --location southeastasia

az network asg create \
  --resource-group rg-az500-asg-lab20 \
  --name asg-db \
  --location southeastasia

# Xác nhận
az network asg list --resource-group rg-az500-asg-lab20 --output table
2

Tạo NSG với Rules Dùng ASG làm Source/Destination

Cách 1 — Portal
  1. 2.1Tạo NSG nsg-az500-lab20 trong RG, region Southeast Asia
  2. 2.2Inbound rule 1: Source = Application security groupasg-web; Dest = asg-db; Port: 3306; Protocol: TCP; Action: Allow; Priority: 100; Name: Allow-Web-To-DB
  3. 2.3Inbound rule 2: Source = Any; Dest = asg-db; Port: 3306; Protocol: TCP; Action: Deny; Priority: 200; Name: Deny-DB-From-Others
  4. 2.4Inbound rule 3: Allow HTTP/HTTPS (80, 443) từ Internet đến asg-web; Priority: 110; Name: Allow-Internet-To-Web
  5. 2.5Associate NSG với subnet snet-app
Cách 2 — Azure CLI
Azure CLI— NSG rules tham chiếu ASG thay vì IP
RG="rg-az500-asg-lab20"

# Tạo NSG
az network nsg create \
  --resource-group $RG \
  --name nsg-az500-lab20 \
  --location southeastasia

# Rule: cho phép Internet → Web (port 80, 443)
az network nsg rule create \
  --resource-group $RG \
  --nsg-name nsg-az500-lab20 \
  --name Allow-Internet-To-Web \
  --priority 110 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-address-prefixes Internet \
  --destination-asgs asg-web \
  --destination-port-ranges 80 443

# Rule: cho phép Web → DB (port 3306)
az network nsg rule create \
  --resource-group $RG \
  --nsg-name nsg-az500-lab20 \
  --name Allow-Web-To-DB \
  --priority 100 \
  --direction Inbound \
  --access Allow \
  --protocol Tcp \
  --source-asgs asg-web \
  --destination-asgs asg-db \
  --destination-port-ranges 3306

# Rule: chặn mọi nguồn khác vào DB port 3306
az network nsg rule create \
  --resource-group $RG \
  --nsg-name nsg-az500-lab20 \
  --name Deny-DB-From-Others \
  --priority 200 \
  --direction Inbound \
  --access Deny \
  --protocol Tcp \
  --source-address-prefixes "*" \
  --destination-asgs asg-db \
  --destination-port-ranges 3306

# Gán NSG vào subnet
az network vnet subnet update \
  --resource-group $RG \
  --vnet-name vnet-az500-lab20 \
  --name snet-app \
  --network-security-group nsg-az500-lab20
3

Tạo VM Web và VM DB, Gán NIC vào ASG

Cách 1 — Portal
  1. 3.1Tạo VM vm-az500-web: Ubuntu 22.04, Standard_B1s, subnet snet-app, Public IP Standard SKU
  2. 3.2Sau khi VM web tạo xong: VM → Networking → click NIC → Application security groupsConfigure → chọn asg-web → Save
  3. 3.3Tạo VM vm-az500-db: Ubuntu 22.04, Standard_B1s, subnet snet-app, không cần Public IP
  4. 3.4Gán NIC vm-db vào asg-db tương tự bước 3.2
Cách 2 — Azure CLI
Azure CLI— Gán ASG trực tiếp khi tạo NIC
RG="rg-az500-asg-lab20"

# Public IP cho VM web (Standard SKU)
az network public-ip create \
  --resource-group $RG --name pip-vm-web \
  --sku Standard --allocation-method Static

# NIC web - gán vào asg-web
az network nic create \
  --resource-group $RG --name nic-vm-web \
  --vnet-name vnet-az500-lab20 --subnet snet-app \
  --public-ip-address pip-vm-web \
  --application-security-groups asg-web

# NIC db - không public IP, gán vào asg-db
az network nic create \
  --resource-group $RG --name nic-vm-db \
  --vnet-name vnet-az500-lab20 --subnet snet-app \
  --application-security-groups asg-db

# Tạo VM web
az vm create \
  --resource-group $RG --name vm-az500-web \
  --nics nic-vm-web \
  --image Ubuntu2204 --size Standard_B1s \
  --admin-username azureadmin --generate-ssh-keys \
  --no-wait

# Tạo VM db
az vm create \
  --resource-group $RG --name vm-az500-db \
  --nics nic-vm-db \
  --image Ubuntu2204 --size Standard_B1s \
  --admin-username azureadmin --generate-ssh-keys \
  --no-wait

# Kiểm tra ASG assignment
az network nic show \
  --resource-group $RG --name nic-vm-web \
  --query "applicationSecurityGroups[].id" -o tsv
4

Xác Minh Effective Security Rules và Kiểm Tra Kết Nối

Cách 1 — Portal
  1. 4.1Vào NIC của vm-az500-dbEffective security rules → Xác nhận rule Allow-Web-To-DBDeny-DB-From-Others đều hiện
  2. 4.2SSH vào vm-az500-web → thử nc -zv <DB_PRIVATE_IP> 3306 → Kết quả: succeeded
  3. 4.3Network Watcher → IP Flow Verify: Source = IP vm-web, Dest port = 3306 trên vm-db → Access: Allow
Cách 2 — Azure CLI
Azure CLI— Xem effective rules và test IP flow
RG="rg-az500-asg-lab20"

# Lấy private IP của vm-db
DB_IP=$(az vm list-ip-addresses \
  --resource-group $RG --name vm-az500-db \
  --query "[0].virtualMachine.network.privateIpAddresses[0]" -o tsv)
echo "DB Private IP: $DB_IP"

# Xem effective security rules trên NIC của vm-db
az network nic show-effective-nsg \
  --resource-group $RG \
  --name nic-vm-db \
  --query "effectiveNetworkSecurityGroups[0].effectiveSecurityRules[].{Name:name,Access:access,Direction:direction,DestPort:destinationPortRange}" \
  --output table

# Test IP flow: web → db:3306 (expect Allow)
WEB_IP=$(az vm list-ip-addresses \
  --resource-group $RG --name vm-az500-web \
  --query "[0].virtualMachine.network.privateIpAddresses[0]" -o tsv)

az network watcher test-ip-flow \
  --resource-group $RG \
  --vm vm-az500-db \
  --direction Inbound \
  --protocol TCP \
  --local "$DB_IP:3306" \
  --remote "$WEB_IP:*"

📊 Kết Quả Đầu Ra

2 ASG tồn tại

asg-web và asg-db trong rg-az500-asg-lab20, region southeastasia

NIC gán vào ASG đúng

nic-vm-web → asg-web; nic-vm-db → asg-db

Web → DB port 3306: Allow

IP Flow Verify xác nhận Allow-Web-To-DB được match

Other → DB port 3306: Deny

Deny-DB-From-Others chặn mọi nguồn không thuộc asg-web

🧹 Dọn Dẹp Tài Nguyên

Azure CLI— Xóa toàn bộ resources lab 20
az group delete --name rg-az500-asg-lab20 --yes --no-wait

❓ Câu Hỏi Ôn Tập

1. ASG (Application Security Group) giải quyết vấn đề gì so với dùng IP address trực tiếp trong NSG rule?

Gợi ý: Không cần cập nhật rule khi IP thay đổi hoặc thêm VM mới. Chỉ cần gán NIC vào ASG đúng nhóm.

2. Một NIC có thể thuộc nhiều ASG không? Hạn chế nào cần lưu ý?

Gợi ý: Có, một NIC có thể thuộc nhiều ASG. Tuy nhiên tất cả ASG đó phải cùng region và cùng VNet.

3. Nếu thêm một VM web thứ 3 vào hệ thống, bạn cần làm gì để rule Allow-Web-To-DB áp dụng cho VM mới?

Gợi ý: Chỉ cần gán NIC của VM mới vào asg-web. Rule NSG tự động áp dụng, không cần sửa bất kỳ rule nào.

4. Effective Security Rules khác gì với danh sách rules trong NSG?

Gợi ý: Effective rules là tổng hợp của cả subnet NSG và NIC NSG (nếu có), bao gồm default rules của Azure. Cho thấy rule nào thực sự được apply.

Lab 19: NSG Kiểm Soát Truy Cập VM Thư viện Labs Lab 21: UDR Route qua Firewall
Zalo