LAB 10 ~45 phút Chương 3 AZ-500 Azure RBAC

Gán Azure RBAC theo Resource Group

Gán quyền đúng phạm vi: Reader cho auditor, Contributor cho dev tại resource group rg-az500-rbac. Kiểm tra scope inheritance, phân biệt Azure RBAC và Microsoft Entra roles theo chuẩn least privilege 2026.

🎯 Mục Tiêu Lab

Tạo resource group rg-az500-rbac tại Southeast Asia và gán RBAC role

Gán role Reader cho user az500-auditor01 tại scope resource group

Gán role Contributor cho user az500-dev01 tại scope resource group

Đăng nhập từng user, xác minh quyền thực tế và kiểm tra scope inheritance

Phân biệt Azure RBAC (quản lý tài nguyên) vs Microsoft Entra roles (quản lý danh tính)

Kiểm tra Access Control (IAM) và xem role assignment hiện có

🏗️ Kịch Bản

Công ty HoaTranLab có một resource group dùng cho dự án bảo mật. Bạn cần phân quyền đúng vai trò: az500-auditor01 chỉ được xem tài nguyên (Reader), az500-dev01 được tạo/sửa tài nguyên (Contributor) nhưng không thể quản lý phân quyền. Nguyên tắc least privilege — không cấp quyền vượt quá nhu cầu.

📋 Chuẩn Bị

Yêu cầu:
  • Azure subscription với quyền Owner hoặc User Access Administrator
  • User az500-auditor01az500-dev01 đã tạo (từ Lab 02)
  • Azure CLI phiên bản 2.50+ hoặc Azure Portal
  • Microsoft Entra ID — không yêu cầu license P1/P2 cho bước này
Lưu ý quan trọng:
  • Azure RBAC kiểm soát tài nguyên Azure — khác với Entra ID roles
  • Reader không thể tạo/sửa/xóa bất kỳ resource nào
  • Contributor không thể gán role cho người khác (cần User Access Admin)
  • Quyền được kế thừa từ scope cha (subscription → resource group → resource)

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

1

Tạo Resource Group cho lab RBAC

Tạo resource group rg-az500-rbac tại region Southeast Asia (Singapore) — tuân theo naming convention AZ-500.

Cách 1 — Portal
  1. 1.1Truy cập portal.azure.com → tìm Resource groups → click + Create
  2. 1.2Subscription: chọn subscription lab của bạn
  3. 1.3Resource group name: rg-az500-rbac
  4. 1.4Region: Southeast Asia (Singapore)
  5. 1.5Tags → thêm: owner=hoatranlab, lab=az500-lab10
  6. 1.6Click Review + createCreate
Cách 2 — Azure CLI
Azure CLI— PowerShell, Bash hoặc Cloud Shell
# Tạo resource group az500-rbac tại Southeast Asia
az group create \
  --name rg-az500-rbac \
  --location southeastasia \
  --tags "owner=hoatranlab" "lab=az500-lab10" "env=lab"

# Xác nhận tạo thành công
az group show \
  --name rg-az500-rbac \
  --output json
Kết quả bước 1: Portal hiển thị rg-az500-rbac với provisioningState: Succeeded, Location: Southeast Asia.
2

Gán role Reader cho az500-auditor01

Auditor chỉ cần xem tài nguyên để audit — không cần quyền tạo/sửa. Gán Reader tại scope resource group.

Cách 1 — Portal
  1. 2.1Mở rg-az500-rbac → menu trái: Access control (IAM)
  2. 2.2Click + AddAdd role assignment
  3. 2.3Tab Role: tìm và chọn Reader → Next
  4. 2.4Tab Members: Assign access to = User, group or service principal → + Select members → tìm az500-auditor01 → Select
  5. 2.5Click Review + assignAssign
Cách 2 — Azure CLI
Azure CLI— Gán Reader cho auditor
# Lấy Object ID của az500-auditor01 từ Microsoft Entra ID
AUDITOR_ID=$(az ad user show \
  --id [email protected] \
  --query id -o tsv)

echo "Auditor Object ID: $AUDITOR_ID"

# Lấy Resource Group ID
RG_ID=$(az group show \
  --name rg-az500-rbac \
  --query id -o tsv)

# Gán Reader cho auditor tại scope resource group
az role assignment create \
  --assignee $AUDITOR_ID \
  --role "Reader" \
  --scope $RG_ID

# Xác nhận assignment
az role assignment list \
  --scope $RG_ID \
  --assignee $AUDITOR_ID \
  --output table
3

Gán role Contributor cho az500-dev01

Developer cần tạo và quản lý tài nguyên nhưng không cần quản lý phân quyền — Contributor phù hợp.

Cách 1 — Portal
  1. 3.1rg-az500-rbacAccess control (IAM)+ AddAdd role assignment
  2. 3.2Role: tìm và chọn Contributor → Next
  3. 3.3Members: chọn az500-dev01 → Select → Next
  4. 3.4Click Review + assign
  5. 3.5Kiểm tra: IAM → Role assignments tab → thấy cả 2 assignment mới
Cách 2 — Azure CLI
Azure CLI— Gán Contributor cho dev
# Lấy Object ID của az500-dev01
DEV_ID=$(az ad user show \
  --id [email protected] \
  --query id -o tsv)

# Gán Contributor cho dev tại scope resource group
az role assignment create \
  --assignee $DEV_ID \
  --role "Contributor" \
  --scope $RG_ID

