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

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

नोट

DATA_READ और DATA_WRITE कार्रवाइयों के लिए, protoPayload.metadata में मौजूद फ़ील्ड के बारे में ज़्यादा जानकारी, रेफ़रंस दस्तावेज़ में दी गई है.

सेवा का नाम

Firebase Realtime Database के ऑडिट लॉग देखने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, Logs Explorer पेज पर जाएं:

    Logs Explorer पर जाएं

  2. यहां दी गई क्वेरी को कॉपी करें और Logs Explorer के क्वेरी फ़ील्ड में चिपकाएं. इसके बाद, क्वेरी चलाएं पर क्लिक करें.

        protoPayload.serviceName="firebasedatabase.googleapis.com"
      

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

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

यहां दी गई सूची में, (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

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

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

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 ऑब्जेक्ट में, audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com का प्लेसहोल्डर principalEmail शामिल है.

  • Google की मदद से पुष्टि करना. Realtime Database स्टैंडर्ड Google Authentication का इस्तेमाल करने वाले ऑपरेशन, जैसे कि Firebase Admin SDK से मिलने वाला ट्रैफ़िक या Firebase Admin SDK स्टैंडर्ड OAuth टोकन से पुष्टि किए गए REST अनुरोधों में एक AuthenticationInfo ऑब्जेक्ट होता है. इसमें असली क्रेडेंशियल ईमेल होता है.

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

    • अगर तीसरे पक्ष की पुष्टि के लिए JSON Web Token (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 ऑब्जेक्ट होता है. इसमें audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com का प्लेसहोल्डर principalEmail होता है. सीक्रेट से साइन किए गए JWT के लिए, thirdPartyPrincipal में JWT हेडर और पेलोड शामिल होता है.

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

क्लाउड ऑडिट लॉग का इस्तेमाल करके, उन अनुरोधों की पहचान की जा सकती है जिन पर 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 Audit Logs को Realtime Database प्रोफ़ाइलर के नतीजों से जोड़ना

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

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

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

ऑडिट लॉगिंग ऑपरेशन का नाम
RealtimeDatabaseAuditMetadata में खास वैल्यू
प्रोफ़ाइलर ऑपरेशन का नाम
कनेक्ट करें RequestType की कीमत अब REALTIME है concurrent-connect
डिसकनेक्ट करें RequestType की कीमत अब REALTIME है concurrent-disconnect
पढ़ें RequestType की कीमत अब REALTIME है रीयलटाइम-रीड
पढ़ें RequestType की कीमत अब REST है rest-read
लिखें RequestType की कीमत अब REALTIME है रीयलटाइम-राइट
लिखें 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