इस दस्तावेज़ में, Firebase रीयलटाइम डेटाबेस के लिए ऑडिट किए गए तरीकों की सूची दी गई है. Google Cloud सेवाएं, ऑडिट लॉग जनरेट करती हैं. इनमें आपके Google Cloud संसाधनों में एडमिन और ऐक्सेस से जुड़ी गतिविधियों को रिकॉर्ड किया जाता है. क्लाउड ऑडिट लॉग के बारे में ज़्यादा जानने के लिए, यहां दिया गया लेख पढ़ें:
- ऑडिट लॉग के टाइप
- ऑडिट लॉग एंट्री का स्ट्रक्चर
- ऑडिट लॉग सेव करना और उन्हें रूट करना
- Cloud Logging की कीमत की खास जानकारी
- डेटा ऐक्सेस करने की गतिविधि के लिए ऑडिट लॉग चालू करना
नोट
DATA_READ और DATA_WRITE कार्रवाइयों के लिए, protoPayload.metadata में मौजूद फ़ील्ड के बारे में ज़्यादा जानकारी, रेफ़रंस दस्तावेज़ में दी गई है.
सेवा का नाम
Firebase Realtime Database के ऑडिट लॉग देखने के लिए, यह तरीका अपनाएं:
Google Cloud Console में, Logs Explorer पेज पर जाएं:
यहां दी गई क्वेरी को कॉपी करें और 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
| अनुमति का टाइप | तरीके |
|---|---|
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के लिए किया जाता है. पहले से अनुमति पा चुकी किसी कार्रवाई को रद्द करने या वापस लेने के लिए, किसी अतिरिक्त अनुमति की ज़रूरत नहीं होती.
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 |