تسجيل تدقيق قاعدة بيانات Firebase في الوقت الفعلي

يوضّح هذا المستند عملية تسجيل التدقيق في "قاعدة بيانات Firebase في الوقت الفعلي". تنشئ خدمات Google Cloud سجلات تدقيق تسجّل أنشطة الإدارة والوصول ضمن موارد Google Cloud. لمزيد من المعلومات عن "سجلّات تدقيق السحابة الإلكترونية"، يُرجى الاطّلاع على ما يلي:

ملاحظات

تتوفّر معلومات إضافية حول الحقول في protoPayload.metadata لعمليات DATA_READ وDATA_WRITE في المستندات المرجعية.

اسم الخدمة

تستخدِم سجلّات التدقيق في "قاعدة بيانات Firebase في الوقت الفعلي" اسم الخدمة firebasedatabase.googleapis.com. فلتر لهذه الخدمة:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

الطُرق حسب نوع الإذن

يحتوي كل إذن من أذونات إدارة الهوية وإمكانية الوصول (IAM) على السمة type، وقيمتها هي تعداد يمكن أن تكون إحدى القيم الأربع التالية: ADMIN_READ أو ADMIN_WRITE أو DATA_READ أو DATA_WRITE. عند استدعاء إحدى الطرق، تنشئ "قاعدة بيانات Firebase في الوقت الفعلي" سجل تدقيق يعتمد تصنيفه على السمة type للإذن المطلوب لتنفيذ الطريقة. تؤدي الطرق التي تتطلّب إذنًا في "إدارة الهوية وإمكانية الوصول" مع قيمة السمة type البالغة DATA_READ أو DATA_WRITE أو ADMIN_READ إلى إنشاء سجلّات تدقيق الوصول إلى البيانات. تؤدي الطرق التي تتطلّب إذنًا من نظام إدارة الهوية وإمكانية الوصول (IAM) مع قيمة السمة type إلى ADMIN_WRITE إلى إنشاء سجلّات تدقيق نشاط المشرف.

إنّ طرق واجهة برمجة التطبيقات في القائمة التالية التي تحمل العلامة (LRO) هي عمليات طويلة الأمد (LRO). تنشئ هذه الطرق عادةً إدخالَين في سجلّ التدقيق: أحدهما عند بدء العملية والآخر عند انتهائها. لمزيد من المعلومات، اطّلِع على سجلّات التدقيق للعمليات التي تستغرق وقتًا طويلاً.
نوع الإذن الإجراءات
ADMIN_READ google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
ADMIN_WRITE google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
DATA_READ google.firebase.database.v1.RealtimeDatabase.Connect
google.firebase.database.v1.RealtimeDatabase.Disconnect
google.firebase.database.v1.RealtimeDatabase.Listen
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
google.firebase.database.v1.RealtimeDatabase.Read
google.firebase.database.v1.RealtimeDatabase.Unlisten
DATA_WRITE google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
google.firebase.database.v1.RealtimeDatabase.Update
google.firebase.database.v1.RealtimeDatabase.Write

سجلات تدقيق واجهة برمجة التطبيقات

للحصول على معلومات حول كيفية تقييم الأذونات ونوعها لكل طريقة، راجِع مستندات Cloud Identity and Access Management الخاصة بقاعدة بيانات Firebase الآنية الاستجابة.

google.firebase.database.v1.RealtimeDatabase

ترتبط سجلات التدقيق التالية بطُرق تنتمي إلى google.firebase.database.v1.RealtimeDatabase.

Connect

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Connect
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.connect - DATA_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Disconnect
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.connect - DATA_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Listen
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.get - DATA_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.cancel - DATA_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.update - DATA_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.update - DATA_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Read
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.get - DATA_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.update - DATA_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Unlisten
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.cancel - DATA_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Update
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • طريقة التشفير (Method): google.firebase.database.v1.RealtimeDatabase.Write
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.data.update - DATA_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

ترتبط سجلات التدقيق التالية بطُرق تنتمي إلى google.firebase.database.v1beta.RealtimeDatabaseService.

CreateDatabaseInstance

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
  • نوع سجلّ التدقيق: نشاط المشرف
  • الأذونات:
    • firebasedatabase.instances.create - ADMIN_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
  • نوع سجلّ التدقيق: نشاط المشرف
  • الأذونات:
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
  • نوع سجلّ التدقيق: نشاط المشرف
  • الأذونات:
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.instances.get - ADMIN_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
  • نوع سجلّ التدقيق: الوصول إلى البيانات
  • الأذونات:
    • firebasedatabase.instances.list - ADMIN_READ
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
  • نوع سجلّ التدقيق: نشاط المشرف
  • الأذونات:
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • طريقة التشفير (Method): google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
  • نوع سجلّ التدقيق: نشاط المشرف
  • الأذونات:
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • الطريقة هي عملية بث أو عملية طويلة الأمد: لا.
  • فلترة هذه الطريقة: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

معلومات مصادقة التدقيق

