🎯 Mục Tiêu Lab
Bật Microsoft Defender for Servers trên subscription lab
Cấu hình JIT policy cho port 3389 (RDP) và 22 (SSH)
Request access với thời gian ngắn (3 giờ) từ IP cụ thể
Kiểm tra NSG rule được tạo tự động với time-bound
Xem JIT activity log và audit trail
Xác nhận NSG rule tự đóng sau khi hết thời gian
📋 Chuẩn Bị
- Azure subscription với quyền Security Admin hoặc Owner
- VM đang chạy có public IP (hoặc dùng lại VM từ lab trước)
- Biết IP công cộng của máy tính bạn đang dùng
- RG: rg-az500-lab33
- VM: vm-az500-lab33
- NSG: nsg-az500-lab33
🏗️ Kịch Bản
VM quản trị cần có public IP để hỗ trợ remote access trong trường hợp khẩn cấp, nhưng port 3389/22 không nên luôn mở. Với JIT VM Access, Defender for Servers quản lý NSG của VM — mặc định chặn tất cả, chỉ mở port tạm thời theo yêu cầu có audit log đầy đủ. Mỗi yêu cầu ghi rõ: ai yêu cầu, IP nguồn, thời gian, port — đáp ứng yêu cầu compliance và Zero Trust.
🧪 Các Bước Thực Hiện
Tạo VM Lab và Bật Defender for Servers
- 1.1Tạo VM Windows Server 2022 với public IP → RG:
rg-az500-lab33 - 1.2Portal → Microsoft Defender for Cloud → Environment settings → Chọn subscription → Defender plans
- 1.3Bật Servers (Plan 1 hoặc Plan 2) → Save
# Tạo resource group và VM với public IP và NSG
az group create --name rg-az500-lab33 --location southeastasia
az vm create \
--resource-group rg-az500-lab33 \
--name vm-az500-lab33 \
--image Win2022AzureEditionCore \
--size Standard_B2s \
--admin-username azureadmin \
--admin-password "P@ssw0rd!Az500Lab33" \
--location southeastasia \
--nsg nsg-az500-lab33 \
--nsg-rule RDP
# Bật Defender for Servers (Plan 1) trên subscription
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
az security pricing create \
--name VirtualMachines \
--tier Standard \
--subscription $SUBSCRIPTION_ID
# Xác nhận Defender for Servers đã bật
az security pricing show --name VirtualMachines \
--query "{name:name, tier:pricingTier}" -o table
Cấu Hình JIT Policy cho VM
- 2.1Defender for Cloud → Workload protections → Just-in-time VM access
- 2.2Tab Not configured → tìm
vm-az500-lab33→ Enable JIT on 1 VM - 2.3Cấu hình port RDP (3389): Max request time = 3 hours, Allowed source IPs = Per request → Save
- 2.4Thêm port SSH (22) với cùng cấu hình nếu muốn → Save
- 2.5VM chuyển sang tab Configured — JIT đã được bật
# Lấy VM resource ID
VM_ID=$(az vm show -g rg-az500-lab33 -n vm-az500-lab33 --query id -o tsv)
LOCATION="southeastasia"
# Tạo JIT policy cho VM (port 3389 và 22)
az security jit-policy create \
--location $LOCATION \
--name default \
--resource-group rg-az500-lab33 \
--virtual-machines "[
{
\"id\": \"$VM_ID\",
\"ports\": [
{
\"number\": 3389,
\"protocol\": \"TCP\",
\"allowedSourceAddressPrefix\": \"*\",
\"maxRequestAccessDuration\": \"PT3H\"
},
{
\"number\": 22,
\"protocol\": \"TCP\",
\"allowedSourceAddressPrefix\": \"*\",
\"maxRequestAccessDuration\": \"PT3H\"
}
]
}
]"
# Xác nhận JIT policy đã được tạo
az security jit-policy show \
--location $LOCATION \
--name default \
--resource-group rg-az500-lab33 \
--query "virtualMachines[0].ports" -o table
Request JIT Access và Kết Nối VM
- 3.1VM → Connect → RDP → Hiển thị thông báo "Just-in-time policy enabled" → Request access
- 3.2Chọn port 3389 ON → Source IP: My IP → Time: 3 hours → Open ports
- 3.3Tải file RDP → kết nối → nhập credentials
# Lấy IP công cộng của máy bạn
MY_IP=$(curl -s https://api.ipify.org)
echo "My public IP: $MY_IP"
VM_ID=$(az vm show -g rg-az500-lab33 -n vm-az500-lab33 --query id -o tsv)
# Request JIT access (mở port 3 giờ từ IP của bạn)
az security jit-policy initiate \
--location southeastasia \
--name default \
--resource-group rg-az500-lab33 \
--virtual-machines "[
{
\"id\": \"$VM_ID\",
\"ports\": [
{
\"number\": 3389,
\"duration\": \"PT3H\",
\"allowedSourceAddressPrefix\": \"$MY_IP\"
}
]
}
]"
# Kiểm tra NSG rule được tạo tự động
NSG_NAME=$(az network nsg list -g rg-az500-lab33 --query "[0].name" -o tsv)
az network nsg rule list -g rg-az500-lab33 --nsg-name $NSG_NAME \
--query "[?destinationPortRange=='3389'].{name:name, access:access, sourceAddr:sourceAddressPrefix}" \
-o table
SecurityCenter-JITRule-... xuất hiện với Allow inbound port 3389 từ IP của bạn. Rule có priority cao và sẽ tự xóa sau 3 giờ.
Xem JIT Activity Log và Audit Trail
# Xem JIT access request history qua Activity Log
az monitor activity-log list \
--resource-group rg-az500-lab33 \
--start-time $(date -u -d "1 hour ago" '+%Y-%m-%dT%H:%M:%SZ') \
--query "[?operationName.value=='Microsoft.Security/locations/jitNetworkAccessPolicies/initiate/action'].{time:eventTimestamp, caller:caller, status:status.value}" \
-o table
# Xem NSG rules hiện tại — rule JIT có prefix SecurityCenter
NSG_NAME=$(az network nsg list -g rg-az500-lab33 --query "[0].name" -o tsv)
az network nsg rule list -g rg-az500-lab33 --nsg-name $NSG_NAME \
--query "[].{name:name, priority:priority, access:access, port:destinationPortRange, source:sourceAddressPrefix}" \
-o table
📊 Kết Quả Đầu Ra
VM xuất hiện ở tab Configured trong JIT VM access của Defender for Cloud
SecurityCenter-JITRule-* xuất hiện trong NSG sau khi request, Allow port 3389 từ IP của bạn
Kết nối RDP vào VM thành công trong thời gian JIT còn hiệu lực
JIT initiate action ghi rõ caller, IP nguồn, port, thời gian trong Activity Log
🧹 Dọn Dẹp Tài Nguyên
# TẮT Defender for Servers để tránh tiếp tục tính phí
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
az security pricing create \
--name VirtualMachines \
--tier Free \
--subscription $SUBSCRIPTION_ID
# Xóa resource group lab
az group delete --name rg-az500-lab33 --yes --no-wait
❓ Câu Hỏi Ôn Tập
1. JIT VM Access thuộc tính năng của sản phẩm nào trong Microsoft Defender for Cloud?
Gợi ý: Microsoft Defender for Servers (Plan 1 hoặc Plan 2) — không có trong Free tier của Defender for Cloud.
2. Khi JIT policy được bật, điều gì xảy ra với NSG rule cho port 3389 mặc định?
Gợi ý: Defender for Cloud thêm NSG rule Deny port 3389 với priority cao — chặn tất cả mặc định. Khi request, rule Allow tạm thời có priority cao hơn.
3. Thời gian tối đa cho một JIT request là bao nhiêu giờ? Ai có thể thay đổi giới hạn này?
Gợi ý: Tối đa 24 giờ. Security Admin có thể cấu hình max request time trong JIT policy.
4. JIT VM Access khác gì so với việc đơn giản chỉ xóa NSG rule port 3389 khi không cần dùng?
Gợi ý: JIT có audit log, IP restriction, time-bound tự động, tích hợp Defender workflow, không cần thao tác thủ công mỗi lần.