LAB 02 ~1.5 giờ Module 1 Cơ bản

Quản Trị Azure Cơ Bản

Thực hành toàn diện các công cụ quản trị Azure: Resource Groups, Tags, RBAC, Azure CLI, PowerShell, Cloud Shell, Resource Locks và di chuyển resources — nền tảng của mọi tác vụ quản trị Azure.

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ị

Hoàn thành trước:
  • 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)
Tài nguyên lab này tạo ra:
  • 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.

Resource Groups
rg-hoatranlab-dev
rg-hoatranlab-prod
Region
southeastasia
(Singapore)
Tags chuẩn
env=dev/prod
owner=hoatranlab
costcenter=IT

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

1

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.

Cách 1 — Azure Portal
  1. 1.portal.azure.com → Tìm kiếm "Resource groups" → + Create
  2. 2.Subscription: Azure subscription 1 → Resource group: rg-hoatranlab-dev
  3. 3.Region: (Asia Pacific) Southeast Asia → Next: Tags
  4. 4.Thêm tags: env=dev, owner=hoatranlab, costcenter=IT
  5. 5.Review + Create → Create → đợi notification "Resource group created"
  6. 6.Lặp lại cho rg-hoatranlab-prod với tag env=prod
Cách 2 — Azure CLI
Azure CLI
# 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
Kết quả (Output)
Name                  Location        Status
--------------------  --------------  ---------
rg-hoatranlab-dev     southeastasia   Succeeded
rg-hoatranlab-prod    southeastasia   Succeeded
2

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.

Cách 1 — Azure Portal
  1. 1.Resource Groups → click rg-hoatranlab-dev
  2. 2.Left menu → Tags → thêm tag mới: project=az104-lab
  3. 3.Click Apply → xác nhận tag xuất hiện trong Overview
  4. 4.Portal → Tags (search) → xem tất cả resources theo tag key
Cách 2 — Azure CLI
Azure CLI
# 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
3

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.

Lưu ý: Để thực hành phần này cần có một user account thứ hai trong Microsoft Entra ID (cùng tenant). Nếu chưa có, hãy tạo test user tại Microsoft Entra ID → Users → New user.
Cách 1 — Azure Portal
  1. 1.Vào rg-hoatranlab-devAccess control (IAM)
  2. 2.Tab Role assignments → click + AddAdd role assignment
  3. 3.Role: Contributor → Next → Members: chọn user test
  4. 4.Review + assign → xác nhận assignment xuất hiện trong danh sách
  5. 5.Tab Check access → tìm user → xem quyền chi tiết
Cách 2 — Azure CLI
Azure CLI
# 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
4

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.

Cách 1 — Azure Portal (Cloud Shell)
  1. 1.Portal → icon Cloud Shell (>) → chọn PowerShell
  2. 2.Cloud Shell đã có Az module sẵn — không cần cài thêm
  3. 3.Chạy Get-AzSubscription để kiểm tra
  4. 4.Chạy Get-AzResourceGroup xem danh sách RGs
Cách 2 — PowerShell Local
PowerShell— Run as Administrator
# 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
5

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).

Quan trọng: ReadOnly lock trên RG sẽ ảnh hưởng TẤT CẢ resources bên trong, kể cả ngăn tạo resource mới. Chỉ Owner và User Access Administrator mới gỡ được lock.
Cách 1 — Azure Portal
  1. 1.Vào rg-hoatranlab-prodLocks (left menu)
  2. 2.Click + Add → Lock name: lock-prod-nodelete
  3. 3.Lock type: Delete → Notes: "Production environment — delete protected"
  4. 4.Click OK → thấy lock xuất hiện trong danh sách
  5. 5.Thử xóa RG prod → sẽ thấy lỗi "cannot delete resource group"
Cách 2 — Azure CLI
Azure CLI
# 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
6

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.

Lưu ý: Không phải tất cả resource đều hỗ trợ move (e.g., Azure AD resources, Classic resources). Luôn kiểm tra tại docs.microsoft.com/move-support trước khi move production.
Cách 1 — Azure Portal
  1. 1.Vào RG nguồn → chọn resource cần move (tick checkbox)
  2. 2.Click Move (toolbar) → Move to another resource group
  3. 3.Chọn RG đích: rg-hoatranlab-prod
  4. 4.Azure validate dependencies → tick "I understand..." → Move
  5. 5.Theo dõi tiến trình qua Notifications (chuông) hoặc Activity Log
Cách 2 — Azure CLI
Azure CLI
# 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

2 Resource Groups tạo thành công

rg-hoatranlab-dev và rg-hoatranlab-prod tại southeastasia, có đầy đủ tags

Tags được áp dụng đúng

env, owner, costcenter, project hiển thị trong Portal và az group show

RBAC assignment thành công

User test có role Contributor trên rg-hoatranlab-dev, visible trong IAM

PowerShell Az module hoạt động

Get-AzResourceGroup trả về danh sách RGs giống az group list

Resource Lock bảo vệ Prod

Thử xóa rg-prod → lỗi AuthorizationFailed — lock hoạt động đúng

Resource move thành cô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.

Azure CLI
# 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

Lab 01: Đăng Ký Azure Thư viện Labs Lab 03: Virtual Machines
Zalo