تتضمّن إدخالات سجلّ التدقيق معلومات حول الهوية التي نفّذت العملية المسجّلة. لتحديد هوية مقدّم الطلب، اطّلِع على الحقول التالية ضمن عنصر AuditLog:

  • إنشاء اتصالات في الوقت الفعلي: لا تسجّل عمليات Realtime Database Connect بيانات المصادقة لأنّ Realtime Database تتم المصادقة بعد إنشاء اتصال. لذلك، لا يحتوي Connect على معلومات مصادقة. يحتوي العنصر AuthenticationInfo على عنصر نائب principalEmail بقيمة audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • المصادقة من Google عمليات Realtime Database التي تستخدم مصادقة Google العادية، مثل الزيارات الواردة من Firebase Admin SDK أو طلبات REST التي تمت مصادقتها باستخدام رمز OAuth مميَّز عادي، تتضمّن عنصر AuthenticationInfo يحتوي على البريد الإلكتروني الفعلي لبيانات الاعتماد.

  • Firebase Authentication. عمليات Realtime Database التي تستخدم Firebase Authentication لها كائن AuthenticationInfo يحتوي على قيمة principalEmail تساوي audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. وينطبق الأمر نفسه إذا نفّذت حلّ المصادقة الخاص بك من خلال إنشاء رموز JWT مخصّصة.

    • في حال استخدام رمز JSON المميّز للويب (JWT) للمصادقة من جهة خارجية، يتضمّن الحقل thirdPartyPrincipal عنوان الرمز وحمولته. على سبيل المثال، تتضمّن سجلّات التدقيق للطلبات التي تمّت مصادقتها باستخدام Firebase Authentication رمزًا مميّزًا خاصًا بهذا الطلب.Firebase Authentication
  • لا يلزم إجراء مصادقة. عمليات Realtime Database التي لا تستخدم أي مصادقة تتضمّن كائن AuthenticationInfo يحتوي على قيمة principalEmail تساوي audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. وقد يمنح مثيل Realtime Database الذي يتضمّن قواعد أمان مفتوحة مثل هذه الطلبات. ننصح جميع المستخدمين بتأمين قواعد البيانات بشكلٍ صحيح.

  • رموز مميّزة للأسرار القديمة: تحتوي عمليات Realtime Database التي تستخدم الرموز المميزة القديمة على عنصر AuthenticationInfo يتضمّن العنصر النائب principalEmail الذي يحمل القيمة audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. بالنسبة إلى رموز JWT الموقّعة باستخدام أسرار، يحتوي thirdPartyPrincipal على عناوين JWT والحمولة.

تقييمات التدقيق في Firebase Security Rules

يمكن استخدام سجلّات Cloud Audit لتحديد الطلبات التي قد تتأثّر بالتغييرات في Rules.

في عنصر AuthorizationInfo، يمكن أن تكون قيمة authorization.permission إحدى القيم التالية:

  • firebasedatabase.data.get: تم منح إذن الوصول للقراءة في المسار المحدّد في resource.
  • firebasedatabase.data.update: تم منح إذن الوصول للكتابة في المسار المحدّد في resource.
  • firebasedatabase.data.connect: عنصر نائب لـ "Connect" و"Disconnect". لا يلزم الحصول على إذن للاتصال بمثيل Realtime Database.
  • firebasedatabase.data.cancel: يُستخدَم في Unlisten وOnDisconnectCancel. لا يتطلّب إبطال أو إلغاء عملية سبق أن تمّت الموافقة عليها أي موافقة إضافية.

ربط سجلّات تدقيق Cloud بنتائج أداة تحليل الأداء Realtime Database

يمكنك إجراء تحليل مفصّل للأداء على Realtime Database باستخدام أداة تحليل الأداء في Realtime Database مع تسجيل عمليات التدقيق في Realtime Database. لكل أداة نقاط قوتها.

Cloud Audit Logging Realtime Database profiler
  • مراجعة الوصول إلى قواعد البيانات
  • تسجيل جميع الطلبات بشكل مستمر
  • تسمح بإجراء طلبات بحث بأثر رجعي
  • يحتوي على معلومات تفصيلية عن رمز المصادقة
  • تتضمّن تكلفة استخدام
  • تُستخدَم لتحليل الأداء
  • توفير أدوات مفيدة لتحديد نقاط الاتصال وبالتالي تحسين الأداء
  • يمكن قياس الاستماع إلى البث، وهو غير متاح في سجلّات التدقيق بسبب حجم البيانات المحتمل
  • خفيفة الوزن وفي الوقت الفعلي، ما يجعلها مناسبة لاختبار التحميل المباشر. قد يستغرق ظهور إدخالات سجلّ التدقيق بضع دقائق.

تتطابق محتويات سجلّ التدقيق مع مقاييس أداة تحليل الأداء كما هو موضّح أدناه.

اسم عملية تسجيل أحداث التدقيق القيم الخاصة في
RealtimeDatabaseAuditMetadata
اسم عملية Profiler
ربط RequestType هو REALTIME concurrent-connect
إلغاء الربط RequestType هو REALTIME concurrent-disconnect
قراءة RequestType هو REALTIME realtime-read
قراءة RequestType هو REST rest-read
كتابة RequestType هو REALTIME realtime-write
كتابة RequestType هو REST rest-write
تعديل ‫"RequestType" REALTIME.
انقر على PreconditionType.
realtime-update
realtime-transaction
تعديل ‫"RequestType" REST.
انقر على PreconditionType.
rest-update
rest-transaction
ListenerListen RequestType هو REALTIME listener-listen
ListenerUnlisten RequestType هو REALTIME listener-unlisten
OnDisconnectPut RequestType هو REALTIME on-disconnect-put
OnDisconnectUpdate RequestType هو REALTIME on-disconnect-update
OnDisconnectCancel RequestType هو REALTIME on-disconnect-cancel
RunOnDisconnect RequestType هو REALTIME run-on-disconnect