רישום ביומן הביקורת של מסד הנתונים בזמן אמת ב-Firebase

במסמך הזה מתוארים יומני הביקורת של מסד הנתונים בזמן אמת ב-Firebase. שירותי Google Cloud יוצרים יומני ביקורת שמתעדים פעילויות ניהוליות ופעילויות גישה במשאבי Google Cloud. למידע נוסף על יומני הביקורת של Cloud, אפשר לעיין במאמרים הבאים:

הערות

מידע נוסף על השדות ב-protoPayload.metadata עבור פעולות DATA_READ ו-DATA_WRITE זמין במאמרי העזרה.

שם השירות

יומני הביקורת של Firebase GT Database משתמשים בשם השירות firebasedatabase.googleapis.com. סינון לפי השירות הזה:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

שיטות לפי סוג ההרשאה

לכל הרשאת IAM יש מאפיין type שהערך שלו הוא טיפוסים בני מנייה (enum) יכול להיות אחד מתוך ארבעה ערכים: ADMIN_READ, ADMIN_WRITE, DATA_READ או DATA_WRITE. כשאתם קוראים ל-method, מערכת Firebase Realtime Database יוצרת יומן ביקורת שהקטגוריה שלו תלויה במאפיין type של ההרשאה שנדרשת לביצוע ה-method. שיטות שדורשות הרשאת IAM עם ערך הנכס type של DATA_READ,‏ DATA_WRITE או ADMIN_READ יוצרות יומני ביקורת של Data Access. שיטות שנדרשת להן הרשאת IAM עם ערך המאפיין type מתוך ADMIN_WRITE יוצרים יומני הביקורת של פעילות אדמין.

סוג ההרשאה שיטות
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

יומני הביקורת של ממשק ה-API

למידע על האופן וההרשאות שנבדקים בכל method, אפשר לעיין במסמכי העזרה של Cloud Identity and Access Management על מסד הנתונים בזמן אמת ב-Firebase.

google.firebase.database.v1.RealtimeDatabase

יומני הביקורת הבאים משויכים ל-methods ששייכות ל- google.firebase.database.v1.RealtimeDatabase

Connect

  • שיטה: google.firebase.database.v1.RealtimeDatabase.Connect
  • סוג יומן הביקורת: גישה לנתונים
  • הרשאות:
    • firebasedatabase.data.connect - DATA_READ
  • השיטה היא פעולה ממושכת או סטרימינג: מס'
  • סינון לפי השיטה הזו: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • שיטה: google.firebase.database.v1.RealtimeDatabase.Disconnect
  • סוג יומן הביקורת: גישה לנתונים
  • הרשאות:
    • firebasedatabase.data.connect - DATA_READ
  • השיטה היא פעולה ממושכת או פעולת סטרימינג: לא.
  • סינון לפי השיטה הזו: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • שיטה: 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

  • שיטה: google.firebase.database.v1.RealtimeDatabase.Read
  • סוג יומן הביקורת: גישה לנתונים
  • הרשאות:
    • firebasedatabase.data.get - DATA_READ
  • השיטה היא פעולה ממושכת או פעולת סטרימינג: לא.
  • סינון לפי השיטה הזו: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • שיטה: 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

  • שיטה: 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

  • שיטה: 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

  • שיטה: 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 מכיל placeholder 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 כולל את הכותרת והמטען הייעודי (Payload) של האסימון. לדוגמה, יומני הביקורת של בקשות שאומתו באמצעות Firebase Authentication כוללים את אסימון ה-Firebase Authentication של הבקשה.
  • ללא אימות פעולות Realtime Database שלא משתמשות בהן באימות יש אובייקט AuthenticationInfo שמכיל ערך principalEmail של audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com מכונה Realtime Database עם כללי אבטחה פתוחים עשויה לתת בקשות כאלה. רביעי להמליץ לכל המשתמשים לאבטח את מסדי הנתונים שלהם כראוי.

  • אסימוני סודות מדור קודם. פעולות Realtime Database באמצעות אסימונים מדור קודם יש אובייקט AuthenticationInfo שמכיל placeholder principalEmail מתוך audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. ב-JWT בחתימה של סודות, thirdPartyPrincipal מכיל את כותרות ה-JWT ו מטען ייעודי (payload).

בדיקות הערכה של Firebase Security Rules

אפשר להשתמש ביומני הביקורת של Cloud כדי לזהות בקשות שעלולות הושפעו מ-Rules שינויים.

באובייקט AuthorizationInfo, הערך של authorization.permission יכול להיות אחד מהערכים הבאים:

  • firebasedatabase.data.get: ניתנה גישת קריאה בנתיב שצוין resource.
  • firebasedatabase.data.update: הרשאת כתיבה ניתנה בנתיב שצוין ב-resource.
  • firebasedatabase.data.connect: placeholder ל-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
שם הפעולה של הכלי לניתוח ביצועים
חיבור RequestType הוא REALTIME חיבור בו-זמני
ניתוק RequestType הוא REALTIME ניתוק בו-זמנית
קריאה RequestType הוא REALTIME קריאה בזמן אמת
קריאה RequestType הוא REST קריאה למנוחה
כתיבה RequestType הוא REALTIME כתיבה בזמן אמת
כתיבה RequestType הוא REST כתיבה למנוחה
עדכון RequestType היא REALTIME.
מסמנים את התיבה PreconditionType.
עדכון בזמן אמת
עסקה בזמן אמת
עדכון RequestType היא REST.
מסמנים את התיבה PreconditionType.
rest-update
rest-transaction
האזנה RequestType הוא REALTIME listener-listen
ListenerUnlisten RequestType הוא REALTIME Listener-unlisten
OnDisconnectPut RequestType הוא REALTIME on-disconnect-put
OnDisconnectUpdate RequestType הוא REALTIME עדכון בניתוק
ביטול הניתוק RequestType הוא REALTIME ביטול חיבור
RunOnConnect RequestType הוא REALTIME run-on-disconnect