Authentication Methods Policy Migration: Retiring Legacy MFA and SSPR Policies | وداعًا لسياسات الـ MFA و SSPR القديمة: دليل Migration لـ Authentication Methods Policy في Entra ID

وداعًا لسياسات الـ MFA و SSPR القديمة: دليل Migration لـ Authentication Methods Policy في Entra ID

حكاية عملية لتينانت لسه شغال بالـ Legacy MFA Service Settings و SSPR Policy القديمة، وإزاي تنقله بأمان لـ Authentication Methods Policy الموحدة من غير ما توقف أي user عن تسجيل الدخول.


المقدمة



لو فتحت تينانت قديم شويه في Entra ID، هتلاقي حاجة غريبة: فيه صفحة "Multi-factor authentication" جوه Active Directory admin center لوحدها، وفيه صفحة "Password reset" لوحدها بتتحكم في SSPR، وفيه Authentication methods policy تالتة جوه Protection بتتحكم في نفس الطرق دي. ده مش تكرار غلط، ده بقايا نظام قديم كانت Microsoft بتديره من قبل ما توحّد كل حاجة في مكان واحد. المشكلة إن الوضع ده بيسبب تعارض فعلي: ممكن تفعّل Microsoft Authenticator من Authentication methods policy وتلاقيه شغال، لكن الـ per-user MFA القديم لسه مفعّل على مستخدمين معينين ومعطلهم من الـ Conditional Access الطبيعي. أنا اتعاملت مع الموضوع ده في تينانت فيه أكتر من ٢٠٠٠ يوزر، وده اللي عملته خطوة بخطوة.

💡 المتطلبات:
  • صلاحية Authentication Policy Administrator أو Global Administrator على الـ tenant
  • Microsoft Graph PowerShell SDK (module: Microsoft.Graph.Identity.SignIns)
  • Scope مطلوب: Policy.ReadWrite.AuthenticationMethod
  • Access لـ Defender XDR Advanced Hunting أو Log Analytics لو عايز تعمل audit قبل التبديل
  • وقت كافي لمرحلة "Migration in progress" (مش قرار يتاخد في نفس اليوم)

ليه أصلاً محتاج تعمل Migration دلوقتي

الـ Legacy MFA (اللي بتتحكم فيه من Service Settings في الـ old MFA portal) والـ Legacy SSPR policy كانوا بيشتغلوا بمنطق منفصل تمامًا عن Conditional Access. النتيجة إن المستخدم ممكن يكون معفى من MFA بسياسة Conditional Access لكن لسه مطلوب منه verification بسبب إعداد قديم في per-user MFA. Microsoft بتوجه كل التينانتات تدريجيًا لتوحيد الإدارة في Authentication methods policy عشان:

  • تدير كل الطرق (Authenticator, FIDO2, SMS, Voice, Email OTP) من مكان واحد
  • تتحكم في الـ registration campaign وتفرض Authenticator بدل SMS
  • تربط الـ SSPR reset methods بنفس تعريف الـ authentication methods بدل إعداد منفصل

⚠️ لو التينانت بتاعك لسه في وضع "Pre-migration"، ده معناه إن أي تعديل تعمله في Authentication methods policy مش بالضرورة هيبقى هو المصدر الفعلي للـ enforcement، لأن الـ Legacy policy ممكن تكون هي اللي شغالة فعليًا خلف الكواليس.

الخطوة الأولى: تقييم الوضع الحالي قبل أي تعديل

1. اتأكد من الـ migration state الحالي

Connect-MgGraph -Scopes "Policy.Read.All"

$policy = Get-MgPolicyAuthenticationMethodPolicy
$policy | Select-Object Id, PolicyMigrationState

القيم الممكنة هنا: preMigration، migrationInProgress، migrationComplete. لو لقيت preMigration يبقى لسه ما عملتش أي خطوة فعلية للتحويل حتى لو فاتح Authenticator من Authentication methods policy.

2. دور على المستخدمين اللي لسه معتمدين على Legacy per-user MFA

الطريقة الأسهل هنا Advanced Hunting في Defender XDR على الـ sign-in logs بدل ما تدور يدوي:

AADSignInEventsBeta
| where Timestamp > ago(30d)
| mv-expand AuthenticationDetails
| where tostring(AuthenticationDetails.authenticationMethod) in ("SMS", "Voice call", "OTP")
| where tostring(AuthenticationDetails.authenticationStepResultDetail) contains "MFA requirement satisfied by legacy"
| summarize LegacyMfaHits = count() by AccountUpn
| order by LegacyMfaHits desc

✅ لو النتيجة رجعت فاضية أو قليلة جدًا، يبقى المستخدمين غالبًا بالفعل بيمروا من Conditional Access وممكن تكمل بأمان أكبر.

