Firebase रीयल टाइम डेटाबेस के ऑडिट लॉगिंग

इस दस्तावेज़ में Firebase रीयल टाइम डेटाबेस के लिए ऑडिट लॉगिंग के बारे में बताया गया है. Google Cloud सेवाएं ऐसे ऑडिट लॉग जनरेट करें जो आपके Google Cloud संसाधनों में एडमिन और गतिविधियों को ऐक्सेस करते हैं. क्लाउड ऑडिट लॉग के बारे में ज़्यादा जानकारी के लिए, यह जानकारी देखें:

नोट

DATA_READ और DATA_WRITEऑपरेशन के लिए protoPayload.metadata में फ़ील्ड के बारे में ज़्यादा जानकारी पहचान दस्तावेज़ में उपलब्ध है.

सेवा का नाम

Firebase रीयल टाइम डेटाबेस के ऑडिट लॉग, firebasedatabase.googleapis.com सेवा के नाम का इस्तेमाल करते हैं. इस सेवा के लिए फ़िल्टर करें:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

अनुमति के टाइप के हिसाब से तरीके

हर आईएएम अनुमति की एक type प्रॉपर्टी होती है, जिसकी वैल्यू एक enum होती है जो इन चार वैल्यू में से कोई एक हो सकती है: ADMIN_READ, ADMIN_WRITE, DATA_READ या DATA_WRITE. किसी मेथड को कॉल करने पर, Firebase रीयल टाइम डेटाबेस एक ऑडिट लॉग जनरेट करता है. इसकी कैटगरी, मेथड को लागू करने के लिए ज़रूरी अनुमति की type प्रॉपर्टी पर निर्भर करती है. ऐसे तरीके जिनके लिए type प्रॉपर्टी वैल्यू के साथ IAM अनुमति की ज़रूरत होती है of DATA_READ, DATA_WRITE, या ADMIN_READ की आय डेटा ऐक्सेस ऑडिट लॉग. जिन तरीकों के लिए ADMIN_WRITE की type प्रॉपर्टी वैल्यू के साथ आईएएम की अनुमति की ज़रूरत होती है वे एडमिन गतिविधि के ऑडिट लॉग जनरेट करते हैं.

अनुमति किस तरह की है तरीके
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

एपीआई इंटरफ़ेस के ऑडिट लॉग

हर तरीके के लिए किस तरह की अनुमतियों का आकलन किया जाता है, इस बारे में जानकारी के लिए, Firebase रीयल टाइम डेटाबेस के लिए, Cloud Identity और ऐक्सेस मैनेजमेंट दस्तावेज़ देखें.

google.firebase.database.v1.RealtimeDatabase

नीचे दिए गए ऑडिट लॉग, उन तरीकों से जुड़े हैं जो इनसे जुड़े हैं 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

  • तरीका: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
  • ऑडिट लॉग का टाइप: डेटा ऐक्सेस
  • अनुमतियां:
    • firebasedatabase.data.cancel - DATA_READ
  • तरीका लंबे समय तक चलने वाला या स्ट्रीमिंग ऑपरेशन का होता है: नंबर
  • इस तरीके के लिए फ़िल्टर करें: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • तरीका: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
  • ऑडिट लॉग का टाइप: डेटा ऐक्सेस
  • अनुमतियां:
    • firebasedatabase.data.update - DATA_WRITE
  • यह तरीका लंबे समय तक चलने वाला या स्ट्रीमिंग ऑपरेशन है: नहीं.
  • इस तरीके के लिए फ़िल्टर करें: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • तरीका: 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

  • तरीका: google.firebase.database.v1.RealtimeDatabase.Unlisten
  • ऑडिट लॉग का टाइप: डेटा का ऐक्सेस
  • अनुमतियां:
    • firebasedatabase.data.cancel - DATA_READ
  • यह तरीका लंबे समय तक चलने वाला या स्ट्रीमिंग ऑपरेशन है: नहीं.
  • इस तरीके के लिए फ़िल्टर करें: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • तरीका: 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

  • तरीका: 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

  • तरीका: 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

  • तरीका: 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

  • तरीका: 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

  • तरीका: 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. Firebase Authentication का इस्तेमाल करने वाली Realtime Database कार्रवाइयों में एक AuthenticationInfo ऑब्जेक्ट है, जिसमें principalEmail वैल्यू है audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. कस्टम JWT बनाकर, पुष्टि करने का अपना समाधान लागू करने पर भी ऐसा ही होता है.

    • अगर तीसरे पक्ष की पुष्टि करने के लिए किसी JSON वेब टोकन (JWT) का इस्तेमाल किया गया था, तो thirdPartyPrincipal फ़ील्ड में टोकन का हेडर और पेलोड शामिल होता है. इसके लिए उदाहरण के लिए, Firebase Authentication की मदद से पुष्टि किए गए अनुरोधों के लिए ऑडिट लॉग उस अनुरोध के Firebase Authentication टोकन को शामिल करें.
  • कोई पुष्टि नहीं. Realtime Database ऑपरेशन में पुष्टि करने के लिए किसी भी तरीके का इस्तेमाल नहीं किया जाता. इनमें एक AuthenticationInfo ऑब्जेक्ट होता है, जिसमें audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com की principalEmail वैल्यू होती है. सुरक्षा से जुड़े सार्वजनिक नियमों वाला Realtime Database इंस्टेंस, ऐसे अनुरोधों को स्वीकार कर सकता है. हमारा सुझाव है कि सभी उपयोगकर्ता अपने डेटाबेस को सही तरीके से सुरक्षित रखें.

  • लेगसी सीक्रेट टोकन. लेगसी टोकन का इस्तेमाल करने वाले Realtime Database ऑपरेशन में एक AuthenticationInfo ऑब्जेक्ट होता है. इसमें audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com का प्लेसहोल्डर principalEmail होता है. पासवर्ड से हस्ताक्षर किए गए JWT के लिए, thirdPartyPrincipal में JWT हेडर और पेलोड शामिल होते हैं.

