Lý Thuyết Cốt Lõi
1. Tổng Quan & Lợi Ích Microsoft Entra ID
Microsoft Entra ID (tên cũ: Azure Active Directory) là dịch vụ quản lý danh tính và quyền truy cập (Identity & Access Management — IAM) trên cloud của Microsoft. Mọi subscription Azure đều phải gắn với đúng một Entra ID tenant. Entra ID không thay thế AD DS on-premises mà hoạt động song song và tích hợp qua Microsoft Entra Connect.
- • Đăng nhập một lần (SSO) vào hàng nghìn SaaS app
- • Multi-Factor Authentication (MFA) tích hợp sẵn
- • Conditional Access kiểm soát truy cập theo điều kiện
- • Identity Protection phát hiện đăng nhập rủi ro
- • B2B: mời đối tác/nhà cung cấp từ domain ngoài vào tenant
- • B2C: quản lý danh tính khách hàng cho ứng dụng công khai
- • Guest users hưởng quyền truy cập hạn chế
- • Cross-tenant collaboration không cần VPN
- • Đồng bộ với on-prem AD qua Microsoft Entra Connect
- • Privileged Identity Management (PIM) — just-in-time
- • Access reviews kiểm tra định kỳ quyền truy cập
- • Audit log, sign-in log đầy đủ
contoso.onmicrosoft.com). Tenant ID là GUID không đổi. Một tenant có thể liên kết nhiều Azure subscriptions, nhưng một subscription chỉ trust một tenant.
2. So Sánh AD DS On-Premises vs Microsoft Entra ID
AD DS (Active Directory Domain Services) và Entra ID đều quản lý danh tính nhưng được thiết kế cho hai môi trường và giao thức hoàn toàn khác nhau. Không nên nhầm lẫn hai hệ thống này.
| Tiêu chí | AD DS (On-Premises) | Microsoft Entra ID (Cloud) |
|---|---|---|
| Cấu trúc | Hierarchical: Forest → Domain → OU | Flat: Tenant → Users/Groups (không có OU) |
| Giao thức xác thực | Kerberos, NTLM, LDAP | OAuth 2.0, OpenID Connect, SAML 2.0 |
| Quản lý thiết bị | Group Policy (GPO) — domain join | Intune MDM/MAM — Entra Join/Register |
| Hạ tầng | Domain Controller on-prem (VM/bare metal) | SaaS — Microsoft quản lý hoàn toàn, HA tự động |
| MFA & Conditional Access | Không có sẵn (cần ADFS/MFA Server riêng) | Tích hợp sẵn, cấu hình bằng portal/CLI |
| Phù hợp với | Legacy app, domain join, GPO, on-prem file share | Cloud app, M365, Azure resources, modern auth |
3. Các Edition Entra ID — Free / P1 / P2
- User & Group management
- SSO (tối đa 10 enterprise app)
- B2B collaboration
- MFA (security defaults)
- Conditional Access
- SSPR (cloud only)
- Identity Protection
- Tất cả tính năng Free
- Conditional Access policies
- SSPR (bao gồm on-prem writeback)
- Hybrid Entra Join
- Dynamic groups
- SSO không giới hạn app
- Identity Protection / PIM
- Tất cả tính năng P1
- Identity Protection (risk policies)
- Privileged Identity Management (PIM)
- Access Reviews
- Entitlement Management
- Risky sign-in detection + remediation
4. Self-Service Password Reset (SSPR)
SSPR cho phép người dùng tự đặt lại mật khẩu hoặc mở khóa tài khoản mà không cần liên hệ IT Helpdesk — giảm gánh nặng support và tăng năng suất. Quản trị viên bật SSPR từ Entra ID → Password reset.
- • Mobile app notification (Microsoft Authenticator)
- • Mobile app code (TOTP 6 chữ số)
- • Email (địa chỉ email thay thế)
- • Mobile phone (SMS hoặc gọi thoại)
- • Office phone (gọi thoại)
- • Security questions (chỉ dùng bổ sung, không đứng một mình)
- • Enabled: None / Selected (nhóm cụ thể) / All
- • Number of methods required: 1 hoặc 2 (khuyến nghị 2)
- • Registration: bắt buộc đăng ký khi đăng nhập lần đầu
- • Notifications: gửi email khi mật khẩu được đặt lại
- • On-premises writeback: cần P1, Entra Connect, Write-back được bật
Bài Tập Thực Hành (Lab)
Kiểm tra thông tin Entra ID Tenant và tạo Resource Group
# Đăng nhập Azure
az login
# Xem thông tin Entra ID tenant hiện tại
az account show --query '{tenantId:tenantId, subscriptionId:id, name:name}' -o json
# Xem danh sách tenant (nếu có nhiều)
az account tenant list -o table
# Xem thông tin tổ chức (display name, domain)
az rest --method GET \
--url 'https://graph.microsoft.com/v1.0/organization' \
--query 'value[0].{displayName:displayName, domains:verifiedDomains[*].name}' \
-o json
# Tạo Resource Group cho module 01
az group create \
--name rg-az104-m01 \
--location southeastasia \
--tags Module=01 Course=AZ-104 Environment=Lab
xxx.onmicrosoft.com), và License. Vào Resource Groups → xác nhận rg-az104-m01 tại Southeast Asia.
Thêm Custom Domain và xem trạng thái xác minh
# LƯU Ý: Azure CLI KHÔNG có lệnh "az ad domain".
# Custom domain của Entra ID được quản lý qua Microsoft Graph API (az rest) hoặc Portal.
# Cần đăng nhập bằng tài khoản Global Administrator (quyền Domain.ReadWrite.All).
# Xem danh sách domain hiện có trong tenant
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/domains" \
--query "value[].{domain:id, verified:isVerified, default:isDefault}" -o table
# Thêm custom domain (thay hoatranlab.vn bằng domain thực sở hữu)
# Bước này chỉ thêm domain, chưa xác minh
az rest --method POST \
--url "https://graph.microsoft.com/v1.0/domains" \
--headers "Content-Type=application/json" \
--body '{"id":"hoatranlab.vn"}'
# Lấy bản ghi xác minh (TXT/MX) để thêm vào DNS provider
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/domains/hoatranlab.vn/verificationDnsRecords" \
--query "value[].{type:recordType, label:label, text:text, ttl:ttl}" -o table
# Sau khi đã thêm TXT record vào DNS, xác minh domain
# (Cần chờ DNS propagation 5–60 phút)
az rest --method POST \
--url "https://graph.microsoft.com/v1.0/domains/hoatranlab.vn/verify" \
--headers "Content-Type=application/json" \
--body "{}"
# Kiểm tra trạng thái sau xác minh
az rest --method GET \
--url "https://graph.microsoft.com/v1.0/domains/hoatranlab.vn" \
--query "{domain:id, verified:isVerified, default:isDefault}" -o table
az rest ở trên dùng --body JSON theo cú pháp Bash / Azure Cloud Shell. Trên PowerShell/CMD cần escape dấu nháy khác đi, nên khuyến nghị chạy trong Azure Cloud Shell (Bash).Cách nhanh qua Portal: Azure Portal → Microsoft Entra ID → Custom domain names → + Add custom domain → nhập domain → copy TXT record vào DNS provider → Verify. Xác nhận domain ở trạng thái Verified. Nếu lab không có domain thực, dùng domain
*.onmicrosoft.com mặc định và bỏ qua bước xác minh.
Cấu hình Self-Service Password Reset (SSPR) qua Azure CLI & Graph API
# Lấy access token cho Microsoft Graph
TOKEN=$(az account get-access-token \
--resource https://graph.microsoft.com \
--query accessToken -o tsv)
# Xem cấu hình SSPR hiện tại (authentication methods policy)
curl -s -H "Authorization: Bearer $TOKEN" \
"https://graph.microsoft.com/v1.0/policies/authenticationMethodsPolicy" \
| python3 -m json.tool | grep -E '"id"|"state"|"displayName"'
# Tạo nhóm SSPR-Enabled để kiểm soát ai được dùng SSPR
az ad group create \
--display-name "SSPR-Enabled-Users" \
--mail-nickname "sspr-enabled-users" \
--description "Nhóm người dùng được phép dùng Self-Service Password Reset"
# Xem Group ID
GROUP_SSPR=$(az ad group show \
--group "SSPR-Enabled-Users" \
--query id -o tsv)
echo "SSPR Group ID: $GROUP_SSPR"
# Ghi chú: Bật SSPR cho nhóm cụ thể thực hiện qua Portal:
# Entra ID → Password reset → Properties → Selected → chọn nhóm SSPR-Enabled-Users
# Sau đó vào Authentication methods → bật Mobile app notification, Email
# Vào Registration → On (require registration at sign-in)
echo "SSPR group created: $GROUP_SSPR"
echo "Tiếp theo: bật SSPR qua Portal → Entra ID → Password reset"
Xem và phân tích Audit Log & Sign-in Log của Entra ID
TOKEN=$(az account get-access-token \
--resource https://graph.microsoft.com \
--query accessToken -o tsv)
# Xem audit log 10 sự kiện gần nhất (yêu cầu P1/P2 hoặc quyền AuditLog.Read.All)
curl -s -H "Authorization: Bearer $TOKEN" \
"https://graph.microsoft.com/v1.0/auditLogs/directoryAudits?\$top=10&\$orderby=activityDateTime desc" \
| python3 -c "
import json,sys
data=json.load(sys.stdin)
for e in data.get('value',[]):
print(f\"{e['activityDateTime'][:19]} | {e['activityDisplayName']} | {e['result']}\")
"
# Xem sign-in log 10 đăng nhập gần nhất
curl -s -H "Authorization: Bearer $TOKEN" \
"https://graph.microsoft.com/v1.0/auditLogs/signIns?\$top=10&\$orderby=createdDateTime desc" \
| python3 -c "
import json,sys
data=json.load(sys.stdin)
for e in data.get('value',[]):
user=e.get('userDisplayName','N/A')
status=e.get('status',{}).get('errorCode',0)
app=e.get('appDisplayName','N/A')
ts=e['createdDateTime'][:19]
result='SUCCESS' if status==0 else f'FAIL({status})'
print(f'{ts} | {user} | {app} | {result}')
"
Cleanup — Dọn dẹp tài nguyên lab
# Xóa nhóm SSPR đã tạo
az ad group delete --group "SSPR-Enabled-Users"
# Xóa Resource Group (kéo theo tất cả resource bên trong)
az group delete --name rg-az104-m01 --yes --no-wait
# Xác nhận RG đã được đánh dấu xóa
az group show --name rg-az104-m01 --query provisioningState -o tsv 2>/dev/null \
|| echo "Resource group rg-az104-m01 đã xóa thành công"
Kết Quả Đầu Ra
Nắm rõ tenant, directory, subscription relationship; phân biệt Entra ID với AD DS on-premises
Phân biệt giao thức (Kerberos/LDAP vs OAuth/OIDC), cấu trúc (OU hierarchy vs flat), và use case phù hợp
Phân biệt Free / P1 / P2 và biết tính năng nào thuộc tier nào (Conditional Access → P1, PIM → P2)
Bật SSPR cho nhóm cụ thể, cấu hình authentication methods, hiểu on-premises writeback
Thêm domain tùy chỉnh, lấy TXT record, xác minh DNS, đặt làm primary domain
Truy vấn log qua Graph API và Portal, phân tích đăng nhập rủi ro và sự kiện directory
Ứng Dụng Thực Tế
Tình huống 1: Công ty Fintech 500 nhân viên — Chuyển đổi lên Entra ID
Công ty đang dùng AD DS on-prem với 2 Domain Controller, muốn chuyển toàn bộ nhân viên lên M365 và Azure mà vẫn giữ domain nội bộ.
Triển khai Microsoft Entra Connect để đồng bộ user/group từ AD DS lên Entra ID. Mua P1 license cho toàn bộ nhân viên để có Conditional Access và SSPR với on-prem writeback. Thêm custom domain fintech.vn vào tenant.
Cài Entra Connect trên server on-prem → chọn Password Hash Sync → mapping OU. Bật SSPR Selected cho nhóm IT-Pilot 20 người trước → sau 2 tuần expand All. Cấu hình Conditional Access: yêu cầu MFA nếu đăng nhập từ ngoài VN.
Giảm 70% ticket đặt lại mật khẩu nhờ SSPR. SSO vào M365, Azure Portal, Salesforce bằng 1 tài khoản. Security posture tăng: phát hiện 15 tài khoản rủi ro qua Identity Protection trong tháng đầu.
Tình huống 2: Trường Đại học — B2B Guest cho đối tác nghiên cứu
Trường cần cộng tác với 3 viện nghiên cứu và 10 trường đối tác quốc tế, mỗi bên có tenant Entra ID riêng.
Dùng Entra ID B2B Collaboration mời guest user từ các tenant đối tác. Tạo Access Package trong Entitlement Management (P2) để quản lý vòng đời quyền truy cập: tự động hết hạn sau 12 tháng, yêu cầu approval.
Invite guest từ Entra ID → Users → Invite. Cấu hình External collaboration settings: chỉ cho phép invite từ danh sách domain được phép. Gán Reader role cho SharePoint site và Azure storage chứa dữ liệu nghiên cứu chung.
Nhà nghiên cứu nước ngoài đăng nhập bằng tài khoản trường họ (no new password). Quyền truy cập tự động revoke khi hết hạn dự án. IT department không cần quản lý tài khoản tạm thời thủ công.
Tình huống 3: Startup SaaS — Bảo mật Admin Account bằng PIM
Startup có 5 nhân viên kỹ thuật, tất cả đang dùng Global Administrator — rủi ro cao nếu tài khoản bị compromise.
Nâng cấp lên P2, bật Privileged Identity Management (PIM). Chuyển 4/5 nhân viên từ Global Admin thường sang Eligible Global Admin — chỉ active quyền khi cần (just-in-time), tối đa 1 giờ, cần MFA + justification.
PIM → Azure AD roles → Global Administrator → Settings: max duration 1h, require MFA, require justification, require approval. Giữ 1 break-glass account (Global Admin thường, không đăng nhập thường ngày, MFA hardware key).
Attack surface giảm đáng kể: không còn 5 tài khoản Global Admin active 24/7. Alert ngay khi có activation. Đủ điều kiện cho SOC 2 audit. Chi phí chỉ $9 × 5 user = $45/tháng.