Setting Up Just-in-Time Access with Microsoft Entra PIM the Right Way (PIM في Entra ID: إزاي تظبط الـ Just-In-Time Access صح من أول مرة)

PIM في Entra ID: إزاي تظبط الـ Just-In-Time Access صح من أول مرة

مقال عملي عن إزاي تشيل الـ Standing Access من الـ Admin roles وتحوّلها لـ Just-In-Time، من غير ما تعطّل شغل الفريق.




المقدمة

كنت شغال على tenant فيه أكتر من 12 حد معاهم Global Administrator بشكل permanent، وده كان أول حاجة طلعت في أي Security Assessment. المشكلة مش إن الناس دي "شريرة"، المشكلة إن أي حساب من الـ 12 لو اتعمله compromise، الـ blast radius بقى tenant كامل من غير أي approval أو تسجيل. PIM بيحل المشكلة دي مش بمنع الصلاحية، لكن بجعلها مؤقتة ومربوطة بـ activation فيها MFA و approval وتسجيل audit كامل. في المقال ده هوريك إزاي تظبط PIM صح، مش بس تفعّله وتسيبه على الـ default settings.

💡 المتطلبات:
  • Microsoft Entra ID P2 license (أو Microsoft Entra Suite) لكل مستخدم هيتحط عليه PIM
  • Global Administrator أو Privileged Role Administrator عشان تظبط الإعدادات
  • Microsoft Graph PowerShell SDK (module: Microsoft.Graph.Identity.Governance)
  • Log Analytics workspace متوصل بـ Entra ID Audit Logs (لو هتعمل مراقبة بـ KQL)

ليه Permanent Assignment مش الحل، حتى لو الناس موثوق فيها

الفكرة الأساسية في PIM إنها بتفرّق بين Eligible و Active assignment. الأول معناه "الشخص مؤهل ياخد الـ role دي، بس لسه مفعّلاش"، والتاني معناه "الـ role شغالة دلوقتي فعليًا". لما تسيب role زي Global Administrator أو Exchange Administrator permanent Active، بقى عندك attack surface دايم موجودة، حتى لو محدش بيستخدمها. الأسوأ من كده إنك من غير PIM مش هتلاقي سجل واضح إمتى الشخص استخدم الصلاحية دي فعليًا وليه.

النوع Eligible Assignment Active Assignment
الصلاحية شغالة؟ لأ، لازم activation آه، شغالة على طول
محتاج MFA/Approval؟ آه، حسب الـ Role Settings لأ (إلا لو عملت time-bound active مع شروط)
مناسب لمين أي حد بيحتاج الـ role أحيانًا Service accounts أو ضرورة تشغيلية مستمرة فقط

الخطوة 1: تفعيل PIM وعمل أول Eligible Assignment

1. الدخول على PIM وتفعيله لأول مرة

من Entra admin center، روح على Identity Governance > Privileged Identity Management. أول مرة بتفتحه، النظام بيعمل consent وبيبدأ يتتبع الـ Directory Roles تلقائيًا. مفيش خطوة "تفعيل" منفصلة زي ما كان زمان، دلوقتي PIM بيبقى شغال بمجرد ما يكون عندك الـ license.

2. تحويل الـ Assignments الموجودة من Permanent لـ Eligible

لو عندك ناس Active على roles زي Global Administrator، لازم تحولهم Eligible. من الـ portal ده سهل، بس لو عندك عدد كبير أنا بفضل PowerShell:

Connect-MgGraph -Scopes "RoleManagement.ReadWrite.Directory"

$roleId = (Get-MgDirectoryRole -Filter "displayName eq 'Global Administrator'").Id
$userId = (Get-MgUser -Filter "userPrincipalName eq 'samir@samironcloud.com'").Id

$params = @{
    Action = "adminAssign"
    Justification = "تحويل من Permanent إلى Eligible ضمن مراجعة أمنية"
    RoleDefinitionId = $roleId
    DirectoryScopeId = "/"
    PrincipalId = $userId
    ScheduleInfo = @{
        StartDateTime = (Get-Date)
        Expiration = @{
            Type = "NoExpiration"
        }
    }
}

New-MgRoleManagementDirectoryRoleEligibilityScheduleRequest -BodyParameter $params

⚠️ لو الشخص عنده Active assignment قديم من قبل PIM، لازم تشيله الأول من الـ Active schedule قبل ما تضيفه Eligible، وإلا هيبقى عنده الاتنين مع بعض وده بيلغي الغرض كله من الـ Just-In-Time.

الخطوة 2: ظبط الـ Role Settings صح

الجزء ده هو أهم حاجة في الموضوع كله، وأكتر جزء الناس بتسيبه على الـ default. من PIM روح Roles > اختار الـ Role > Settings، وظبط النقط دي:

1. Activation Maximum Duration

الـ default بيكون 8 ساعات، وده كتير لمعظم الحالات. لو الشغل اللي بتعمله بـ Global Administrator بياخد نص ساعة، خليها ساعة أو ساعتين بس مش 8.

2. Require Approval to Activate

