במאמר הזה מוסבר על רישום ביומני ביקורת במסגרת Firebase Realtime Database. שירותי Google Cloud יוצרים יומני ביקורת שבהם מתועדים אירועי גישה למשאבי Google Cloud ופעילויות אדמין שנעשות בהם. מידע נוסף על יומני הביקורת של Cloud זמין במאמרים הבאים:
- הסוגים של יומני הביקורת
- המבנה של רשומות ביומני הביקורת
- שמירה וניתוב של יומני ביקורת
- מחירון מקוצר של Cloud Logging
- הפעלת יומני ביקורת של גישה לנתונים
הערות
מידע נוסף על השדות ב-protoPayload.metadata
עבור פעולות DATA_READ
ו-DATA_WRITE
זמין במאמרי העזרה.
שם השירות
יומני הביקורת של Firebase Realtime Database משתמשים בשם השירות firebasedatabase.googleapis.com
.
אפשר לסנן לפי השירות הזה:
protoPayload.serviceName="firebasedatabase.googleapis.com"
קודי Method לפי סוג ההרשאה
לכל הרשאה ב-IAM יש מאפיין type
עם enum שיכול להיות אחד מארבעת הערכים הבאים: ADMIN_READ
, ADMIN_WRITE
, DATA_READ
או DATA_WRITE
. כשקוראים ל-method, במסגרת מסד הנתונים בזמן אמת של Firebase נוצר יומן ביקורת שהקטגוריה שלו תלויה במאפיין type
של ההרשאה שנדרשת לביצוע ה-method.
ה-methods שבשבילן צריך הרשאה ב-IAM עם הערכים DATA_READ
, DATA_WRITE
או ADMIN_READ
במאפיין type
יוצרות יומני ביקורת של Data Access.
ה-methods שבשבילן צריך הרשאה ב-IAM עם הערכים ADMIN_WRITE
במאפיין type
יוצרות יומני ביקורת של Admin Activity.
סוג ההרשאה | Methods |
---|---|
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
במאמר בנושא ניהול הזהויות והרשאות הגישה (IAM) ל-Firebase Realtime Database מוסבר איך מתבצעת הבדיקה של ההרשאות לכל method, ואילו הרשאות נבדקות.
google.firebase.database.v1.RealtimeDatabase
יומני הביקורת הבאים משויכים ל-methods ששייכות ל-google.firebase.database.v1.RealtimeDatabase
.
Connect
- Method:
google.firebase.database.v1.RealtimeDatabase.Connect
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.connect - DATA_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"
Disconnect
- Method:
google.firebase.database.v1.RealtimeDatabase.Disconnect
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.connect - DATA_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"
Listen
- Method:
google.firebase.database.v1.RealtimeDatabase.Listen
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.get - DATA_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"
OnDisconnectCancel
- Method:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.cancel - DATA_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"
OnDisconnectPut
- Method:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.update - DATA_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"
OnDisconnectUpdate
- Method:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.update - DATA_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"
Read
- Method:
google.firebase.database.v1.RealtimeDatabase.Read
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.get - DATA_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"
RunOnDisconnect
- Method:
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.update - DATA_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"
Unlisten
- Method:
google.firebase.database.v1.RealtimeDatabase.Unlisten
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.cancel - DATA_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
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
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"
Write
- Method:
google.firebase.database.v1.RealtimeDatabase.Write
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.data.update - DATA_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
יומני הביקורת הבאים משויכים ל-methods ששייכות ל-google.firebase.database.v1beta.RealtimeDatabaseService
.
CreateDatabaseInstance
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
- סוג יומן הביקורת: פעילות אדמין
- הרשאות:
firebasedatabase.instances.create - ADMIN_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"
DeleteDatabaseInstance
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
- סוג יומן הביקורת: פעילות אדמין
- הרשאות:
firebasedatabase.instances.delete - ADMIN_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"
DisableDatabaseInstance
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
- סוג יומן הביקורת: פעילות אדמין
- הרשאות:
firebasedatabase.instances.disable - ADMIN_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"
GetDatabaseInstance
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.instances.get - ADMIN_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"
ListDatabaseInstances
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
- סוג יומן הביקורת: גישה לנתונים
- הרשאות:
firebasedatabase.instances.list - ADMIN_READ
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"
ReenableDatabaseInstance
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
- סוג יומן הביקורת: פעילות אדמין
- הרשאות:
firebasedatabase.instances.reenable - ADMIN_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"
UndeleteDatabaseInstance
- Method:
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
- סוג יומן הביקורת: פעילות אדמין
- הרשאות:
firebasedatabase.instances.undelete - ADMIN_WRITE
- ה-method היא פעולה ממושכת או פעולת סטרימינג:
לא.
- סינון לפי ה-method:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
ביקורת של פרטי האימות
הרשומות ביומן הביקורת כוללות מידע על הזהות שביצעה את הפעולה שנרשמה ביומן. כדי לזהות את מי ששלח את הבקשה, אפשר לעיין בשדות הבאים באובייקט AuditLog:
יצירת חיבורים בזמן אמת. בפעולות של Realtime Database
Connect
לא מתבצעת רישום של נתוני אימות, כי Realtime Database מבצע אימות אחרי שנוצר חיבור. לכן,Connect
לא מכיל פרטי אימות. האובייקטAuthenticationInfo
מכיל את placeholderprincipalEmail
של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 של הבקשה.
- אם נעשה שימוש באסימון אינטרנט מסוג JSON (JWT) לאימות של צד שלישי, השדה
ללא אימות. פעולות Realtime Database שלא משתמשות באימות כלשהו כוללות אובייקט
AuthenticationInfo
שמכיל ערךprincipalEmail
שלaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. יכול להיות שמופע Realtime Database עם כללי אבטחה פתוחים יאשר בקשות כאלה. מומלץ שכל המשתמשים יאבטחו את מסדי הנתונים שלהם בצורה נכונה.טוקנים של סודות מדור קודם. לפעולות Realtime Database שמשתמשות באסימוני גישה מדור קודם יש אובייקט
AuthenticationInfo
שמכיל את ערך placeholderprincipalEmail
שלaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. ב-JWT חתום באמצעות סוד,thirdPartyPrincipal
מכיל את הכותרות ואת המטען הייעודי (payload) של ה-JWT.
ביקורת של הערכות 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 profiler בשילוב עם רישום ביומן הביקורת של Realtime Database. לכל כלי יש את היתרונות שלו.
Cloud Audit Logging | Realtime Database profiler |
---|---|
|
|
התוכן של יומן הביקורת תואם למדדים של כלי הפרופילר, כמו שמוצג בהמשך.
שם הפעולה של רישום ביומן הביקורת | ערכים מיוחדים ב-RealtimeDatabaseAuditMetadata |
שם הפעולה של כלי הפרופיל |
---|---|---|
התחברות | 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 |