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 على حدة حسب حساسيتها.
- حوّل كل الـ Permanent Active assignments على الـ Tier 0 roles لـ Eligible.
- ظبط activation duration وapproval وMFA لكل role حسب مستوى الحساسية بتاعها.
- اربط الـ activations بمراقبة KQL أو Defender XDR عشان تلاحظ الشاذ فورًا.
- اعمل Access Review دوري ومتسيبش الإعدادات على الـ default أبدًا.
إنت جربت PIM في بيئة عندك فيها ناس كتير مش متعودة على الـ Just-In-Time؟ شاركنا تجربتك وإزاي تعاملت مع مقاومة الفريق في التعليقات.

Comments
Post a Comment