Một kế toán ở công ty 30 người nhận email “Microsoft 365: mật khẩu của bạn sắp hết hạn“, bấm vào và nhập mật khẩu lẫn mã MFA vào trang giả. Kẻ tấn công dùng bộ công cụ adversary-in-the-middle, lấy được session cookie và đăng nhập từ một máy chủ ở nước ngoài lúc 2 giờ sáng. Security defaults không ngăn được: user đã “qua MFA”, và Security defaults không có khái niệm vị trí hay thiết bị.
Security defaults là điểm khởi đầu tốt cho tenant miễn phí. Nhưng Business Premium đã có Entra ID P1, nghĩa là bạn có Conditional Access: chặn theo quốc gia, đòi thiết bị compliant, đòi MFA chống phishing cho admin, loại trừ đúng tài khoản break-glass. Vấn đề là cấu hình sai một policy có thể khóa cả công ty ngoài email.
Bài này mình sẽ hướng dẫn bạn tạo 7 Conditional Access policy nền tảng cho SMB, chạy report-only 7 ngày, đọc kết quả trong sign-in log, rồi chuyển từ Security defaults sang Conditional Access mà không có khoảng trống bảo vệ nào.
Điều kiện cần
| Yêu cầu | Chi tiết |
|---|---|
| License | Microsoft 365 Business Premium (Entra ID P1) cho mọi user nằm trong phạm vi policy |
| Quyền | Conditional Access Administrator (tạo policy); Security Administrator (tắt Security defaults); Reports Reader (đọc sign-in log) |
| Đã làm | Bài 1 – Microsoft 365 Business Premium & Tính năng bảo mật |
| Chuẩn bị | Nhóm CA-Exclude-BreakGlass, nhóm CA-Cong-tac-nuoc-ngoai, danh sách IP tĩnh văn phòng (nếu có) |
Kiến trúc tổng quan
| Mã | Policy | Đối tượng | Điều kiện | Kiểm soát |
|---|---|---|---|---|
| CA001 | Bắt MFA cho mọi user | All users | All resources | Require MFA |
| CA002 | Chặn legacy authentication | All users | Client apps: Exchange ActiveSync, Other clients | Block |
| CA003 | MFA chống phishing cho admin | Các role quản trị | All resources | Authentication strength: Phishing-resistant MFA |
| CA004 | Chặn đăng nhập ngoài Việt Nam | All users trừ CA-Cong-tac-nuoc-ngoai | Locations: mọi nơi trừ Viet Nam | Block |
| CA005 | Đòi thiết bị compliant trên Windows, macOS | All users | Device platforms: Windows, macOS | Require compliant device |
| CA006 | Đòi app protection trên iOS, Android | All users | Device platforms: iOS, Android | Require app protection policy |
| CA007 | Bảo vệ đăng ký MFA | All users | User actions: Register security information | Require MFA hoặc từ IP văn phòng |
Mọi policy đều loại trừ nhóm CA-Exclude-BreakGlass.

Bước 1: Tạo named location Việt Nam và văn phòng
Mục đích là có các vị trí để dùng trong CA004 và CA007.
- Vào Entra admin center → Protection → Conditional Access → Named locations
- + Countries location → tên
Viet Nam→ chọn Vietnam → Determine location by IP address (IPv4 and IPv6) → Create - + IP ranges location → tên
Van phongHo Chi Minh → nhập203.0.113.10/32(thay bằng IP tĩnh thật) → đánh dấu Mark as trusted location → Create

Lưu ý: Geo-IP không tuyệt đối. Nhân viên dùng VPN cá nhân, hoặc mạng di động roaming, có thể hiện IP nước ngoài. CA004 cần chạy report-only đủ 7 ngày để bắt các trường hợp này.
Bước 2: tạo CA001 và CA002 ở chế độ report-only
Mục đích là có 2 policy nền tảng thay thế Security defaults, chạy thử trước khi bật.
- Conditional Access → Policies → + New policy → tên
CA001 - Require MFA for all users - Users: Include All users; Exclude nhóm
CA-Exclude-BreakGlass - Target resources: All resources (formerly ‘All cloud apps’)
- Grant: Require multifactor authentication
- Enable policy: On → Create

