इस दस्तावेज़ में, Firebase रीयलटाइम डेटाबेस के लिए ऑडिट लॉगिंग के बारे में बताया गया है. Google Cloud सेवाएं, ऑडिट लॉग जनरेट करती हैं. इनमें आपके Google Cloud संसाधनों में एडमिन और ऐक्सेस से जुड़ी गतिविधियों को रिकॉर्ड किया जाता है. क्लाउड ऑडिट लॉग के बारे में ज़्यादा जानने के लिए, यहां दिया गया लेख पढ़ें:
- ऑडिट लॉग के टाइप
- ऑडिट लॉग एंट्री का स्ट्रक्चर
- ऑडिट लॉग सेव करना और उन्हें रूट करना
- Cloud Logging की कीमत की खास जानकारी
- डेटा ऐक्सेस करने की गतिविधि के लिए ऑडिट लॉग चालू करना
नोट
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 प्रॉपर्टी पर निर्भर करती है.
जिन तरीकों के लिए, type प्रॉपर्टी वैल्यू के साथ IAM की अनुमति की ज़रूरत होती है वे DATA_READ, DATA_WRITE या ADMIN_READ, डेटा ऐक्सेस ऑडिट लॉग जनरेट करते हैं.
ऐसे तरीके जिनके लिए IAM की अनुमति ज़रूरी होती है. साथ ही, type प्रॉपर्टी वैल्यू ADMIN_WRITE जनरेट करती है और एडमिन की गतिविधि के ऑडिट लॉग बनाती है.
| अनुमति का टाइप | तरीके |
|---|---|
ADMIN_READ |
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances |
ADMIN_WRITE |
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance |
DATA_READ |
google.firebase.database.v1.RealtimeDatabase.Connectgoogle.firebase.database.v1.RealtimeDatabase.Disconnectgoogle.firebase.database.v1.RealtimeDatabase.Listengoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectCancelgoogle.firebase.database.v1.RealtimeDatabase.Readgoogle.firebase.database.v1.RealtimeDatabase.Unlisten |
DATA_WRITE |
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPutgoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdategoogle.firebase.database.v1.RealtimeDatabase.RunOnDisconnectgoogle.firebase.database.v1.RealtimeDatabase.Updategoogle.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_WRITEfirebasedatabase.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 टोकन शामिल होता है.
- अगर तीसरे पक्ष की पुष्टि के लिए JSON Web Token (JWT) का इस्तेमाल किया गया था, तो
पुष्टि नहीं की गई. 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के लिए किया जाता है. पहले से अनुमति पा चुकी किसी कार्रवाई को रद्द करने या वापस लेने के लिए, अतिरिक्त अनुमति की ज़रूरत नहीं होती.
क्लाउड ऑडिट लॉग को 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 |