سجل التدقيق
Ithbat يسجّل كل Event مهم -- محاولات المصادقة، الإجراءات الإدارية، تغييرات الصلاحيات، SCIM Sync، واستدعاءات الـ API -- في Audit Log غير قابل للتعديل. هذا السجل هو أداتك الأساسية للتحقيقات الأمنية وعمليات الامتثال والاستجابة للحوادث.
ما الذي يُسجَّل
كل إدخال في السجل يحفظ: من نفّذ الإجراء، على أي مورد، من أين، ومتى.
أحداث المصادقة
| نوع الـ Event | الوصف |
|---|---|
auth.login | تسجيل دخول ناجح |
auth.login_failed | محاولة تسجيل دخول فاشلة |
auth.logout | تسجيل خروج |
auth.mfa_verified | اجتاز تحدي MFA |
auth.mfa_failed | فشل تحدي MFA |
auth.password_reset | إعادة تعيين كلمة المرور |
auth.email_verified | تأكيد البريد الإلكتروني |
auth.session_revoked | إبطال Session |
auth.account_locked | قفل الحساب بعد محاولات فاشلة متكررة |
auth.saml_login | تسجيل دخول عبر SAML |
auth.social_login | تسجيل دخول عبر Social Provider |
auth.passwordless_login | تسجيل دخول عبر Magic Link أو OTP |
أحداث دورة حياة المستخدم
| نوع الـ Event | الوصف |
|---|---|
user.created | إنشاء مستخدم |
user.updated | تحديث ملف شخصي |
user.deleted | حذف مستخدم |
user.suspended | إيقاف مستخدم |
user.reactivated | إعادة تفعيل مستخدم |
user.unlocked | فتح حساب مقفل يدويًا |
user.password_changed | تغيير كلمة المرور |
user.mfa_enabled | تفعيل MFA |
user.mfa_disabled | تعطيل MFA |
أحداث الأدوار والصلاحيات
| نوع الـ Event | الوصف |
|---|---|
role.created | إنشاء دور |
role.updated | تعديل صلاحيات دور |
role.deleted | حذف دور |
role.assigned | تعيين دور لمستخدم |
role.revoked | إزالة دور من مستخدم |
أحداث الدعوات
| نوع الـ Event | الوصف |
|---|---|
invitation.created | إرسال دعوة |
invitation.accepted | قبول دعوة وإعداد الحساب |
invitation.revoked | إبطال دعوة |
invitation.expired | انتهاء صلاحية دعوة بدون قبول |
أحداث المستفيد والإعدادات
| نوع الـ Event | الوصف |
|---|---|
tenant.created | تسجيل مستفيد جديد |
tenant.updated | تحديث إعدادات المستفيد |
tenant.suspended | إيقاف مستفيد |
tenant.reactivated | إعادة تفعيل مستفيد |
settings.updated | تغيير إعدادات المستفيد |
saml.config_created | إعداد SAML Connection |
saml.config_updated | تحديث SAML Connection |
saml.config_deleted | حذف SAML Connection |
scim.token_created | إنشاء SCIM Token |
scim.token_revoked | إبطال SCIM Token |
أحداث Provisioning
| نوع الـ Event | الوصف |
|---|---|
scim.user_synced | إنشاء أو تحديث مستخدم عبر SCIM |
scim.user_deprovisioned | إلغاء تفعيل مستخدم عبر SCIM |
scim.group_synced | إنشاء أو تحديث مجموعة عبر SCIM |
directory.sync_started | بدء Directory Sync Job |
directory.sync_completed | اكتمال Directory Sync Job |
directory.sync_failed | فشل Directory Sync Job |
أحداث الـ API والنظام
| نوع الـ Event | الوصف |
|---|---|
api.key_created | إنشاء API Key |
api.key_revoked | إبطال API Key |
webhook.created | إنشاء نقطة استلام الإخطارات |
webhook.deleted | حذف نقطة استلام الإخطارات |
شكل إدخال السجل
كل إدخال يتبع نفس الـ Structure:
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"tenantId": "c2e3f4a5-6b7c-8d9e-0f1a-2b3c4d5e6f70",
"eventType": "auth.login",
"actorId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"actorEmail": "[email protected]",
"actorType": "user",
"targetId": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
"targetType": "user",
"ipAddress": "41.208.100.5",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
"location": "Riyadh, SA",
"success": true,
"metadata": {
"authMethod": "password",
"mfaUsed": true
},
"createdAt": "2026-02-24T10:00:00Z"
}
| الحقل | الوصف |
|---|---|
id | UUID فريد للإدخال |
tenantId | المستفيد الذي ينتمي له الـ Event |
eventType | نوع الـ Event |
actorId | ID المستخدم أو النظام الذي نفّذ الإجراء |
actorEmail | بريد الفاعل وقت الـ Event |
actorType | user أو admin أو system أو scim |
targetId | ID المورد الذي نُفِّذ عليه الإجراء |
targetType | نوع المورد (user، role، tenant، إلخ) |
ipAddress | عنوان الـ IP للعميل |
userAgent | User Agent String |
location | الموقع الجغرافي التقريبي من الـ IP |
success | هل نجح الإجراء أو لا |
metadata | بيانات إضافية حسب نوع الـ Event |
createdAt | Timestamp بتوقيت UTC (ISO 8601) |
عرض سجل التدقيق من لوحة التحكم
- انتقل إلى سجل التدقيق في الشريط الجانبي.
- استخدم شريط التصفية:
- نوع الحدث: اختر نوعًا أو أكثر.
- المستخدم: تصفية ببريد الفاعل أو المعرّف.
- النطاق الزمني: حدد تاريخ البداية والنهاية.
- عنوان الـ IP: تصفية بعنوان IP المصدر.
- الحالة: تصفية بالنجاح أو الفشل.
- انقر على أي صف لعرض الإدخال الكامل مع البيانات الوصفية.
الاستعلام عبر الـ API
جلب الأحداث
GET /api/v1/audit/events
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
الـ Query Parameters المدعومة:
| Parameter | النوع | الوصف |
|---|---|---|
eventType | string | تصفية بنوع الحدث، مثل auth.login |
actorId | UUID | تصفية بمعرّف الفاعل |
actorEmail | string | تصفية ببريد الفاعل (مطابقة جزئية) |
targetId | UUID | تصفية بمعرّف المورد المستهدف |
success | bool | true أو false |
from | ISO 8601 | بداية النطاق الزمني |
to | ISO 8601 | نهاية النطاق الزمني |
ipAddress | string | تصفية بعنوان الـ IP |
page | int | رقم الصفحة (الافتراضي: 1) |
limit | int | عدد النتائج بالصفحة (الافتراضي: 50، الحد الأقصى: 200) |
مثال -- محاولات تسجيل الدخول الفاشلة في آخر 24 ساعة:
GET /api/v1/audit/events?eventType=auth.login_failed&success=false&from=2026-02-23T10:00:00Z
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
جلب Event واحد
GET /api/v1/audit/events/{id}
Authorization: Bearer {token}
سجل تسجيلات الدخول
GET /api/v1/audit/logins
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
إحصائيات التدقيق
GET /api/v1/audit/stats
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
يرجع عدد الأحداث حسب النوع وحسب اليوم لآخر 30 يومًا.
نشاط مستخدم محدد
GET /api/v1/audit/users/{userId}/activity
Authorization: Bearer {token}
سجل تسجيلات دخول مستخدم محدد
GET /api/v1/audit/users/{userId}/logins
Authorization: Bearer {token}
سجل مورد محدد
جلب كل الأحداث التي أثّرت على مورد معيّن:
GET /api/v1/audit/resources/{type}/{id}/history
Authorization: Bearer {token}
مثال -- كل الأحداث على حساب مستخدم:
GET /api/v1/audit/resources/user/3fa85f64-.../history
Authorization: Bearer {token}
نشاطي (Self-Service)
المستخدمون يستطيعون عرض نشاطهم بدون صلاحيات إدارية:
GET /api/v1/audit/me/activity
Authorization: Bearer {user_token}
GET /api/v1/audit/me/logins
Authorization: Bearer {user_token}
التصفية حسب فئة الـ Event
يمكنك التصفية على بادئات الـ Event Type لكي تجلب كل أحداث فئة:
| لكي تجلب كل... | استخدم eventType Filter |
|---|---|
| أحداث المصادقة | auth.* |
| أحداث دورة حياة المستخدم | user.* |
| أحداث الأدوار | role.* |
| أحداث SAML | saml.* |
| أحداث SCIM | scim.* |
تصدير بيانات التدقيق
صدّر الأحداث للتحليل خارج النظام أو الأرشفة أو إدخالها في SIEM.
عبر لوحة تحكم المسؤول
- انتقل إلى سجل التدقيق.
- طبّق عوامل التصفية للنطاق الزمني وأنواع الأحداث.
- انقر تصدير ← JSON أو تصدير ← CSV.
عبر الـ API
POST /api/v1/logs/export
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
Content-Type: application/json
{
"format": "json",
"from": "2026-01-01T00:00:00Z",
"to": "2026-01-31T23:59:59Z",
"eventTypes": ["auth.login", "auth.login_failed", "user.created", "user.deleted"]
}
التصدير Async. تابع حالة الـ Job:
GET /api/v1/jobs/{jobId}/status
Authorization: Bearer {token}
بث السجلات
لكي تدفع السجلات Real-Time لنظام SIEM (مثل Splunk أو Datadog أو Elastic):
- إخطارات آلية -- اشترك بأنواع الأحداث المطلوبة. يرسل Ithbat كل حدث كـ POST Request إلى Endpoint تحدده. راجع إخطارات آلية.
- Log Stream API -- استعلام أو بث مباشر:
GET /api/v1/logs/stream
Authorization: Bearer {token}
X-Tenant-ID: {tenant_id}
سياسة الاحتفاظ
| الخطة | مدة الاحتفاظ | الحد الأقصى |
|---|---|---|
| Starter | 30 يومًا | 30 يومًا |
| Growth | 90 يومًا | 90 يومًا |
| Enterprise | سنة | مخصص (حتى 7 سنوات) |
السجلات Immutable -- لا يمكنك تعديلها أو حذفها قبل انتهاء فترة الاحتفاظ.
Audit Log API Reference
| Method | Endpoint | الصلاحية |
|---|---|---|
GET | /api/v1/audit/events | audit:read |
GET | /api/v1/audit/events/{id} | audit:read |
GET | /api/v1/audit/logins | audit:read |
GET | /api/v1/audit/stats | audit:read |
GET | /api/v1/audit/users/{userId}/activity | audit:read |
GET | /api/v1/audit/users/{userId}/logins | audit:read |
GET | /api/v1/audit/resources/{type}/{id}/history | audit:read |
GET | /api/v1/audit/me/activity | مستخدم مصادَق |
GET | /api/v1/audit/me/logins | مستخدم مصادَق |
POST | /api/v1/logs/export | log:read |
GET | /api/v1/logs/stream | log:read |
الخطوات التالية
- إخطارات آلية ← ابث أحداث التدقيق لنظام SIEM بشكل Real-Time
- RBAC والصلاحيات ← تحكّم بمن يملك صلاحية
audit:read - إدارة المستخدمين ← تحقّق من أحداث مستخدم محدد