Lưu ý: Entra cho phép tạo policy ở Report-only trong khi Security defaults vẫn bật, nhưng không cho bật policy sang On. Đây là điểm giúp bạn chạy thử 7 ngày mà vẫn giữ lớp bảo vệ cũ.
Bước 3: Tạo CA003 và CA004
Mục đích là nâng mức bảo vệ cho admin và chặn đăng nhập từ nước ngoài.
CA003 – Phishing-resistant MFA for admins:
- Users → Select users and groups → Directory roles: Global Administrator, Security Administrator, Exchange Administrator, SharePoint Administrator, User Administrator, Conditional Access Administrator, Intune Administrator, Privileged Role Administrator
- Target resources: All resources
- Grant → Require authentication strength → Phishing-resistant MFA
- Report-only → Create

CA004 – Block outside Vietnam:
- Users: All users; Exclude
CA-Exclude-BreakGlass,CA-Cong-tac-nuoc-ngoai - Network (Locations): Include Any network or location; Exclude Viet Nam
- Grant: Block access
- Report-only → Create

Lưu ý: Trước khi bật CA003, mọi admin phải đã đăng ký phương thức phishing-resistant: passkey trong Microsoft Authenticator, FIDO2 security key hoặc Windows Hello for Business. Nếu không, admin sẽ bị chặn ngay lần đăng nhập kế tiếp. Bài 14 trong series hướng dẫn chi tiết passkey.
Bước 4: Tạo CA005, CA006, CA007
Mục đích là gắn quyền truy cập với thiết bị được quản lý, và chặn kẻ tấn công tự đăng ký MFA của họ khi đã có mật khẩu.
CA005 – Require compliant device (Windows, macOS): Users All (exclude break-glass) → Resources All → Conditions → Device platforms: Windows, macOS → Grant: Require device to be marked as compliant → Report-only.
CA006 – Require app protection (iOS, Android): Users All → Resources: Office 365 → Device platforms: iOS, Android → Grant: Require app protection policy → Report-only.
CA007 – Secure security info registration: Users All (exclude break-glass, khách) → Target resources → User actions → Register security information → Network: Include Any; Exclude Van phong Ha Noi → Grant: Require multifactor authentication → Report-only.
Lưu ý: CA005 phụ thuộc bài 4 (Intune compliance) và CA006 phụ thuộc bài 12 (App protection policy). Giữ hai policy này ở report-only cho tới khi xong các bài đó, kể cả khi 5 policy còn lại đã bật.
Bước 5: Đọc kết quả report-only trong 7 ngày
Mục đích là biết trước ai sẽ bị chặn, vì lý do gì, trước khi bật thật.
- Entra admin center → Monitoring & health → Sign-in logs
- Mở một sign-in → tab Report-only → xem kết quả từng policy: Report-only: Success, Report-only: Failure, Report-only: User action required
- Lọc nhanh: Add filters → Conditional access → Report-only: Failure

