In diesem Dokument wird das Audit-Logging für die Firebase Realtime Database beschrieben. Google Cloud-Dienste generieren Audit-Logs, in denen Verwaltungs- und Zugriffsaktivitäten in Ihren Google Cloud-Ressourcen aufgezeichnet werden. Weitere Informationen zu Cloud-Audit-Logs finden Sie unter den folgenden Links:
- Arten von Audit-Logs
- Struktur von Audit-Logeinträgen
- Audit-Logs speichern und weiterleiten
- Preisübersicht für Cloud Logging
- Audit-Logs zum Datenzugriff aktivieren
Hinweise
Weitere Informationen zu Feldern in protoPayload.metadata für DATA_READ- und DATA_WRITE-Vorgänge finden Sie in der Referenzdokumentation.
Dienstname
Für Audit-Logs der Firebase Realtime Database wird der Dienstname firebasedatabase.googleapis.com verwendet.
Nach diesem Dienst filtern: 
protoPayload.serviceName="firebasedatabase.googleapis.com"
Methoden nach Berechtigungstyp
 Jede IAM-Berechtigung hat ein type-Attribut, dessen Wert ein Enum ist, der einen der folgenden vier Werte haben kann: ADMIN_READ, ADMIN_WRITE, DATA_READ oder DATA_WRITE. Wenn Sie eine Methode aufrufen, generiert die Firebase Realtime Database ein Audit-Log, dessen Kategorie vom Attribut type der Berechtigung abhängt, die für die Ausführung der Methode erforderlich ist.
Methoden, die eine IAM-Berechtigung mit dem type-Attributwert DATA_READ, DATA_WRITE oder ADMIN_READ erfordern, generieren Audit-Logs zum Datenzugriff.
Methoden, die eine IAM-Berechtigung mit dem type-Attributwert ADMIN_WRITE erfordern, generieren Audit-Logs zur Administratoraktivität.
| Berechtigungstyp | Methoden | 
|---|---|
| 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 | 
Audit-Logs der API-Schnittstelle
Informationen dazu, wie und welche Berechtigungen für die einzelnen Methoden evaluiert werden, finden Sie in der Dokumentation zu Cloud Identity and Access Management für die Firebase Realtime Database.
google.firebase.database.v1.RealtimeDatabase
Die folgenden Audit-Logs sind Methoden zugeordnet, die zu google.firebase.database.v1.RealtimeDatabase gehören.
Connect
- Methode: google.firebase.database.v1.RealtimeDatabase.Connect
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.connect - DATA_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"
Disconnect
- Methode: google.firebase.database.v1.RealtimeDatabase.Disconnect
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.connect - DATA_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"
Listen
- Methode: google.firebase.database.v1.RealtimeDatabase.Listen
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.get - DATA_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"
OnDisconnectCancel
- Methode: google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.cancel - DATA_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"
OnDisconnectPut
- Methode: google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.update - DATA_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"
OnDisconnectUpdate
- Methode: google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.update - DATA_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"
Read
- Methode: google.firebase.database.v1.RealtimeDatabase.Read
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.get - DATA_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"
RunOnDisconnect
- Methode: google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.update - DATA_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"
Unlisten
- Methode: google.firebase.database.v1.RealtimeDatabase.Unlisten
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.cancel - DATA_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"
Update
- Methode: google.firebase.database.v1.RealtimeDatabase.Update
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.get - DATA_WRITE
- firebasedatabase.data.update - DATA_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"
Write
- Methode: google.firebase.database.v1.RealtimeDatabase.Write
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.data.update - DATA_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
Die folgenden Audit-Logs sind Methoden zugeordnet, die zu google.firebase.database.v1beta.RealtimeDatabaseService gehören.
CreateDatabaseInstance
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
- Audit-Logtyp: Administratoraktivität
- Berechtigungen: - firebasedatabase.instances.create - ADMIN_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"
DeleteDatabaseInstance
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
- Audit-Logtyp: Administratoraktivität
- Berechtigungen: - firebasedatabase.instances.delete - ADMIN_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"
DisableDatabaseInstance
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
- Audit-Logtyp: Administratoraktivität
- Berechtigungen: - firebasedatabase.instances.disable - ADMIN_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"
GetDatabaseInstance
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.instances.get - ADMIN_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"
ListDatabaseInstances
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
- Audit-Logtyp: Datenzugriff
- Berechtigungen: - firebasedatabase.instances.list - ADMIN_READ
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"
ReenableDatabaseInstance
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
- Audit-Logtyp: Administratoraktivität
- Berechtigungen: - firebasedatabase.instances.reenable - ADMIN_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"
UndeleteDatabaseInstance
- Methode: google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
- Audit-Logtyp: Administratoraktivität
- Berechtigungen: - firebasedatabase.instances.undelete - ADMIN_WRITE
 
