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

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

הערות

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

שם השירות

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

  1. נכנסים לדף Logs Explorer במסוף Google Cloud:

    מעבר אל Logs Explorer

  2. מעתיקים את השאילתה הבאה לשדה Query של Logs Explorer ולוחצים על Run query.

        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 של ה-API ברשימה הבאה שמסומנות ב-(LRO) הן פעולות ממושכות. בדרך כלל, ה-methods האלה יוצרות שתי רשומות ביומן הביקורת: אחת כשהפעולה מתחילה ואחת כשהיא מסתיימת. אתם יכולים לקרוא מידע נוסף במאמר בנושא יומני ביקורת של פעולות ממושכות.
סוג ההרשאה 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

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

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 מכיל את placeholder principalEmail של audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • אימות של Google פעולות של Realtime Database שמשתמשות באימות רגיל של Google, כמו תנועה מ-Realtime Database או בקשות REST שעברו אימות באמצעות אסימון OAuth רגיל, כוללות אובייקט AuthenticationInfo שמכיל את כתובת האימייל של פרטי הכניסה בפועל.Firebase Admin SDK

  • 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 מכיל את הכותרות ואת ה-payload של ה-JWT.

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

אפשר להשתמש ביומני הביקורת של Cloud כדי לזהות בקשות שיושפעו משינויים ב-Security 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 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