इस दस्तावेज़ में, 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 प्रॉपर्टी पर निर्भर करती है.
जिन तरीकों के लिए, IAM की अनुमति के साथ type प्रॉपर्टी वैल्यू की ज़रूरत होती है वे DATA_READ, DATA_WRITE या ADMIN_READ डेटा ऐक्सेस ऑडिट लॉग जनरेट करते हैं.
जिन तरीकों के लिए, type प्रॉपर्टी वैल्यू के साथ IAM की अनुमति की ज़रूरत होती है वे 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 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_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 से मिलने वाले 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 टोकन शामिल होता है.
- अगर तीसरे पक्ष की पुष्टि के लिए JSON Web Token (JWT) का इस्तेमाल किया गया था, तो
पुष्टि करने की ज़रूरत नहीं है. 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 |