- Methode ist ein Vorgang mit langer Ausführungszeit oder Streamingvorgang: Nr.
- Filter für diese Methode: protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
Authentifizierungsinformationen prüfen
Audit-Logeinträge enthalten Informationen zur Identität des Nutzers, der die erfasste Aktion ausgeführt hat. Die Identität des Aufrufers einer Anfrage finden Sie in den folgenden Feldern des AuditLog-Objekts:
- Echtzeitverbindungen herstellen: Bei Realtime Database- und - Connect-Vorgängen werden keine Authentifizierungsdaten protokolliert, da Realtime Database die Authentifizierung nach dem Herstellen einer Verbindung durchführt. Daher enthält- Connectkeine Authentifizierungsinformationen. Das- AuthenticationInfo-Objekt enthält einen Platzhalter- principalEmailmit dem Wert- audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.
- Google-Authentifizierung Realtime Database-Vorgänge, die die Standardauthentifizierung von Google verwenden, z. B. Traffic von Firebase Admin SDK oder REST-Anfragen, die mit einem Standard-OAuth-Token authentifiziert werden, haben ein - AuthenticationInfo-Objekt, das die E-Mail-Adresse der tatsächlichen Anmeldedaten enthält.
- Firebase Authentication-Realtime Database-Vorgänge, bei denen Firebase Authentication verwendet wird, haben ein - AuthenticationInfo-Objekt, das einen- principalEmail-Wert von- audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comenthält. Das gilt auch, wenn Sie Ihre eigene Authentifizierungslösung implementieren, indem Sie benutzerdefinierte JWTs erstellen.- Wurde ein JSON Web Token (JWT) für die Authentifizierung von Drittanbietern verwendet, enthält das Feld thirdPartyPrincipalden Header und die Nutzlast des Tokens. Beispiel: Audit-Logs für Anfragen, die mit Firebase Authentication authentifiziert wurden, enthalten das Firebase Authentication-Token dieser Anfrage.
 
- Wurde ein JSON Web Token (JWT) für die Authentifizierung von Drittanbietern verwendet, enthält das Feld 
- Keine Authentifizierung Realtime Database-Vorgänge, für die keine Authentifizierung verwendet wird, haben ein - AuthenticationInfo-Objekt, das den- principalEmail-Wert- audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comenthält. Eine Realtime Database-Instanz mit offenen Sicherheitsregeln kann solche Anfragen zulassen. Wir empfehlen allen Nutzern, ihre Datenbanken ordnungsgemäß zu schützen.
- Legacy-Tokens für Secrets: Realtime Database-Vorgänge mit Legacy-Tokens haben ein - AuthenticationInfo-Objekt, das einen Platzhalter- principalEmailmit dem Wert- audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comenthält. Bei mit Geheimnissen signierten JWTs enthält- thirdPartyPrincipaldie JWT-Header und die Nutzlast.
Firebase Security Rules-Bewertungen prüfen
Cloud-Audit-Logs können verwendet werden, um Anfragen zu identifizieren, die möglicherweise von Rules-Änderungen betroffen sind.
Im AuthorizationInfo-Objekt kann authorization.permission einer der folgenden Werte sein:
- firebasedatabase.data.get: Lesezugriff auf den in- resourceangegebenen Pfad.
- firebasedatabase.data.update: Schreibzugriff auf den in- resourceangegebenen Pfad.
- firebasedatabase.data.connect: Platzhalter für- Connectund- Disconnect. Für die Verbindung zu einer Realtime Database-Instanz ist keine Autorisierung erforderlich.
- firebasedatabase.data.cancel: Wird für- Unlistenund- OnDisconnectCancelverwendet. Für das Widerrufen oder Abbrechen eines zuvor autorisierten Vorgangs ist keine zusätzliche Autorisierung erforderlich.
Cloud-Audit-Logs mit Realtime Database-Profiler-Ergebnissen korrelieren
Sie können detaillierte Leistungsanalysen für Realtime Database mit dem Realtime Database-Profiler in Kombination mit dem Realtime Database-Audit-Logging durchführen. Jedes Tool hat seine Stärken.
| Cloud-Audit-Logging | Realtime Database Profiler | 
|---|---|
| 
 | 
 | 
Der Inhalt von Audit-Logs entspricht den Profiler-Messwerten, wie unten dargestellt.
| Name des Audit-Logging-Vorgangs | Spezielle Werte in RealtimeDatabaseAuditMetadata | Name des Profiler-Vorgangs | 
|---|---|---|
| Verbinden | RequestTypeistREALTIME | concurrent-connect | 
| Verbindung trennen | RequestTypeistREALTIME | concurrent-disconnect | 
| Lesen | RequestTypeistREALTIME | Echtzeitlesevorgang | 
| Lesen | RequestTypeistREST | rest-read | 
| Schreiben | RequestTypeistREALTIME | realtime-write | 
| Schreiben | RequestTypeistREST | rest-write | 
| Aktualisieren | RequestTypeistREALTIME.PreconditionTypeprüfen. | Echtzeitaktualisierung Echtzeittransaktion | 
| Aktualisieren | RequestTypeistREST.PreconditionTypeprüfen. | rest-update rest-transaction | 
| ListenerListen | RequestTypeistREALTIME | listener-listen | 
| ListenerUnlisten | RequestTypeistREALTIME | listener-unlisten | 
| OnDisconnectPut | RequestTypeistREALTIME | on-disconnect-put | 
| OnDisconnectUpdate | RequestTypeistREALTIME | on-disconnect-update | 
| OnDisconnectCancel | RequestTypeistREALTIME | on-disconnect-cancel | 
| RunOnDisconnect | RequestTypeistREALTIME | run-on-disconnect |