# Xem toàn bộ role assignment của RG
az role assignment list \
  --scope $RG_ID \
  --output table

# Kiểm tra assignment theo role name
az role assignment list \
  --scope $RG_ID \
  --role "Contributor" \
  --output json | \
  jq '.[].principalName'
4

Kiểm tra quyền thực tế — đăng nhập từng user

Đăng nhập bằng từng user để xác minh quyền. Dùng lệnh az login --allow-no-subscriptions hoặc Incognito browser.

Cách 1 — Portal
  1. 4.1Mở Incognito/InPrivate browser → đăng nhập bằng az500-auditor01
  2. 4.2Vào rg-az500-rbac → thử click + Create → thấy lỗi hoặc không có nút (Reader không tạo được)
  3. 4.3Đăng xuất → đăng nhập bằng az500-dev01 → vào cùng RG → thấy nút Create (Contributor có thể tạo)
  4. 4.4Bằng dev01: vào IAM → thử + Add role assignment → thấy lỗi Permission (Contributor không gán role được)
Cách 2 — Azure CLI
Azure CLI— Kiểm tra quyền từng user
# Đăng nhập bằng az500-auditor01 (terminal khác hoặc --tenant)
az login --username [email protected]

# Thử tạo storage account — sẽ bị từ chối (Reader không có quyền)
az storage account create \
  --name sttest$RANDOM \
  --resource-group rg-az500-rbac \
  --location southeastasia \
  --sku Standard_LRS
# → AuthorizationFailed: Reader does not have permission

# Kiểm tra quyền hiệu lực của user hiện tại
az role assignment list \
  --scope /subscriptions/YOUR_SUB_ID/resourceGroups/rg-az500-rbac \
  --assignee [email protected] \
  --output table
5

Xác minh Scope Inheritance

Quyền được kế thừa từ cha: nếu gán Reader ở subscription, user sẽ có Reader ở tất cả RG bên trong. Kiểm tra để hiểu rõ.

Cách 2 — Azure CLI
Azure CLI— Xem inheritance và effective access
# Xem role assignment bao gồm cả inherited (từ subscription)
az role assignment list \
  --scope /subscriptions/YOUR_SUB_ID/resourceGroups/rg-az500-rbac \
  --include-inherited \
  --output table

# Kiểm tra RBAC cho toàn bộ subscription (với admin account)
az role assignment list \
  --all \
  --include-inherited \
  --include-classic-administrators \
  --output table

# Xem permissions của một role cụ thể
az role definition show \
  --name "Contributor" \
  --output json | \
  jq '{name: .roleName, actions: .permissions[].actions, notActions: .permissions[].notActions}'
Verify Portal: rg-az500-rbac → IAM → Check access tab → nhập tên user → xem effective permissions hiển thị rõ inherited từ đâu.

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

Giữ lại rg-az500-rbac cho Lab 11 (Custom Role) nếu muốn. Xóa khi hoàn thành toàn bộ chương.

Azure CLI— Xóa role assignment và resource group
# Xóa role assignments trước khi xóa RG (optional — sẽ tự xóa khi xóa RG)
az role assignment delete \
  --assignee $AUDITOR_ID \
  --role "Reader" \
  --scope $RG_ID

az role assignment delete \
  --assignee $DEV_ID \
  --role "Contributor" \
  --scope $RG_ID

# Xóa resource group (khi hoàn thành Lab 11)
az group delete \
  --name rg-az500-rbac \
  --yes \
  --no-wait

📊 Kết Quả Đầu Ra Lab 10

rg-az500-rbac tạo thành công

Southeast Asia, provisioningState: Succeeded, tags đầy đủ

auditor01 có role Reader

IAM → Role assignments hiển thị Reader cho az500-auditor01

dev01 có role Contributor

az role assignment list trả về Contributor cho az500-dev01

Kiểm tra quyền xác nhận đúng

auditor01 bị từ chối create, dev01 tạo được resource nhưng không gán role được

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

1. Sự khác biệt cơ bản giữa Azure RBAC và Microsoft Entra ID roles là gì?

Gợi ý: Azure RBAC kiểm soát tài nguyên Azure (VM, Storage...); Entra roles kiểm soát đối tượng trong Entra ID (user, group, app). Hai hệ thống độc lập.

2. Contributor có thể làm gì mà Reader không thể? Contributor không thể làm gì?

Gợi ý: Contributor tạo/sửa/xóa resource được; Reader chỉ xem. Cả hai đều KHÔNG thể gán role (cần User Access Administrator hoặc Owner).

3. Nếu gán Contributor ở subscription scope, user có quyền gì ở resource group bên trong?

Gợi ý: User kế thừa Contributor trên TẤT CẢ resource group trong subscription — đây là scope inheritance.

4. Role Owner khác Contributor ở điểm nào quan trọng nhất với AZ-500?

Gợi ý: Owner có thêm quyền gán/xóa role assignments. Đây là lý do chỉ nên gán Owner cho rất ít người, dùng PIM để kiểm soát (Lab 12).

5. Lệnh CLI nào kiểm tra tất cả role assignments của một user bao gồm cả inherited?

Gợi ý: az role assignment list --all --include-inherited --assignee USER_ID

Lab 09: CA Device Compliance Thư viện Labs Lab 11: Custom Role Restart VM
Zalo