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

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

ملاحظات

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

اسم الخدمة

لعرض سجلّات تدقيق "قاعدة بيانات Firebase في الوقت الفعلي"، اتّبِع الخطوات التالية:

  1. في Google Cloud Console، انتقِل إلى صفحة Logs Explorer:

    الانتقال إلى "Logs Explorer"

  2. انسخ الاستعلام التالي والصِقه في حقل الاستعلام ضمن Logs Explorer، ثم انقر على تنفيذ الاستعلام.

        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 لتحديد الطلبات التي قد تتأثر بالتغييرات في Security 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 محلّل
  • مراجعة إذن الوصول إلى قواعد البيانات
  • تسجيل جميع الطلبات بشكل مستمر
  • تسمح بإجراء طلبات بحث بأثر رجعي
  • يحتوي على معلومات مفصّلة عن رمز المصادقة
  • تتحمّل تكلفة استخدام
  • تُستخدَم لتحليل الأداء
  • توفير أدوات مفيدة لتحديد نقاط الأداء الساخنة وبالتالي تحسين الأداء
  • يمكن قياس الاستماع إلى البث، وهو غير متاح في سجلّات التدقيق بسبب حجم البيانات المحتمل
  • خفيف الوزن وفي الوقت الفعلي، ما يجعله مناسبًا لاختبار التحميل المباشر. قد يستغرق ظهور إدخالات سجلّ التدقيق بضع دقائق.

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

اسم عملية تسجيل أحداث التدقيق القيم الخاصة في
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