للـ Tier 0 roles زي Global Administrator أو Privileged Role Administrator، اعمل approval إجباري وحدد approver مختلف عن الشخص نفسه. ده بيمنع سيناريو "حساب واحد اتعمله compromise وفعّل نفسه بنفسه".

3. Require Multifactor Authentication و Justification

لازم تكون مفعّلة على طول، حتى لو الحساب أصلاً محمي بـ Conditional Access. الـ justification مش شكليات، ده اللي بيبان في الـ audit log وبيفرق وقت الـ investigation.

# تحديث Role Setting عبر Graph (activation duration + require justification)
$policyId = (Get-MgPolicyRoleManagementPolicyAssignment -Filter "roleDefinitionId eq '' and scopeId eq '/' and scopeType eq 'DirectoryRole'").PolicyId

$rules = @(
    @{
        "@odata.type" = "#microsoft.graph.unifiedRoleManagementPolicyExpirationRule"
        id = "Expiration_EndUser_Assignment"
        isExpirationRequired = $true
        maximumDuration = "PT2H"
    }
)

Update-MgPolicyRoleManagementPolicyRule -UnifiedRoleManagementPolicyId $policyId -UnifiedRoleManagementPolicyRuleId "Expiration_EndUser_Assignment" -BodyParameter $rules[0]

الخطوة 3: مراقبة الـ Activations بـ KQL

لو عندك Entra ID Audit Logs متوصلة بـ Log Analytics أو بتشتغل جوه Defender XDR advanced hunting، الكويري ده بيوريك كل عمليات الـ PIM activation في آخر 24 ساعة:

AuditLogs
| where TimeGenerated > ago(24h)
| where Category == "RoleManagement"
| where OperationName has_any ("Add member to role", "Activate")
| extend Initiator = tostring(InitiatedBy.user.userPrincipalName)
| extend TargetRole = tostring(TargetResources[0].displayName)
| project TimeGenerated, Initiator, TargetRole, OperationName, Result
| order by TimeGenerated desc

✅ لو الكويري رجّع نتايج فيها activation في وقت غريب (زي 3 الفجر) لحساب مش المفروض يستخدم الـ role دي أصلاً، ده indicator تحقيق فوري مش مجرد noise.

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

المشكلة الحل
المستخدم بيفعّل الـ role كل شوية ومش بينساها راجع الـ activation duration، غالبًا الـ workflow بتاعه محتاج وقت أطول شوية بدل ما يعمل reactivate كل ساعة
Approval requests مش بتوصل للـ approver اتأكد إن الـ approver نفسه عنده license P2 ومفعّل الـ notifications في PIM settings
Service account محتاج الصلاحية دايمًا وPIM بيعطّله متحطش service accounts في Eligible، استخدم Active assignment مع time-bound expiration ومراقبة منفصلة، أو حوّله لـ Managed Identity لو ممكن
الـ PIM alerts مش ظاهرة رغم وجود activations كتير راجع Alert settings تحت PIM > Alerts، بعض الـ alerts زي "Roles are being activated too frequently" محتاجة threshold مضبوط يدويًا

نصائح الأمان 🔐

  • مايبقاش عندك حتى واحد Global Administrator permanent، حتى الـ break-glass accounts خليهم monitored بشكل منفصل مش جوه PIM العادي.
  • اربط الـ PIM activation بـ Conditional Access policy تطلب compliant device، مش بس MFA.
  • اعمل Access Review دوري كل 3 شهور للـ Eligible assignments، الناس بتتغير أدوارها وبتفضل معاها صلاحيات مش محتاجاها.
  • فعّل الـ notification emails للـ role activation وplug عليها في Defender XDR أو Sentinel عشان تبقى جزء من الـ SOC monitoring مش بس Entra logs منفصلة.
  • متعملش approval بحساب واحد بس، لو الـ approver ده مش موجود (إجازة مثلاً) هتوقف شغل الفريق كله.

الخلاصة

PIM مش feature بتفعّلها وتخلص، هي عملية مستمرة محتاجة مراجعة وضبط باستمرار. النقطة الأهم إنك متكتفيش بتفعيل PIM على الـ default settings وتفتكر إنك خلصت، لازم تراجع كل role على حدة حسب حساسيتها.

  1. حوّل كل الـ Permanent Active assignments على الـ Tier 0 roles لـ Eligible.
  2. ظبط activation duration وapproval وMFA لكل role حسب مستوى الحساسية بتاعها.
  3. اربط الـ activations بمراقبة KQL أو Defender XDR عشان تلاحظ الشاذ فورًا.
  4. اعمل Access Review دوري ومتسيبش الإعدادات على الـ default أبدًا.

إنت جربت PIM في بيئة عندك فيها ناس كتير مش متعودة على الـ Just-In-Time؟ شاركنا تجربتك وإزاي تعاملت مع مقاومة الفريق في التعليقات.

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

App Registrations vs Enterprise Applications in Entra ID: Permissions and Consent Explained | App Registration و Enterprise Application: مين بيعمل إيه في الـ Permissions والـ Consent؟