Automating Access Reviews for Privileged Roles and Groups in Entra ID | Access Reviews: خلي الـ Recertification للـ Privileged Roles يمشي لوحده

Access Reviews: خلي الـ Recertification للـ Privileged Roles يمشي لوحده

إزاي تشيل عن دماغك موضوع "مين لسه محتاج يكون Global Admin" وتخلي النظام يسأل بدالك كل فترة




المقدمة

لو انت مسؤول عن Entra ID Tenant فيه أكتر من 50 يوزر، أكيد جالك اليوم اللي بتفتح فيه Privileged Identity Management أو Azure AD Roles وتلاقي ناس معينة Role زي Global Administrator أو Exchange Administrator من سنة ونص ومحدش فاكر ليه أصلاً. المشكلة مش إنك مش عارف مين معاه إيه، المشكلة إن محدش بيراجع الموضوع ده بشكل دوري لأنه ببساطة عمل يدوي ممل ومحدش هيعمله كل شهر بإرادته. أنا شخصياً كنت بعمل الموضوع ده بـ Excel Sheet وإيميلات لمدراء الأقسام، وكانت النتيجة إن الـ Review بياخد شهر كامل عشان يتقفل. لما حولت الموضوع كله على Access Reviews مع Logic Apps بسيطة للـ Notifications، الوقت نزل لأسبوع والالتزام زاد لأن الناس بتاخد Email فيه Deadline واضح.

💡 المتطلبات:
  • Microsoft Entra ID Governance License (متضمنة في Entra ID P2 أو Entra Suite)
  • صلاحية Identity Governance Administrator أو Global Administrator
  • الـ Roles أو الـ Groups اللي هتعمل لها Review لازم تكون Cloud managed أو PIM for Groups مفعّل عليها
  • لو هتستخدم Automation, محتاج Graph API permissions زي AccessReview.ReadWrite.Membership

ليه تعمل Access Review للـ Privileged Roles أصلاً

فكرة الـ Privilege Creep إن اليوزر ياخد صلاحية عشان مشروع معين، وبعد ما المشروع يخلص، الصلاحية تفضل موجودة لأن محدش شالها. الموضوع ده بيبقى خطير جداً لما بنتكلم عن Roles زي Privileged Role Administrator أو Groups بتفتح Owner على Key Vault. الـ Access Reviews جاية تحل المشكلة دي بشكل ممنهج: تحدد Recurrence (شهري، ربع سنوي)، تحدد مين هو الـ Reviewer (المدير المباشر، اليوزر نفسه Self-review، أو شخص محدد)، والنظام يبعت Reminder ويعمل Auto-apply للقرار في الآخر.

النوع يستخدم مع مثال
Access Review على Group Membership Microsoft 365 Groups, Security Groups مراجعة أعضاء Group بيدي Access على SharePoint Site حساس
Access Review على Directory Roles Global Administrator, Exchange Administrator, إلخ مراجعة مين لسه Global Admin بشكل Permanent
Access Review على PIM Role Assignments Eligible Assignments في PIM تأكيد إن اليوزر لسه محتاج يكون Eligible للـ Role دي

⚠️ لو الـ Role Assignment جاي من Group اتضاف على PIM (PIM for Groups)، الـ Review بيحصل على الـ Group Membership مش على الـ Role نفسه، فلازم تفهم مصدر الـ Assignment قبل ما تعمل Review.

إنشاء Access Review للـ Privileged Roles من الـ Portal

الخطوة الأولى: تحديد الـ Scope

روح على Identity Governance من الـ Entra Admin Center، اختار Access Reviews، بعدين New access review. هتلاقي خيارين مهمين: Microsoft Entra roles (built-in roles) أو Groups. للـ Privileged Roles اختار الأول وحدد الـ Roles اللي عايز تراجعها زي Global Administrator, Privileged Role Administrator, و Security Administrator.

الخطوة التانية: تحديد الـ Reviewers والـ Recurrence

الأفضل إنك تختار Manager كـ Reviewer لو متاح، أو Selected users لو عايز شخص محدد زي الـ Security Lead. للـ Recurrence، أنا بفضل Quarterly للـ Privileged Roles العادية وMonthly للـ Roles الحساسة جداً زي Global Administrator.

الخطوة التالتة: إعدادات Auto-apply

ده أهم جزء بجد. لو مفعلتش Auto-apply, هتفضل محتاج تدخل يدوي في الآخر عشان تطبق نتيجة الـ Review. فعّل "Auto apply results to resource" واختار "Remove access" كـ Action لو الـ Reviewer محاوبش أو رفض. كمان فعّل "Require reason on approval" عشان يبقى فيه Audit Trail حقيقي مش مجرد ضغطة زرار.

# مثال لإنشاء Access Review على Directory Role باستخدام Microsoft Graph PowerShell

Connect-MgGraph -Scopes "AccessReview.ReadWrite.Membership"

