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

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

नोट

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

सेवा का नाम

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

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

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

हर IAM अनुमति में एक type प्रॉपर्टी होती है. इसकी वैल्यू एक इनम होती है, जो चार वैल्यू में से कोई एक हो सकती है: ADMIN_READ, ADMIN_WRITE, DATA_READ या DATA_WRITE. किसी तरीके को कॉल करने पर, Firebase Realtime Database एक ऑडिट लॉग जनरेट करता है. इसकी कैटगरी, उस तरीके को पूरा करने के लिए ज़रूरी अनुमति की type प्रॉपर्टी पर निर्भर करती है. जिन तरीकों के लिए, IAM की अनुमति के साथ type प्रॉपर्टी वैल्यू की ज़रूरत होती है वे DATA_READ, DATA_WRITE या ADMIN_READ डेटा ऐक्सेस ऑडिट लॉग जनरेट करते हैं. जिन तरीकों के लिए, type प्रॉपर्टी वैल्यू के साथ IAM की अनुमति की ज़रूरत होती है वे 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 Realtime Database के लिए 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 से मिलने वाले REST अनुरोध जिनकी पुष्टि स्टैंडर्ड OAuth टोकन से की गई है, में एक AuthenticationInfo ऑब्जेक्ट होता है. इसमें असली क्रेडेंशियल ईमेल होता है.

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

    • अगर तीसरे पक्ष की पुष्टि के लिए JSON Web Token (JWT) का इस्तेमाल किया गया था, तो thirdPartyPrincipal फ़ील्ड में टोकन का हेडर और पेलोड शामिल होता है. उदाहरण के लिए, Firebase Authentication से पुष्टि किए गए अनुरोधों के ऑडिट लॉग में, उस अनुरोध का Firebase Authentication टोकन शामिल होता है.
  • पुष्टि करने की ज़रूरत नहीं है. Realtime Database कार्रवाइयों में किसी भी तरह के authentication का इस्तेमाल नहीं किया जाता. इनमें एक 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 के लिए आकलन

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