Conditional Access cho SMB: 7 policy nền tảng thay Security defaults

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ầuChi tiết
LicenseMicrosoft 365 Business Premium (Entra ID P1) cho mọi user nằm trong phạm vi policy
QuyềnConditional Access Administrator (tạo policy); Security Administrator (tắt Security defaults); Reports Reader (đọc sign-in log)
Đã làmBà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ệnKiểm soát
CA001Bắt MFA cho mọi userAll usersAll resourcesRequire MFA
CA002Chặn legacy authenticationAll usersClient apps: Exchange ActiveSync, Other clientsBlock
CA003MFA chống phishing cho adminCác role quản trịAll resourcesAuthentication strength: Phishing-resistant MFA
CA004Chặn đăng nhập ngoài Việt NamAll users trừ CA-Cong-tac-nuoc-ngoaiLocations: mọi nơi trừ Viet NamBlock
CA005Đòi thiết bị compliant trên Windows, macOSAll usersDevice platforms: Windows, macOSRequire compliant device
CA006Đòi app protection trên iOS, AndroidAll usersDevice platforms: iOS, AndroidRequire app protection policy
CA007Bảo vệ đăng ký MFAAll usersUser actions: Register security informationRequire 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.

  1. Vào Entra admin center → Protection → Conditional Access → Named locations
  2. + Countries location → tên Viet Nam → chọn Vietnam → Determine location by IP address (IPv4 and IPv6) → Create
  3. + IP ranges location → tên Van phong Ho Chi Minh → nhập 203.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.

  1. Conditional Access → Policies → + New policy → tên CA001 - Require MFA for all users
  2. Users: Include All users; Exclude nhóm CA-Exclude-BreakGlass
  3. Target resources: All resources (formerly ‘All cloud apps’)
  4. Grant: Require multifactor authentication
  5. 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:

  1. 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
  2. Target resources: All resources
  3. Grant → Require authentication strength → Phishing-resistant MFA
  4. Report-only → Create

CA004 – Block outside Vietnam:

  1. Users: All users; Exclude CA-Exclude-BreakGlass, CA-Cong-tac-nuoc-ngoai
  2. Network (Locations): Include Any network or location; Exclude Viet Nam
  3. Grant: Block access
  4. 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.

  1. Entra admin center → Monitoring & health → Sign-in logs
  2. 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
  3. 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:

  1. Bật CA001, CA002, CA004, CA007: mở từng policy → Enable policy: On → Save
  2. Ngay sau đó: Entra admin center → Identity → Overview → Properties → Manage security defaults → Disabled → chọn lý do My organization is using Conditional Access → Save
  3. Bật CA003 khi mọi admin đã có phương thức phishing-resistant
  4. 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

  1. What If: Conditional Access → What If → chọn user thường, app Office 365, country Singapore → kết quả CA004 Block
  2. Đăng nhập bằng user thử nghiệm qua Outlook on the web → được yêu cầu MFA (CA001)
  3. Thử gửi email qua SMTP AUTH bằng client cũ → bị chặn (CA002)
  4. Đăng nhập break-glass → không policy nào áp dụng (kiểm tra tab Conditional Access trong sign-in log)
  5. 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ỗiNguyên nhânCách sửa
Không lưu được policy, báo phải tắt Security defaultsTạo policy ở trạng thái On khi Security defaults còn bậtTạo ở Report-only trước (không bị chặn), làm theo bước 6
Admin bị khóa sau khi bật CA003Chư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 CA004IP nhà mạng hoặc VPN bị geo-IP nhận saiXem 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 CA006Chưa có App protection policyGiữ CA006 report-only cho tới bài 12
Máy scan không gửi được emailCA002 chặn SMTP AUTHChuyển sang SMTP relay qua connector bằng IP tĩnh

Tổng kết

PolicyTrạng thái sau bài này
CA001 MFA cho mọi userOn
CA002 Chặn legacy authOn
CA003 Phishing-resistant MFA cho adminOn khi admin đã có passkey
CA004 Chặn ngoài Việt NamOn, có nhóm công tác nước ngoài
CA005 Thiết bị compliantReport-only
CA006 App protectionReport-only
CA007 Bảo vệ đăng ký MFAOn
Security defaultsDisabled

Tài liệu tham khảo

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