خطوات الـ Migration الفعلية

1. تفعيل الطرق المطلوبة داخل Authentication methods policy الأول

Connect-MgGraph -Scopes "Policy.ReadWrite.AuthenticationMethod"

$params = @{
    "@odata.type" = "#microsoft.graph.microsoftAuthenticatorAuthenticationMethodConfiguration"
    state = "enabled"
    includeTargets = @(
        @{
            targetType = "group"
            id = "all_users"
        }
    )
}

Update-MgPolicyAuthenticationMethodAuthenticationMethodConfiguration `
    -AuthenticationMethodConfigurationId "MicrosoftAuthenticator" `
    -BodyParameter $params

مهم إنك تتأكد إن كل طريقة كانت شغالة في الـ Legacy MFA (زي SMS أو Voice) بقت مفعّلة هنا كمان قبل ما تكمل، عشان محدش يفقد وسيلة الدخول بتاعته فجأة.

2. تحويل الحالة لـ "Migration in progress"

$body = @{
    policyMigrationState = "migrationInProgress"
}

Update-MgPolicyAuthenticationMethodPolicy -BodyParameter $body

في المرحلة دي، الاتنين (Legacy و Authentication methods policy) بيشتغلوا مع بعض، والنظام بيدي الأولوية للإعداد الأكثر تقييدًا. ده الوقت المثالي إنك تسيب المرحلة دي كام يوم أو أسبوع وتراقب سلوك الدخول قبل ما تقفل الباب خالص.

3. مراقبة الـ sign-ins أثناء الـ transition

AADSignInEventsBeta
| where Timestamp > ago(7d)
| where ErrorCode != 0
| where ResultType has "InteractionRequired" or ResultType has "50076" or ResultType has "50079"
| summarize FailedMfaCount = count() by AccountUpn, ResultType
| order by FailedMfaCount desc

لو شفت spike غير طبيعي في failures بعد التفعيل، ارجع خطوة وراجع الـ target groups بتاعتك قبل ما تكمل للمرحلة الأخيرة.

4. إنهاء الـ Migration

$body = @{
    policyMigrationState = "migrationComplete"
}

Update-MgPolicyAuthenticationMethodPolicy -BodyParameter $body

⚠️ بعد ما تعمل migrationComplete، الـ Legacy MFA Service Settings وصفحة Password reset القديمة بيتوقف تأثيرهم الفعلي تمامًا، وأي إعداد فيهم بقى للعرض بس. مفيش رجوع سهل من غير ما تعيد الإعداد يدويًا في Authentication methods policy، فخد وقتك في المرحلة اللي قبل دي.

مقارنة سريعة بين النظامين

النقطة Legacy MFA / SSPR Policy Authentication Methods Policy
مكان الإدارة صفحتين منفصلتين (MFA Service Settings + SSPR) مكان واحد جوه Protection > Authentication methods
Targeting per-user فقط Groups (all users أو groups محددة)
تكامل مع Conditional Access محدود ومربك أحيانًا متكامل بشكل كامل
دعم مستقبلي من Microsoft في طريقه للتقاعد هو المسار الرسمي المستمر

مشاكل شائعة وحلولها

المشكلة الحل
مستخدم اتقفل بره حسابه بعد التفعيل لأن الطريقة القديمة اتشالت راجع الـ includeTargets لكل authentication method قبل ما تقفل، وسيب SMS مفعّل مؤقتًا لحد ما الكل يسجل Authenticator
تعديل عملته في Authentication methods policy مش بيظهر تأثيره اتأكد إن الـ PolicyMigrationState مش لسه preMigration، لأن الـ Legacy policy بتفضل هي المصدر
SSPR بقى مش شغال بعد الـ migration complete SSPR دلوقتي بيتحكم فيه من نفس الـ Authentication methods policy عن طريق registrationEnforcement، لازم تعيد ضبطه هناك مش في الصفحة القديمة
Service accounts أو break-glass accounts اتأثروا بالتغيير استثنيهم في target groups بتاعة كل method، ومتنساش تختبر break-glass account بعد كل مرحلة

Comments

Popular posts from this blog

Entra ID Free vs P1 vs P2: What You Actually Get at Each License Tier | Entra ID Free ولا P1 ولا P2: الفرق الحقيقي بين الباقات

Conditional Access Design Mistakes That Lock Admins Out of Microsoft Entra ID | لما الـ Conditional Access يقفل عليك الباب وأنت جوه Tenant

Entra ID Built-in Roles vs Custom Roles for Least Privilege | أدوار مدمجة ولا Custom Roles؟ إزاي تطبق مبدأ الصلاحية الأقل في Entra ID