انتقل إلى المحتوى الرئيسي

نقاط نهاية REST API

يوفّر AuroraSOC عدد 57 نقطة نهاية REST عبر FastAPI على http://localhost:8000. تتطلب جميع النقاط (باستثناء /health و/api/v1/auth/token) مصادقة JWT.

تدفق المصادقة

عنوان URL الأساسي

http://localhost:8000/api/v1

البدء السريع حسب نوع العميل

# 1) Authenticate and capture JWT
TOKEN=$(curl -s -X POST http://localhost:8000/api/v1/auth/token \
-H 'Content-Type: application/json' \
-d '{"username":"admin","password":"admin"}' | jq -r .access_token)

# 2) Query latest alerts
curl -s "http://localhost:8000/api/v1/alerts?limit=20" \
-H "Authorization: Bearer $TOKEN"

نقاط النهاية حسب الفئة

المصادقة

الطريقةالمسارالمصادقةالصلاحيةالوصف
POST/api/v1/auth/tokenلا يوجدالحصول على رمز وصول JWT

الطلب:

{
"username": "admin",
"password": "admin"
}

الاستجابة:

{
"access_token": "eyJhbGciOiJIUzI1NiIs...",
"token_type": "bearer"
}

المستخدمون

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/users/meJWTملف المستخدم الحالي
GET/api/v1/usersJWTدور adminعرض جميع المستخدمين
POST/api/v1/usersJWTدور adminإنشاء مستخدم
DELETE/api/v1/users/{username}JWTدور adminحذف مستخدم

النظام

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/healthلا يوجدفحص سلامة عام

التنبيهات

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/alertsJWTalerts:readعرض التنبيهات (بترقيم صفحات)
POST/api/v1/alertsJWTalerts:writeإنشاء تنبيه
GET/api/v1/alerts/{alert_id}JWTalerts:readجلب تنبيه واحد
PATCH/api/v1/alerts/{alert_id}JWTalerts:writeتحديث حالة التنبيه

معلمات الاستعلام لطلب GET /api/v1/alerts:

المعلمةالنوعالافتراضيالوصف
skipint0إزاحة الترقيم
limitint50حجم الصفحة (الحد الأقصى 200)
severitystringتصفية: critical|high|medium|low|info
statusstringتصفية: new|triaged|investigating|...
sourcestringتصفية حسب نظام المصدر

إنشاء التنبيه يتضمن إزالة التكرار:

dedup_hash = SHA256(f"{title}|{source}|{sorted(iocs)}")
# If matching hash exists, returns existing alert instead of creating duplicate

القضايا

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/casesJWTcases:readعرض القضايا
POST/api/v1/casesJWTcases:writeإنشاء قضية حادثة
GET/api/v1/cases/{case_id}JWTcases:readجلب القضية مع المخطط الزمني
PATCH/api/v1/cases/{case_id}JWTcases:writeتحديث القضية

طلب إنشاء قضية:

{
"title": "Lateral Movement via PsExec",
"severity": "high",
"description": "Multiple hosts showing PsExec activity",
"alert_ids": ["uuid-1", "uuid-2"],
"assignee": "analyst@example.com"
}

الوكلاء

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/agentsJWTagents:readعرض جميع الوكلاء الـ16
POST/api/v1/agents/{id}/enableJWTagents:manageتفعيل الوكيل
POST/api/v1/agents/{id}/disableJWTagents:manageتعطيل الوكيل
POST/api/v1/agents/{id}/deployJWTagents:manageنشر إلى الموقع
PATCH/api/v1/agents/{id}/scaleJWTagents:manageتوسيع عدد النسخ (0-10)
POST/api/v1/agents/investigateJWTinvestigation:triggerبدء التحقيق

معلمات تصفية الوكلاء:

المعلمةالنوعالوصف
sitestringتصفية حسب موقع SOC
statusstringactive|disabled|error
typestringتعداد نوع الوكيل

طلب التحقيق (مع حد معدل):

{
"alert_context": "Suspicious DNS queries to known C2 domain t1.evil.com from 10.0.1.50",
"has_cps_assets": false,
"severity": "high"
}

المواقع

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/sitesJWTsites:readعرض مواقع SOC
POST/api/v1/sitesJWTsites:manageتسجيل موقع
DELETE/api/v1/sites/{id}JWTsites:manageإزالة موقع