$reviewParams = @{
    displayName = "Quarterly Review - Global Administrator"
    descriptionForAdmins = "Recertification for Global Admin role"
    scope = @{
        "@odata.type" = "#microsoft.graph.accessReviewQueryScope"
        query = "/roleManagement/directory/roleAssignments?`$filter=roleDefinitionId eq 'Global Administrator Role ID'"
        queryType = "MicrosoftGraph"
    }
    reviewers = @(
        @{
            query = "/users/{managerObjectId}"
            queryType = "MicrosoftGraph"
        }
    )
    settings = @{
        mailNotificationsEnabled = $true
        reminderNotificationsEnabled = $true
        justificationRequiredOnApproval = $true
        autoApplyDecisionsEnabled = $true
        recurrence = @{
            pattern = @{ type = "absoluteMonthly"; interval = 3 }
            range = @{ type = "noEnd" }
        }
    }
}

New-MgIdentityGovernanceAccessReviewScheduleDefinition -BodyParameter $reviewParams

✅ لو الأمر نفذ صح، هتلاقي الـ Review ظاهر في Identity Governance > Access Reviews مع حالة "Not started" لغاية ما يجي وقت التنفيذ حسب الـ Recurrence.

أتمتة المتابعة باستخدام Graph API و KQL

الجزء اللي بيفرق فعلاً هو مش إنشاء الـ Review، لكن متابعته. أنا بستخدم Logic App بسيط بيتشك كل يوم على الـ Reviews اللي قربت تخلص وبيبعت تذكير للـ Reviewers اللي متأخرين، وكمان بستخدم KQL جوه Log Analytics عشان أعمل Dashboard لمتابعة الـ Completion Rate.

// KQL: نسبة الـ Access Reviews اللي اتقفلت في الميعاد
AuditLogs
| where OperationName == "Complete access review"
| extend ReviewId = tostring(TargetResources[0].id)
| project TimeGenerated, ReviewId, Result
| summarize CompletedReviews = count() by bin(TimeGenerated, 30d)
| order by TimeGenerated desc
# استخراج الـ Access Reviews اللي متأخرة عن موعدها عبر Graph API
GET https://graph.microsoft.com/v1.0/identityGovernance/accessReviews/definitions/{id}/instances?$filter=status eq 'InProgress'

ممكن كمان تعمل Automation بسيطة بـ PowerShell تجيب كل الـ Instances اللي لسه Pending وتبعتلهم Reminder إضافي غير اللي الـ Portal بيبعته تلقائي، وده مفيد جداً لو الـ Reviewers عندك بطيئين في الرد.

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

المشكلة الحل
الـ Reviewer مش بيرد خالص استخدم "Decision if no response" واختارها Deny مش No change, عشان الـ Auto-apply يشيل الصلاحية فعلياً
الـ Review مش شايف كل الـ Roles المطلوبة تأكد إن الـ Role ده Assignable via role, مش Custom Role غير مدعوم في الـ Scope
Auto-apply مش شغال لازم تفعّل الخاصية وقت الإنشاء، مينفعش تتفعل بعد ما الـ Review يبدأ
الـ PIM for Groups مش بيظهر في الـ Review Scope اعمل الـ Review على مستوى الـ Group Membership مش على مستوى الـ Role Assignment

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

  • خلي الـ Reviewer دايماً حد تاني غير الشخص صاحب الصلاحية نفسه، الـ Self-review مقبول بس للـ Groups العادية مش للـ Privileged Roles.
  • فعّل Justification Required عشان يبقى عندك سبب مكتوب لكل قرار في وقت الـ Audit.
  • راجع الـ Break Glass Accounts بشكل منفصل ومتحطهاش جوه Review عام، الحسابات دي محتاجة استثناء واضح وموثق.
  • اربط نتائج الـ Access Reviews بـ Log Analytics أو Sentinel عشان تعمل Alert لو حد اتشال من Role حساس وبعدين اتضاف تاني بسرعة غريبة.
  • اعمل Review على PIM Eligible Assignments مش بس Active, كتير بيهملوا الـ Eligible لأنها مش Active صلاحية فعلياً بس هي بردو باب دخول.

الخلاصة

Access Reviews مش مجرد Compliance Checkbox، هي فعلياً الطريقة العملية الوحيدة إنك تضمن إن الـ Privileged Access في التينانت بتاعك فعلاً محتاج ليه ناس معينة، مش باقي من زمان. الأتمتة بتاعتها بتوفر عليك وقت كبير وبتضمن إن الموضوع بيتنفذ بانتظام مش لما تفتكر.

  1. ابدأ بتحديد أعلى الـ Roles حساسية زي Global Administrator وحدد لها Review شهري أو ربع سنوي.
  2. فعّل Auto-apply و Justification Required من البداية عشان تاخد فايدة الأتمتة كاملة.
  3. راقب الـ Completion Rate عبر KQL أو Graph API عشان تلحق تتدخل قبل ما الـ Review يقفل بدون رد.
  4. وسّع الموضوع بعدين ليشمل الـ Groups اللي بتدي Access على Resources حساسة زي Key Vault و SharePoint.

إنت عامل الموضوع ده إزاي في التينانت بتاعك؟ شاركنا تجربتك في الكومنتات.

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؟