Mục Tiêu Lab
Tạo và quản lý Resource Groups với naming convention chuẩn
Gán Tags để tổ chức và quản lý chi phí resources
Phân quyền RBAC (Role-Based Access Control) cho users và groups
Sử dụng thành thạo Azure CLI và PowerShell Az module
Áp dụng Resource Locks để bảo vệ resources quan trọng
Di chuyển resources giữa Resource Groups và Subscriptions
Yêu Cầu Chuẩn Bị
- Lab 01: Đăng ký Azure và cài Azure CLI
- az login thành công, subscription Active
- Azure CLI phiên bản 2.50+ (
az version) - PowerShell 5.1+ hoặc PowerShell 7+ (Windows)
- 2 Resource Groups (gần như không có chi phí)
- RBAC role assignments (miễn phí)
- Resource Locks (miễn phí)
- Xóa toàn bộ sau lab để tránh chi phí
Kịch Bản & Tài Nguyên
Bạn là Azure Administrator tại công ty HoaTranLab Corp. Nhiệm vụ: thiết lập cấu trúc Resource Groups cho môi trường Dev và Prod, phân quyền cho team Dev, bảo vệ Prod bằng Resource Lock, và thực hành di chuyển resource.
rg-hoatranlab-prod
(Singapore)
owner=hoatranlab
costcenter=IT
Các Bước Thực Hiện
Tạo Resource Groups Dev & Prod
Resource Group là đơn vị quản lý, phân quyền và billing cơ bản nhất trong Azure. Mỗi resource phải thuộc đúng một RG.
- 1.portal.azure.com → Tìm kiếm "Resource groups" → + Create
- 2.Subscription: Azure subscription 1 → Resource group:
rg-hoatranlab-dev - 3.Region: (Asia Pacific) Southeast Asia → Next: Tags
- 4.Thêm tags:
env=dev,owner=hoatranlab,costcenter=IT - 5.Review + Create → Create → đợi notification "Resource group created"
- 6.Lặp lại cho
rg-hoatranlab-prodvới tagenv=prod
# Tạo RG cho môi trường Dev az group create \ --name rg-hoatranlab-dev \ --location southeastasia \ --tags env=dev owner=hoatranlab costcenter=IT # Tạo RG cho môi trường Prod az group create \ --name rg-hoatranlab-prod \ --location southeastasia \ --tags env=prod owner=hoatranlab costcenter=IT # Verify cả hai đã tạo az group list \ --query "[?starts_with(name,'rg-hoatranlab')]" \ --output table
Name Location Status -------------------- -------------- --------- rg-hoatranlab-dev southeastasia Succeeded rg-hoatranlab-prod southeastasia Succeeded
Quản Lý Tags
Tags là metadata key-value gắn vào resource để phân loại, lọc và phân bổ chi phí. Azure Cost Management dùng tags để tách billing theo team/project.
- 1.Resource Groups → click rg-hoatranlab-dev
- 2.Left menu → Tags → thêm tag mới:
project=az104-lab - 3.Click Apply → xác nhận tag xuất hiện trong Overview
- 4.Portal → Tags (search) → xem tất cả resources theo tag key
# Thêm tag vào RG đã có (merge) az group update \ --name rg-hoatranlab-dev \ --set tags.project=az104-lab \ --set tags.version=2026 # Xem tags của RG az group show \ --name rg-hoatranlab-dev \ --query tags \ --output json # Tìm tất cả RG có tag env=dev az group list \ --tag env=dev \ --output table
Phân Quyền RBAC
RBAC (Role-Based Access Control) cho phép cấp quyền chi tiết theo principle of least privilege. Các built-in roles phổ biến: Owner, Contributor, Reader, User Access Administrator.
- 1.Vào rg-hoatranlab-dev → Access control (IAM)
- 2.Tab Role assignments → click + Add → Add role assignment
- 3.Role: Contributor → Next → Members: chọn user test
- 4.Review + assign → xác nhận assignment xuất hiện trong danh sách
- 5.Tab Check access → tìm user → xem quyền chi tiết
# Lấy subscription ID SUB_ID=$(az account show --query id -o tsv) # Lấy scope của RG dev RG_SCOPE="/subscriptions/$SUB_ID/resourceGroups/rg-hoatranlab-dev" # Gán role Contributor cho user (thay email) az role assignment create \ --assignee "[email protected]" \ --role "Contributor" \ --scope "$RG_SCOPE" # Xem tất cả role assignments trên RG az role assignment list \ --resource-group rg-hoatranlab-dev \ --output table # Kiểm tra quyền của user cụ thể az role assignment list \ --assignee "[email protected]" \ --resource-group rg-hoatranlab-dev \ --query "[].{Role:roleDefinitionName, Scope:scope}" \ --output table
Azure PowerShell — Az Module
Az module là tập hợp cmdlets PowerShell để quản lý Azure. Hữu ích trong môi trường Windows-heavy hoặc khi cần scripting phức tạp hơn CLI.
- 1.Portal → icon Cloud Shell (>) → chọn PowerShell
- 2.Cloud Shell đã có Az module sẵn — không cần cài thêm
- 3.Chạy
Get-AzSubscriptionđể kiểm tra - 4.Chạy
Get-AzResourceGroupxem danh sách RGs
# Cài Az module (lần đầu, cần Admin) Install-Module -Name Az -AllowClobber -Scope CurrentUser # Đăng nhập Connect-AzAccount # Xem subscriptions Get-AzSubscription # Đặt subscription mặc định Set-AzContext -SubscriptionName "Azure subscription 1" # Xem Resource Groups Get-AzResourceGroup | Format-Table Name, Location, ProvisioningState # Xem tags của RG (Get-AzResourceGroup -Name "rg-hoatranlab-dev").Tags
Resource Locks — Bảo Vệ Tài Nguyên Prod
Resource Locks ngăn chặn xóa hoặc sửa đổi tài nguyên vô ý. Có 2 loại: CanNotDelete (không xóa được, có thể sửa) và ReadOnly (chỉ đọc, không sửa/xóa).
- 1.Vào rg-hoatranlab-prod → Locks (left menu)
- 2.Click + Add → Lock name:
lock-prod-nodelete - 3.Lock type: Delete → Notes: "Production environment — delete protected"
- 4.Click OK → thấy lock xuất hiện trong danh sách
- 5.Thử xóa RG prod → sẽ thấy lỗi "cannot delete resource group"
# Tạo Delete lock trên RG prod az lock create \ --name lock-prod-nodelete \ --resource-group rg-hoatranlab-prod \ --lock-type CanNotDelete \ --notes "Production environment - delete protected" # Xem locks trên RG az lock list \ --resource-group rg-hoatranlab-prod \ --output table # Thử xóa RG (sẽ thất bại vì có lock) az group delete --name rg-hoatranlab-prod --yes # Output: ERROR: Cannot delete locked resource # Xóa lock (khi cần dọn dẹp) az lock delete \ --name lock-prod-nodelete \ --resource-group rg-hoatranlab-prod
Di Chuyển Resources Giữa Resource Groups
Azure hỗ trợ di chuyển hầu hết resource types giữa RG hoặc subscriptions. Trong quá trình move, resource bị lock tạm thời nhưng vẫn hoạt động bình thường.
- 1.Vào RG nguồn → chọn resource cần move (tick checkbox)
- 2.Click Move (toolbar) → Move to another resource group
- 3.Chọn RG đích:
rg-hoatranlab-prod - 4.Azure validate dependencies → tick "I understand..." → Move
- 5.Theo dõi tiến trình qua Notifications (chuông) hoặc Activity Log
# Tạo resource test để move (storage account) az storage account create \ --name sthoatrandevtest$RANDOM \ --resource-group rg-hoatranlab-dev \ --location southeastasia \ --sku Standard_LRS \ --min-tls-version TLS1_2 \ --https-only true # Lấy resource ID (thay tên storage thực tế) RES_ID=$(az storage account show \ --name sthoatrandevtest1234 \ --resource-group rg-hoatranlab-dev \ --query id -o tsv) # Validate move trước (dry run) az resource move \ --destination-group rg-hoatranlab-prod \ --ids "$RES_ID" # Confirm move thành công az storage account show \ --ids "$RES_ID" \ --query resourceGroup -o tsv
Kết Quả Đầu Ra Lab 02
rg-hoatranlab-dev và rg-hoatranlab-prod tại southeastasia, có đầy đủ tags
env, owner, costcenter, project hiển thị trong Portal và az group show
User test có role Contributor trên rg-hoatranlab-dev, visible trong IAM
Get-AzResourceGroup trả về danh sách RGs giống az group list
Thử xóa rg-prod → lỗi AuthorizationFailed — lock hoạt động đúng
Storage account di chuyển sang rg-prod, resourceGroup field đã cập nhật
Dọn Dẹp Tài Nguyên
Xóa lock trước, sau đó xóa resource groups để dọn sạch subscription.
# Bước 1: Xóa lock trên prod trước az lock delete \ --name lock-prod-nodelete \ --resource-group rg-hoatranlab-prod # Bước 2: Xóa cả hai RG (--no-wait để chạy nền) az group delete \ --name rg-hoatranlab-dev \ --yes \ --no-wait az group delete \ --name rg-hoatranlab-prod \ --yes \ --no-wait # Xác nhận đã xóa (sau ~2-3 phút) az group list \ --query "[?starts_with(name,'rg-hoatranlab')]" \ --output table
Câu Hỏi Ôn Tập
1. Sự khác biệt giữa ReadOnly lock và CanNotDelete lock là gì? Khi nào nên dùng mỗi loại?
Gợi ý: ReadOnly = không thể write/delete; CanNotDelete = có thể modify nhưng không xóa. ReadOnly dùng cho production critical resources; CanNotDelete dùng phổ biến hơn vì ít ảnh hưởng operations.
2. RBAC inheritance hoạt động như thế nào? Nếu gán Reader role ở Subscription level, user có quyền gì trên Resource Group?
Gợi ý: Permissions kế thừa từ trên xuống (Subscription → RG → Resource). Reader ở Sub level = Reader trên TẤT CẢ RGs trong sub đó.
3. Tags trên Resource Group có tự động kế thừa xuống resources bên trong không?
Gợi ý: Không tự động. Phải dùng Azure Policy với DeployIfNotExists hoặc Modify effect để propagate tags từ RG xuống resources.
4. Khi move resource giữa RG, điều gì sẽ KHÔNG thay đổi và điều gì có thể thay đổi?
Gợi ý: Resource ID sẽ thay đổi (chứa RG name); resource endpoint, functionality không thay đổi; RBAC assignments ở resource level được giữ nhưng assignments từ RG nguồn sẽ không áp dụng.
5. Lệnh Azure CLI nào để xem TẤT CẢ role assignments của một user cụ thể trên mọi scope?
Gợi ý: az role assignment list --assignee <email> --all — flag --all để include inherited assignments