SIEM

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/siem/logsJWTsiem:readالبحث في السجلات
GET/api/v1/siem/sourcesJWTsiem:readعرض مصادر السجلات
GET/api/v1/siem/statsJWTsiem:readإحصاءات SIEM

EDR

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/edr/endpointsJWTedr:readعرض endpoints
GET/api/v1/edr/endpoints/{id}JWTedr:readتفاصيل endpoint
POST/api/v1/edr/endpoints/{id}/isolateJWTedr:manageعزل endpoint
POST/api/v1/edr/endpoints/{id}/unisolateJWTedr:manageإزالة العزل
POST/api/v1/edr/endpoints/{id}/scanJWTedr:manageتشغيل فحص
GET/api/v1/edr/statsJWTedr:readإحصاءات EDR

SOAR

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/soar/playbooksJWTsoar:readعرض Playbooks
GET/api/v1/soar/playbooks/{id}JWTsoar:readتفاصيل Playbook
POST/api/v1/soar/playbooks/{id}/toggleJWTsoar:manageتبديل حالة التفعيل
POST/api/v1/soar/playbooks/{id}/executeJWTsoar:executeتنفيذ Playbook
GET/api/v1/soar/executionsJWTsoar:readسجل التنفيذ
GET/api/v1/soar/rulesJWTsoar:readقواعد الأتمتة
POST/api/v1/soar/rules/{id}/toggleJWTsoar:manageتبديل القاعدة

Playbooks

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/playbooksJWTplaybooks:readعرض Playbooks
POST/api/v1/playbooks/{id}/executeJWTplaybooks:executeتنفيذ Playbook
GET/api/v1/playbooks/executionsJWTplaybooks:readسجل التنفيذ

CPS / IoT Devices

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/cps/devicesJWTcps:readعرض أجهزة CPS
GET/api/v1/cps/devices/{id}JWTcps:readتفاصيل الجهاز
POST/api/v1/cps/devices/{id}/revokeJWTcps:manageإبطال الشهادة
GET/api/v1/cps/attestationsJWTcps:readنتائج التحقق (Attestation)

الموافقات البشرية

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/approvalsJWTapprovals:manageعرض الموافقات المعلقة
POST/api/v1/approvals/{id}/decideJWTapprovals:manageموافقة/رفض

طلب القرار:

{
"decision": "approved",
"reason": "Verified - safe to isolate compromised host"
}

التقارير

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/reportsJWTreports:readعرض التقارير
GET/api/v1/reports/{id}JWTreports:readالتقرير الكامل

استخبارات التهديدات

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/iocsJWTiocs:readعرض IOCs
POST/api/v1/iocsJWTiocs:writeإنشاء IOC

الإحصاءات ولوحة التحكم

الطريقةالمسارالمصادقةالصلاحيةالوصف
GET/api/v1/stats/overviewJWTstats:readنظرة عامة على لوحة التحكم
GET/api/v1/dashboard/statsJWTstats:readإحصاءات مسطحة للواجهة الأمامية
GET/api/v1/correlationsJWTcps:readأحداث مترابطة فيزيائيًا-سيبرانيًا
GET/api/v1/firmwareJWTcps:readجرد البرمجيات الثابتة

تحديد معدل الطلبات

فئة نقطة النهايةحد المعدلالنافذة
API العامة100 طلبلكل دقيقة
تشغيل التحقيق10 طلباتلكل دقيقة
تنفيذ الـ Playbook5 طلباتلكل دقيقة

استجابات الأخطاء

تتبع جميع الأخطاء تنسيقًا موحدًا:

{
"detail": "Alert not found"
}
رمز الحالةالمعنى
400طلب غير صالح / خطأ تحقق
401رمز JWT مفقود أو غير صالح
403صلاحيات غير كافية
404المورد غير موجود
429تم تجاوز حد المعدل
503قاعدة البيانات غير متاحة (وضع متدهور)

الوضع المتدهور

عند عدم توفر PostgreSQL، تنتقل API تلقائيًا إلى مخازن بيانات داخل الذاكرة مع بيانات تجريبية. يضمن ذلك بقاء لوحة التحكم والمراقبة بحالة تشغيل أثناء صيانة قاعدة البيانات.

@app.exception_handler(DatabaseUnavailable)
async def _handle_db_unavailable(request, exc):
return JSONResponse(
status_code=503,
content={"detail": "Database unavailable — running in degraded mode"},
)