Connect-MgGraph -Scopes "AuditLog.Read.All"
$since = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")
$signIns = Get-MgAuditLogSignIn -Filter "createdDateTime ge $since" -All
# Ai sẽ bị chặn bởi từng policy nếu bật
$signIns | ForEach-Object {
$s = $_
$s.AppliedConditionalAccessPolicies |
Where-Object { $_.Result -eq "reportOnlyFailure" } |
ForEach-Object {
[PSCustomObject]@{
Policy = $_.DisplayName
User = $s.UserPrincipalName
App = $s.AppDisplayName
Country = $s.Location.CountryOrRegion
Client = $s.ClientAppUsed
}
}
} | Group-Object Policy, User | Sort-Object Count -Descending |
Select-Object Count, Name -First 30
Từ thực tế: CA002 (legacy auth) thường bắt được máy scan đa năng gửi email qua SMTP AUTH và phần mềm kế toán gửi hóa đơn điện tử qua email. CA004 hay bắt được nhân viên kinh doanh đi công tác và app trên điện thoại dùng VPN miễn phí. Gọi điện cho từng người trong danh sách trước khi bật, đừng chỉ gửi email thông báo chung.
Bước 6: Chuyển từ Security defaults sang Conditional Access
Mục đích là đổi cơ chế bảo vệ mà không có thời điểm nào tenant “trần trụi”.
Làm trong một phiên, ngoài giờ làm việc:
- Bật CA001, CA002, CA004, CA007: mở từng policy → Enable policy: On → Save
- Ngay sau đó: Entra admin center → Identity → Overview → Properties → Manage security defaults → Disabled → chọn lý do My organization is using Conditional Access → Save
- Bật CA003 khi mọi admin đã có phương thức phishing-resistant
- Giữ CA005, CA006 ở report-only
# Kiểm tra nhanh trạng thái các policy
Get-MgIdentityConditionalAccessPolicy | Sort-Object DisplayName |
Format-Table DisplayName, State -AutoSize
Bước 7: Kiểm tra và verify
- What If: Conditional Access → What If → chọn user thường, app Office 365, country Singapore → kết quả CA004 Block
- Đăng nhập bằng user thử nghiệm qua Outlook on the web → được yêu cầu MFA (CA001)
- Thử gửi email qua SMTP AUTH bằng client cũ → bị chặn (CA002)
- Đăng nhập break-glass → không policy nào áp dụng (kiểm tra tab Conditional Access trong sign-in log)
- Tạo alert khi break-glass đăng nhập: dùng flow ở bài 7 hoặc tối thiểu kiểm tra sign-in log của 2 tài khoản này mỗi tuần

Lỗi thường gặp
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
| Không lưu được policy, báo phải tắt Security defaults | Tạo policy ở trạng thái On khi Security defaults còn bật | Tạo ở Report-only trước (không bị chặn), làm theo bước 6 |
| Admin bị khóa sau khi bật CA003 | Chưa đăng ký passkey / FIDO2 | Đăng nhập break-glass, tạm loại trừ admin đó, đăng ký phương thức rồi gỡ loại trừ |
| Nhân viên ở Việt Nam bị chặn bởi CA004 | IP nhà mạng hoặc VPN bị geo-IP nhận sai | Xem IP trong sign-in log, thêm IP range vào named location tin cậy |
| Teams trên điện thoại bị chặn sau CA006 | Chưa có App protection policy | Giữ CA006 report-only cho tới bài 12 |
| Máy scan không gửi được email | CA002 chặn SMTP AUTH | Chuyển sang SMTP relay qua connector bằng IP tĩnh |
Tổng kết
| Policy | Trạng thái sau bài này |
|---|---|
| CA001 MFA cho mọi user | On |
| CA002 Chặn legacy auth | On |
| CA003 Phishing-resistant MFA cho admin | On khi admin đã có passkey |
| CA004 Chặn ngoài Việt Nam | On, có nhóm công tác nước ngoài |
| CA005 Thiết bị compliant | Report-only |
| CA006 App protection | Report-only |
| CA007 Bảo vệ đăng ký MFA | On |
| Security defaults | Disabled |
Tài liệu tham khảo
- Plan a Conditional Access deployment
- Conditional Access report-only mode
- Conditional Access authentication strength
- Using the location condition in a Conditional Access policy
- Block legacy authentication with Conditional Access
- Troubleshoot Conditional Access using the What If tool
Chạy report-only 7 ngày, policy nào trong bộ 7 bắt được nhiều sign-in bất ngờ nhất ở công ty bạn? Kể trong comment nhé.