Firebase Security Rules के आकलन को ऑडिट करें

क्लाउड ऑडिट लॉग का इस्तेमाल, उन अनुरोधों की पहचान करने के लिए किया जा सकता है जो Rules बदलावों का असर हुआ.

AuthorizationInfo ऑब्जेक्ट में, authorization.permission इनमें से कोई एक हो सकता है:

  • firebasedatabase.data.get: यहां दिए गए पाथ पर पढ़ने का ऐक्सेस दिया गया है resource.
  • firebasedatabase.data.update: इसमें बताए गए पाथ पर दिया गया ऐक्सेस लिखें resource.
  • firebasedatabase.data.connect: Connect और Disconnect के लिए प्लेसहोल्डर. Realtime Database इंस्टेंस से कनेक्ट करने के लिए, अनुमति की ज़रूरत नहीं है.
  • firebasedatabase.data.cancel: Unlisten और OnDisconnectCancel के लिए इस्तेमाल किया जाता है. पहले से अनुमति वाली किसी कार्रवाई को रद्द करने या रद्द करने के लिए, अलग से अनुमति की ज़रूरत नहीं होती.

क्लाउड ऑडिट लॉग को Realtime Database प्रोफ़ाइलर नतीजों से जोड़ें

Realtime Database पर परफ़ॉर्मेंस का बारीकी से विश्लेषण करने के लिए, इनका इस्तेमाल किया जा सकता है इसके साथ संयोजन में Realtime Database प्रोफ़ाइलर Realtime Database ऑडिट लॉगिंग. हर टूल की अपनी-अपनी खूबियां हैं.

Cloud Audit Logging Realtime Database प्रोफ़ाइलर
  • ऑडिट में डेटाबेस का ऐक्सेस
  • सभी अनुरोधों को लगातार रिकॉर्ड करता है
  • पिछली अवधि के डेटा के लिए क्वेरी करने की अनुमति देता है
  • इसमें पुष्टि करने वाले टोकन की पूरी जानकारी शामिल है
  • इस्तेमाल के लिए शुल्क देना पड़ता है
  • इसका इस्तेमाल परफ़ॉर्मेंस का विश्लेषण करने के लिए किया जाता है
  • यह हॉटस्पॉट की पहचान करने और परफ़ॉर्मेंस को बेहतर बनाने के लिए मददगार टूल उपलब्ध कराता है ऑप्टिमाइज़ेशन
  • लिसनर-ब्रॉडकास्ट, को मेज़र किया जा सकता है जो डेटा के संभावित वॉल्यूम की वजह से, ऑडिट लॉग में उपलब्ध नहीं है
  • यह लाइटवाइट और रीयल-टाइम है. इसलिए, यह लाइव लोड टेस्टिंग के लिए अच्छा है. ऑडिट के लिए इस्तेमाल होने वाले लॉग की एंट्री दिखने में कुछ मिनट लग सकते हैं.

ऑडिट लॉग का कॉन्टेंट, प्रोफ़ाइलर मेट्रिक के हिसाब से होता है. जैसा कि नीचे दिखाया गया है.

ऑडिट लॉगिंग ऑपरेशन का नाम
RealtimeDatabaseAuditMetadata में विशेष मान
प्रोफ़ाइलर की कार्रवाई का नाम
कनेक्ट करें RequestType REALTIME है एक ही समय पर कनेक्ट करने की सुविधा
डिसकनेक्ट करें RequestType REALTIME है एक साथ कई डिवाइसों को डिसकनेक्ट करना
पढ़ें 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 देखें.
बाकी-अपडेट
बाकी लेन-देन
ListenerListen RequestType REALTIME है लिसनर-लिसन
लिसनर अनलिस्टन RequestType REALTIME है listener-unlisten
OnDisconnectPut RequestType REALTIME है ऑन-डिसकनेक्ट-पुट
OnDisconnectUpdate RequestType REALTIME है on-disconnect-update
ऑनडिसकनेक्ट रद्द करें RequestType REALTIME है on-disconnect-cancel
RunOnDisconnect RequestType REALTIME है run-on-disconnect