آليات أمن البيانات
نظام موحَّد للمصادقة والترخيص، وتشفير البيانات وتجزئتها، إضافة إلى أنظمة فرعية للتدقيق والمراقبة تحمي البيانات على امتداد المنصّة.
النظام الموحَّد للمصادقة والترخيص
يُعدّ النظام الموحَّد للمصادقة والترخيص مكوِّنًا أساسيًا في حماية البيانات، إذ يوفّر وصولًا آمنًا إلى موارد النظام. وهو يتيح لك إدارة المستخدمين وأذوناتهم ووصولهم إلى البيانات على مستوى النظام بأكمله.
تذكير:
- المصادقة هي عملية التحقق من هوية المستخدم (على سبيل المثال، باستخدام اسم المستخدم وكلمة المرور).
- الترخيص هو عملية التحقق من أذونات المستخدم لتنفيذ إجراءات معيّنة (على سبيل المثال، الوصول إلى البيانات أو وظائف النظام).
مكوِّنات النظام
المصادقة
- اسم الدخول وكلمة المرور: الطريقة التقليدية للمصادقة. عند تسجيل الدخول، يجب على المستخدم أن يعرّف عن نفسه أولًا باسم مستخدم وكلمة مرور.
- المصادقة متعددة العوامل (MFA): استخدام عدّة عوامل (على سبيل المثال، رمز برمجي يُحدَّث ديناميكيًا لواجهة برمجة تطبيقات الويب).
تبسِّط المصادقة المعتمدة على الرموز هذه العملية بالنسبة إلى المستخدمين المسجَّلين. للبدء، يرسل المستخدم طلبًا إلى الخادم يتضمّن اسم المستخدم وكلمة المرور. يتحقق الخادم منهما مقابل القيم المسجَّلة في قاعدة بيانات الهويات لديه. وإذا تأكَّدت الهوية، يُعيد الخادم رمز مصادقة (يُخزَّن أيضًا في قاعدة البيانات).
وعندما يطلب المستخدم نفسه لاحقًا الوصول إلى الموارد المحمية، يمكن ترخيص تلك الطلبات باستخدام رمز المصادقة بدلًا من اسم المستخدم وكلمة المرور. يتحقق الخادم من الرمز مقابل الرمز المسجَّل في قاعدة البيانات ويمنح الوصول.
الترخيص
- الأدوار والأذونات: تُسنَد إلى المستخدمين أدوار (على سبيل المثال، مسؤول الوصول، مستخدم) تحدِّد أذوناتهم.
- ACL (قوائم التحكم في الوصول): قوائم تحدِّد من يملك الوصول إلى أي موارد.
- RBAC (التحكم في الوصول المعتمد على الأدوار): التحكم في الوصول استنادًا إلى الأدوار.
- ABAC (التحكم في الوصول المعتمد على السمات): التحكم في الوصول استنادًا إلى السمات (على سبيل المثال، بحسب وقت اليوم أو الموقع).
تخزين بيانات المستخدمين
- قاعدة بيانات المستخدمين: تخزِّن المعلومات عن المستخدمين وأدوارهم وأذوناتهم في قاعدة بيانات واحدة.
الأمن
- التشفير: يحمي البيانات أثناء النقل والتخزين.
- رموز الوصول: رموز برمجية تُحدَّث ديناميكيًا تُستخدم لإدارة الجلسات.
- التدقيق: تسجيل جميع إجراءات المستخدم لتحليلها لاحقًا.
تطبيق النظام
تستخدم المنصّة تدفّق مصادقة معتمدًا على الرموز. يسجِّل المستخدم الدخول باسم دخول وكلمة مرور، فيتحقق النظام منهما ويُعيد رمز وصول، ثم يُرسَل هذا الرمز مع كل طلب لاحق لترخيص الوصول إلى الموارد المحمية. ويُستخدم عنوان البريد الإلكتروني للمستخدم بصفته اسم الدخول.
مثال على طلب بصيغة Curl:
curl -i --header "Content-Type: application/json" \
--request POST \
--data '{"email":"api@local.net","password":"Str0ngPas$"}'\
https://server123/api/v1/auth/sign_inردًّا على ذلك، نتلقّى الرسالة التالية:
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block X-Content-Type-Options: nosniff X-Download-Options: noopen X-Permitted-Cross-Domain-Policies: none Referrer-Policy: strict-origin-when-cross-origin Content-Type: application/json; charset=utf-8 access-token: tgervk9_9xicJYpmSsnnNA
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615227012
uid: api@local.net
ETag: W/"5b9bcc76f7223b72b79d9f2d31ff0fd5"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: c18e06b4-e5bd-40b5-875d-7ac958e2fbb5
X-Runtime: 0.391069
Transfer-Encoding: chunked
{"data":{"id":6,"email":"api@local.
net","provider":"email","uid":"api@local.net","name":"API user"}}في هذا الردّ، يهمّنا المعامل access_token. تُستخدم قيمة هذه الترويسة بوصفها كلمة المرور لكل طلب، وهي تتغيّر مع كل طلب.
وفيما يلي مثال على طلب يستخدم الرمز الوارد في الردّ السابق:
curl -i --header "access-token: tgervk9_9xicJYpmSsnnNA" \
--header "token-type: Bearer" \
--header "client: D-Uv3ER53873olhnNLjL9w" \
--header "uid: api@local.net" \
--request GET \
--header "Content-Type: application/json" \
--data '{"page":"2"}' \
https://server123/api/v1/stationsردًّا على ذلك، نتلقّى الرسالة التالية:
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Download-Options: noopen
X-Permitted-Cross-Domain-Policies: none
Referrer-Policy: strict-origin-when-cross-origin
Content-Type: application/json; charset=utf-8
access-token: Bmh2GVrxr6aW0Hngor4gPw
token-type: Bearer
client: D-Uv3ER53873olhnNLjL9w
expiry: 1615311367
uid: api@local.net
ETag: W/"ba0df406b647bd92f0bf3a18916714c1"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: 35a26441-ae78-48fa-8b2e-e92d2605133b
X-Runtime: 0.167748
Transfer-Encoding: chunked
{"data": [
{"id":1,"name":"865293041101853","equipment_brand_name":"Corrector
BK","phone":"","equipment_id":1},...
],
"total_pages":7,
"current_page":2
}لإنهاء الجلسة، يمكنك استخدام إجراء SignOut، أو حفظ الترويسات اللازمة من آخر طلب وإعادة استخدامها في المرّة التالية إذا لم تكن صلاحية الرمز قد انتهت. لاحظ أنه من دون إنهاء الجلسة، يبقى آخر رمز صالحًا لبعض الوقت، تبعًا لإعدادات النظام في الخادم.
مزايا النظام
النظام الموحَّد للمصادقة والترخيص أداة قوية لحماية البيانات والتحكم في الوصول. وهو يوفّر الفوائد التالية:
- الإدارة المركزية: تبسِّط إدارة المستخدمين وأذوناتهم.
- الأمن: يحمي البيانات من الوصول غير المصرَّح به.
- الاتّساق: تستخدم جميع التطبيقات والأنظمة آلية المصادقة والترخيص نفسها.
- قابلية التوسّع: تسهِّل إضافة تطبيقات ومستخدمين جدد.
تشفير البيانات
لحماية المعلومات الحرجة، يستخدم النظام التشفير (تحويل المعلومات إلى صيغة لا يمكن قراءتها من دون المفتاح المناسب) والتجزئة (تحويل البيانات إلى سلسلة فريدة ذات طول ثابت — تجزئة). وهذا أحد آليات حماية البيانات الأساسية، إذ يضمن سرّية المعلومات وسلامتها وأمنها أثناء التخزين والنقل على حدّ سواء.
يستخدم النظام خوارزميات متنوّعة لتشفير البيانات وتجزئتها.
تطبيق التشفير في النظام
تشفير التخزين
- قواعد البيانات: تشفير حقول منفردة في قاعدة البيانات.
- الملفات: تشفير الملفات قبل حفظها على القرص.
تشفير البيانات أثناء النقل
- HTTPS: استخدام SSL/TLS لتشفير البيانات أثناء النقل عبر الشبكة.
- VPN: إنشاء نفق آمن لنقل البيانات.
تشفير كلمات المرور
تخزين تجزئات كلمات المرور بدلًا من كلمات المرور نفسها.
أمثلة على تشفير البيانات وفكّ تشفيرها
لننظر في أمثلة على تشفير ملفات إعدادات النظام وفكّ تشفيرها.
تشفير البيانات
mkdir_p(encrypted_dir_path)
encrypted = Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key')
encrypted.write(File.read(decrypted_file_path))
File.delete(decrypted_file_path)فكّ تشفير البيانات
mkdir_p(decrypted_dir_path)
File.write(decrypted_file_path,
Rails.application.encrypted(encrypted_file_path, key_path: 'config/system.key').read
)فوائد تشفير البيانات
- السرّية: حماية البيانات من الوصول غير المصرَّح به.
- السلامة: ضمان عدم تغيير البيانات.
- الأصالة: تأكيد مصدر البيانات.
- متطلّبات الامتثال: تلبية المتطلّبات التنظيمية.
التدقيق والمراقبة
تراقب عدّة أنظمة فرعية نشاط المستخدمين والنظام، وتكتشف السلوك المريب، وتضمن الامتثال لمتطلّبات الأمن. وهي معًا:
- تجمع المعلومات عن نشاط المستخدمين والنظام وتحلّلها وتخزّنها لضمان المساءلة والامتثال؛
- تراقب النظام والمعدّات باستمرار في الزمن الحقيقي للكشف عن الحوادث والاستجابة لها.
الأهداف
- المساءلة: ضمان تسجيل كل نشاط للمستخدمين والنظام.
- الأمن: اكتشاف النشاط غير المصرَّح به ومنعه.
- اكتشاف المشكلات: تحديد مشكلات العتاد والحالات الشاذّة واتّخاذ إجراءات تصحيحية.
- تحسين الأداء: تحليل أداء النظام وإيجاد الاختناقات التي تتطلّب تحسينًا.
- التنبّؤ والتخطيط: جمع البيانات للتنبّؤ بأحمال العمل المستقبلية وتخطيط الموارد.
- الامتثال: ضمان الامتثال للمتطلّبات التنظيمية.
- تحليل الحوادث: تحليل الحوادث التي وقعت لمنع وقوعها مستقبلًا.
مكوِّنات التدقيق والمراقبة
جمع البيانات
- السجلّات: قيود لإجراءات المستخدمين والنظام على جميع المستويات.
- المقاييس: بيانات أداء النظام (على سبيل المثال، استخدام وحدة المعالجة المركزية، استخدام الذاكرة).
تخزين البيانات
- تخزين السجلّات: جمع البيانات من مصادر متنوّعة، مع تخزين موزَّع للسجلّات والمقاييس مرتَّب بحسب المجال الموضوعي.
- تدوير السجلّات: الحذف التلقائي للسجلّات القديمة لتوفير المساحة.
تحليل البيانات
- البحث والتصفية: إمكانية البحث في السجلّات وتصفيتها وفق معايير متنوّعة.
- التحليلات: استخدام أدوات تحليل البيانات (على سبيل المثال، Zabbix).
التنبيهات
- التنبيهات: إرسال إشعارات حول النشاط المريب والحالات الطارئة (على سبيل المثال، عبر البريد الإلكتروني أو محادثة Telegram).
- الإجراءات التلقائية: الاستجابة للحوادث تلقائيًا (على سبيل المثال، حظر مستخدم).
مثال على التطبيق
التسجيل
استخدام مكتبة للتسجيل في التطبيق.
# Logs all changes to models
gem "audited"
# Logging settings
Audited.config do |config|
config.audit_class = CustomAudit
end
class CustomAudit < Audited::Audit
default_scope { order(created_at: :desc) }
ACTION_NAME = { 'Create' => 'create',
'Update' => 'update',
'Destroy' => 'destroy' }.freeze
end
# Metering device
class Equipment < ApplicationRecord
audited except: [:password]
...
endجمع الأخطاء في البيانات الواردة من العدّادات
# data model for error collection
class ErrorLog < ApplicationRecord
enum message: { invalid_equipment_serial_number: 0,
invalid_equipment_software_version: 1,
...
}
belongs_to :loggable, polymorphic: true
belongs_to :loggable_equipment, class_name: 'Equipment', foreign_key: :loggable_id, optional: true
validates :loggable_type, :loggable_id, :message, presence: true
end
# Event log
unless valid_value?(serial_number)
message_params = {equipment: equipment, new_serial_number: serial_number}
message2logger(loggable_obj: equipment, message: :invalid_equipment_serial_number, params: message_params)
endتخزين السجلّات
استخدام تخزين مركزي للسجلّات.
الجدول audits
يخزِّن هذا الجدول معلومات تسجيل البيانات.
| الحقل | النوع | الوصف |
|---|---|---|
id | integer | المعرّف الفريد للقيد (المفتاح الأساسي). |
auditable_id | integer | مرجع إلى الكائن المُدقَّق (equipment.id, stations.id …). |
auditable_type | character varying | الكائن القابل للتدقيق (equipment, stations …). |
user_id | integer | مرجع إلى معرّف المستخدم (users.id) |
action | character varying | الإجراء |
audited_changes | jsonb | التغييرات المُدقَّقة |
version | integer | إصدار التغييرات |
remote_address | character varying | العنوان البعيد |
request_uuid | character varying | معرّف الحدث. |
created_at | timestamp(6) without time zone | تاريخ/وقت التغيير. |
الجدول error_logs
يخزِّن هذا الجدول معلومات عن الأخطاء في البيانات الواردة من العدّادات.
| الحقل | النوع | الوصف |
|---|---|---|
id | integer | المعرّف الفريد للقيد (المفتاح الأساسي). |
loggable_id | integer | مرجع إلى الكائن المسجَّل (equipment.id …). |
loggable_type | character varying | الكائن المسجَّل (equipment …). |
message | integer | مرجع إلى معرّف الخطأ. |
params | jsonb | خصائص الخطأ. |
created_at | timestamp(6) without time zone | تاريخ/وقت التغيير. |
تحليل السجلّات
الأدوات المستخدمة لتحليل السجلّات:
- إعداد نماذج ويب لتصوّر السجلّات وتحليلها.
- إنشاء لوحات معلومات لمراقبة نشاط المستخدمين.
التنبيهات
تنبيهات مخصَّصة للنشاط المريب:
- ضبط التنبيهات في Zabbix لمراقبة المقاييس.
- إرسال إشعارات عبر البريد الإلكتروني أو محادثة Telegram للأحداث الإنذارية.
فوائد التدقيق والمراقبة
التدقيق والمراقبة أداتان قويتان لحماية البيانات تتيحان لك تتبّع نشاط المستخدمين والنظام، وتحديد السلوك المريب، وضمان الامتثال لمتطلّبات الأمن. وهما تتيحان لك:
- ضمان مساءلة البيانات وأمنها؛
- تحديد الحوادث ومنعها؛
- تلبية المتطلّبات التنظيمية.
مواضيع ذات صلة
هل كانت هذه الصفحة مفيدة؟
شكرًا على ملاحظاتك!