إتقان Graph Explorer: تتبّع بصمة المستخدم من البداية إلى النهاية
By Mirko Peters ·
مرحبًا بكم مجددًا في المدونة المرافقة للبودكاست! في منشور اليوم، ننتقل بعيدًا عن واجهات الإدارة المجزأة التي نعرفها جميعًا والتي نواجه أحيانًا صعوبة في التعامل معها…
Automatically translated with AI from the original post. Read the English original
مرحبًا بكم مجددًا في المدونة المرافقة للبودكاست! في منشور اليوم، ننتقل بعيدًا عن واجهات الإدارة المجزأة التي نعرفها جميعًا والتي نواجه أحيانًا صعوبة في التعامل معها. إذا سبق لك أن حاولت تجميع سجل تدقيق شامل لما وصل إليه مستخدم معيّن، أو شاركه، أو تعامل معه عبر Microsoft 365، فأنت تدرك مدى تشتت مراكز الإدارة الأصلية. لهذا السبب نتعمق في Microsoft Graph. باستخدام Graph API، يمكننا الانتقال بسلاسة من المستخدمين الأفراد إلى المجموعات ومواقع SharePoint والملفات والروابط الخارجية وحتى المشاهدين النشطين. إذا كنت ترغب في متابعة النقاش الصوتي المرتبط بهذا الدليل مباشرة، فتأكد من الاطلاع على الحلقة ذات الصلة Map Microsoft 365 Users, Groups, Files, and Shares with Graph.
لماذا M365 ليست معزولة؟
من أكثر المفاهيم الخاطئة شيوعًا بين المسؤولين وفرق الأمان أن خدمات Microsoft 365 الفردية تعمل كصوامع آمنة ومستقلة. في الواقع، تتداخل دردشات Teams ومكتبات مستندات SharePoint ومجلدات OneDrive باستمرار عبر عضويات المجموعات الأساسية ووراثة الأذونات.
- تتداخل دردشات Teams ومكتبات SharePoint ومجلدات OneDrive عبر عضوية المجموعات.
- قد يؤدي إجراء بسيط من نوع "إضافة مستخدم واحد إلى مجموعة واحدة" إلى فتح عدد كبير من المواقع والقنوات والمشاركات الخارجية دون أن يترك أثرًا واضحًا في سجلات التدقيق ضمن العروض القياسية.
- تنشأ مخاطر الامتثال لديك من هذه المسارات الخفية، مثل روابط الضيوف المُسقطة في الدردشات الخاصة، والملفات المنسوخة عبر مكتبات متعددة، والمشاركات اليتيمة التي تبقى بعد انتهاء المشاريع بوقت طويل.
رسم البصمة باستخدام Graph Explorer (نقاط التفاعل من المستخدم إلى الملف)
لفهم كيفية انتشار الوصول عبر المستأجر لديك فعليًا، تحتاج إلى نمط استعلام قابل للتكرار. يمكنك تنفيذ سلسلة مقصودة من استدعاءات API في Graph Explorer لرسم خريطة كاملة لنقاط تفاعل المستخدم:
- ابدأ بتحديد المستخدم المستهدف:
GET /v1.0/users/{userPrincipalName}?$select=id,displayName,userPrincipalName - عدِّد عضوياته المباشرة وغير المباشرة:
GET /v1.0/users/{id}/memberOf?$select=id,displayName - ثم انتقل إلى الموارد التي ترتبط بهذه المجموعات. بالنسبة إلى مجموعات M365 وTeams، استهدف موقع SharePoint الأساسي:
GET /v1.0/groups/{groupId}/drive/root/children?$select=id,name,lastModifiedDateTime,webUrl
أو عدِّد محركات الأقراص والمكتبات الخاصة بالموقع مباشرةً:
GET /v1.0/sites/{siteId}/drives - استرجع أذونات العناصر وروابط المشاركة:
GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$select=id,grantedToV2,link,roles,shareId - تتبّع من وصل إلى ماذا ومتى، حيثما يكون ذلك متاحًا، باستخدام سجلات التدقيق وسجلات تسجيل الدخول:
GET /v1.0/auditLogs/signIns أو /security/alerts، مقرونًا بسياق الملف أو الموقع أو المشاركة. - أغلق الحلقة بالعودة إلى منشورات Teams ورسائل القنوات:
GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="filename" (يتطلب نقاط نهاية beta والأذونات المناسبة).
مرشحات لتقليل الضجيج ستستخدمها فعلًا
قد يبدو سحب البيانات الخام من Microsoft Graph أشبه بالشرب من خرطوم إطفاء. ولتحويل مجموعات البيانات الضخمة إلى معلومات قابلة للتنفيذ، يجب استخدام معلمات استعلام دقيقة.
- اعزل المشاركات الخارجية التي أُنشئت خلال آخر 7 أيام بتطبيق مرشحات النطاق:
GET /v1.0/drives/{driveId}/items/{itemId}/permissions?$filter=link/scope eq 'anonymous' or link/scope eq 'organization'&$select=… - اعزل أنواع الملفات عالية الخطورة بإلحاق امتدادات أسماء الملفات:
Append $filter=endsWith(resourceReference/name,'.xlsm') or endsWith(resourceReference/name,'.pst') - تتبّع الإشارات إلى مصطلحات حساسة خارج ساعات العمل في قنوات Teams:
GET /v1.0/teams/{teamId}/channels/{channelId}/messages?$search="confidential"، ثم صفِّ النتائج لاحقًا حسب createdDateTime خارج ساعات العمل المعتادة. - حافظ على خفة الحمولات وكفاءتها دائمًا بإضافة $select لإرجاع المعرّفات والأسماء وعناوين الويب وطوابع التعديل الأخيرة وحقول الأذونات الأساسية فقط.
- حدّد عدد النتائج للفرز السريع باستخدام $top=50 لعمليات الفحص السريعة، لكن تذكّر إزالة هذا القيد عند تصدير البيانات إلى مساحة تخزين دائمة.
متطلبات أساسية على نطاق المؤسسة (الترقيم وتقييد المعدل)
عند توسيع نطاق هذه الاستعلامات من مستخدم اختبار واحد إلى مستأجر مؤسسي يضم مئات الآلاف من الكائنات، يصبح الأداء والموثوقية في غاية الأهمية.
- لا تنتهي عملية سحب البيانات إلا عندما تتبع الخاصية @odata.nextLink بشكل صريح لكل صفحة من النتائج.
- التزم باستجابات تقييد المعدل HTTP 429 من خلال تطبيق آليات التراجع الأُسّي (exponential backoff)، واحرص على أن يتمكن السكربت من استئناف العمل بأمان من حيث توقف.
- قسّم استعلاماتك بحكمة. فضّل طلبات أقل وأكبر وأحكم البنية على كمّ هائل من الاستدعاءات الصغيرة، وخزّن خرائط المجموعات إلى المواقع في الذاكرة المؤقتة بشكل مكثف.
- قسّم عمليات الزحف الضخمة على مستأجر المؤسسة حسب معرّفات مواقع SharePoint المحددة أو نطاقات التاريخ لتجنب انتهاء مهلة الطلبات، وجدول هذه العمليات الثقيلة خلال ساعات خارج الذروة.
أخطاء شائعة (وحلول سريعة)
حتى مسؤولو النظم المخضرمون يواجهون عقبات عند بناء خطوط معالجة آلية للاستعلام عبر Graph. احتفظ بهذه الفخاخ الشائعة وحلولها السريعة في ذهنك:
- المشكلة: تنحرف ملفات تصدير CSV وتتعطل مع تغيّر المخططات الأساسية بمرور الوقت.
الحل: استخدم Graph API مباشرة مع تحويلات مُدارة بالإصدارات ومعالجة متينة لحقول "غير معروفة". - المشكلة: تؤدي المعرّفات المختلطة، مثل GUIDs مقابل أسماء المستخدمين الرئيسية (UPN)، إلى كسر عمليات الربط في قواعد البيانات.
الحل: وحّد بياناتك ضمن نموذج دلالي متماسك يشمل المستخدمين والمجموعات والمواقع والمحركات والعناصر والأذونات. - المشكلة: "تحيّز الصفحة الأولى" يُعمي المراقبة، ويُخفي حوادث أمنية كبيرة مدفونة في صفحات أعمق.
الحل: سجّل دائماً إجمالي عدد الصفحات التي تمت معالجتها، وفعّل التنبيهات عند انخفاض حجم السجلات المتوقع بشكل غير متوقع. - المشكلة: الغرق في كمّ غير قابل للإدارة من الملفات غير ذات الصلة.
الحل: صفِّ بشكل صريح حسب نطاقات الروابط، ونوافذ زمنية محددة للإنشاء أو التعديل، وقوائم مصطلحات حساسة مستهدفة. - المشكلة: مشاركات Teams التي لا ترتبط بالملفات الأساسية.
الحل: اربط عناوين URL لرسائل القناة مباشرة بعناصر المحركات، واحتفظ بالمعرّفات الفريدة لكليهما.
مؤشرات الأداء الرئيسية على المستوى التنفيذي التي تتيحها هذه المنهجية
إن تحويل مخرجات Graph API الخام إلى مقاييس منظمة يمنح القيادة الرؤية التي تحتاجها بشدة. من مؤشرات الأداء الرئيسية التي يمكنك استخراجها:
- سرعة التعرّض الخارجي: قياس عدد روابط الضيوف الجديدة المُنشأة أسبوعياً، مصنّفة حسب الموقع أو الفريق.
- معدل الوصول إلى الملفات الحساسة: تتبّع عدد المشاهدين الفريدين للمحتوى الموسوم، مع الفصل بين المستخدمين الداخليين والضيوف الخارجيين.
- مخاطر التأثير المتسلسل للمجموعات: تحديد الملفات التي تصبح متاحة فجأة خلال 24 ساعة من تغيير في عضوية المجموعة.
- التداول الخفي: تتبّع الملفات الحساسة التي تنتشر عبر عدة فرق ومواقع خلال سبرنت واحد.
- فعالية التنظيف: إحصاء روابط المشاركة الملغاة وقياس إجمالي الوقت اللازم للمعالجة.
وصفة استعلام للبدء السريع (تدفق النسخ واللصق)
إذا أردت تشغيل أول تتبّع شامل من البداية إلى النهاية في Graph Explorer الآن، فاتبع سير العمل المتسلسل هذا للنسخ واللصق:
- استعلم عن التفاصيل الأساسية للمستخدم والمجموعات:
/users/{upn}?$select=id,displayName
/users/{id}/memberOf?$select=id,displayName - لكل مجموعة M365 تم اكتشافها، اسحب عناصر المحرك الفرعية:
/groups/{groupId}/drive/root/children?$select=id,name,webUrl,lastModifiedDateTime&$top=200
تأكد من تتبع @odata.nextLink - لكل عنصر ملف، تحقق من الأذونات:
/drives/{driveId}/items/{itemId}/permissions?$select=id,roles,grantedToV2,link
صفِّ النتائج لضمان أن link/scope ضمن ('anonymous','organization') - صدّر الصفوف النظيفة إلى مستودع البيانات الخاص بك، بما في ذلك وقت المستأجر ومعرّف الموقع ومعرّف المحرك ومعرّف العنصر وعنوان URL للويب والمالك والنطاق وبيانات انتهاء الصلاحية.
- اعرض البيانات المجمّعة في Power BI للإشراف التنظيمي المستمر.
تحويل هذا إلى لوحة معلومات حيّة
الاستعلامات المنفردة في Graph Explorer رائعة للتحقيقات، لكن الحوكمة الفعّالة تتطلب الأتمتة. حوّل استعلاماتك إلى لوحة معلومات تشغيلية حيّة من خلال إنشاء تدفقات بيانات متينة، وتطبيع الجداول الخاصة بالمستخدمين والمجموعات والمواقع والمحركات والعناصر والأذونات والرسائل، وبناء نموذج نجمي (star schema) يتمحور حول عناصر الملفات. قم بإعداد تحديثات تزايدية للبيانات استناداً إلى تواريخ التعديل، وهيّئ تنبيهات فورية تُطلق كلما ظهرت روابط خارجية جديدة على محتوى موسوم وحساس للغاية.
خطة الإطلاق خلال 30 يوماً
هل أنت مستعد لتطبيق هذا عبر مؤسستك؟ اتبع إطار الإطلاق المنظم المكوّن من أربعة أسابيع:
- الأسبوع 1: أكمل تسجيل التطبيق، وامنح أذونات Graph API بأقل حد من الصلاحيات الضرورية، وأنشئ استعلامات أساسية باستخدام معلمات $select و$filter الدقيقة.
- الأسبوع 2: بناء نصوص الترقيم الصفحي، وتنفيذ توحيد المعرّفات من IDs إلى UPNs، وإجراء أول عملية تصدير ناجحة للبيانات.
- الأسبوع 3: بناء نموذج بيانات Power BI ومؤشرات الأداء الأساسية، بما في ذلك تتبع التعرض الخارجي وتحليل مخاطر الانتشار.
- الأسبوع 4: أتمتة تحديثات البيانات، وضبط تنبيهات الشذوذ، وتوثيق إجراءات التشغيل القياسية لفرق الأمن والامتثال.
من ينبغي أن يتابع
هذه المنهجية مصمَّمة خصيصًا لأدوار محددة داخل مؤسستك:
- مسؤولو Microsoft 365 وقادة SecOps الذين يشكّون في أن لوحات الإدارة الافتراضية تُخفي مناطق رمادية حرجة.
- فرق الامتثال التي تحتاج إلى رؤية شاملة لمشاركة البيانات من طرف إلى طرف دون إضافة برامج خارجية مكلفة ومتشعبة.
- مالكو التعاون المسؤولون في نهاية المطاف عن ضمان ممارسات مشاركة خارجية آمنة ومضبوطة.
نصائح عملية
احتفظ بهذه النصائح العملية في متناول يدك وأنت تبني رحلة أتمتة Graph الخاصة بك:
- ابدأ دائمًا تحقيقك إما من المستخدم أو من الملف، ثم توسّع في الاتجاهين لإزالة النقاط العمياء.
- تعامل مع أي إجراء "إضافة إلى المجموعة" كحدث تغيير عالي المخاطر، وراجع تداعيات الوصول اللاحقة خلال 24 ساعة.
- احتفظ بقائمة مختصرة ومحدّثة من المصطلحات الحساسة للبحث عنها في رسائل Teams وأسماء الملفات، وراجع هذه القائمة بانتظام.
- سجّل أعداد الصفحات والسجلات التي تتم معالجتها بعناية؛ فأحيانًا يكون الصمت التام في سجلاتك هو بالضبط الإشارة إلى تعطّل مهمة خط المعالجة.
الخاتمة
إن إتقان Microsoft Graph لتتبع نشاط المستخدمين من طرف إلى طرف يسدّ الفجوة بين العروض الإدارية المجزّأة والرؤية المؤسسية الحقيقية. فبالانتقال من عقلية الصوامع المعزولة إلى رسم خريطة الوصول العلائقية، يمكنك تأمين البيانات الحساسة بشكل استباقي، والقضاء على التداول الخفي للملفات، وتزويد القيادة بمؤشرات أداء قابلة للتنفيذ. ولمزيد من الشروحات المتخصصة والأمثلة الواقعية والتعمّق في سيناريوهات مماثلة، استمع إلى الحلقة الكاملة عبر Map Microsoft 365 Users, Groups, Files, and Shares with Graph.
اشترك
للمزيد من التعمّق والوصفات العملية لاستخدام Graph، تابع الحلقات الجديدة على m365.show/subscribe