🎯 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ị
- Azure subscription với quyền Owner hoặc User Access Administrator
- User
az500-auditor01vàaz500-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
- 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
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.
- 1.1Truy cập portal.azure.com → tìm Resource groups → click + Create
- 1.2Subscription: chọn subscription lab của bạn
- 1.3Resource group name:
rg-az500-rbac - 1.4Region: Southeast Asia (Singapore)
- 1.5Tags → thêm:
owner=hoatranlab,lab=az500-lab10 - 1.6Click Review + create → Create
# 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
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.
- 2.1Mở rg-az500-rbac → menu trái: Access control (IAM)
- 2.2Click + Add → Add role assignment
- 2.3Tab Role: tìm và chọn Reader → Next
- 2.4Tab Members: Assign access to = User, group or service principal → + Select members → tìm az500-auditor01 → Select
- 2.5Click Review + assign → Assign
# 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
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.
- 3.1rg-az500-rbac → Access control (IAM) → + Add → Add role assignment
- 3.2Role: tìm và chọn Contributor → Next
- 3.3Members: chọn az500-dev01 → Select → Next
- 3.4Click Review + assign
- 3.5Kiểm tra: IAM → Role assignments tab → thấy cả 2 assignment mới
# 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'
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.
- 4.1Mở Incognito/InPrivate browser → đăng nhập bằng az500-auditor01
- 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)
- 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.4Bằng dev01: vào IAM → thử + Add role assignment → thấy lỗi Permission (Contributor không gán role được)
# Đă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
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õ.
# 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}'
🧹 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.
# 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
Southeast Asia, provisioningState: Succeeded, tags đầy đủ
IAM → Role assignments hiển thị Reader cho az500-auditor01
az role assignment list trả về Contributor cho az500-dev01
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