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:
- Typen 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.
Filter für diesen Dienst:
protoPayload.serviceName="firebasedatabase.googleapis.com"
Methoden nach Berechtigungstyp
Jede IAM-Berechtigung hat ein type-Attribut, das ein „enum“ ist und 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 Cloud IAM-Dokumentation 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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_WRITEfirebasedatabase.data.update - DATA_WRITE
- Methode ist ein Vorgang mit langer Ausführungszeit oder ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 ein Streamingvorgang:
Nein.
- 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 protokollierte Aktion ausgeführt hat. Die Identität des Aufrufers einer Anfrage lässt sich anhand der folgenden Felder im AuditLog-Objekt ermitteln:
Echtzeitverbindungen herstellen: Bei Realtime Database-
Connect-Vorgängen werden keine Authentifizierungsdaten protokolliert, da Realtime Database die Authentifizierung nach dem Herstellen einer Verbindung durchführt. Daher enthältConnectkeine Authentifizierungsinformationen. DasAuthenticationInfo-Objekt enthält einen PlatzhalterprincipalEmailmit dem Wertaudit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.Google-Authentifizierung Realtime Database-Vorgänge, die die standardmäßige Google-Authentifizierung verwenden, z. B. Traffic von Firebase Admin SDK oder REST-Anfragen, die mit einem standardmäßigen 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 einenprincipalEmail-Wert vonaudit-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 einenprincipalEmail-Wert vonaudit-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 richtig zu schützen.Legacy-Tokens für Secrets: Realtime Database-Vorgänge mit Legacy-Tokens haben ein
AuthenticationInfo-Objekt, das einen PlatzhalterprincipalEmailmit dem Wertaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.comenthält. Bei mit Secrets signierten JWTs enthältthirdPartyPrincipaldie 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 Security Rules-Änderungen betroffen sind.
Im AuthorizationInfo-Objekt kann authorization.permission einer der folgenden Werte sein:
firebasedatabase.data.get: Lesezugriff auf den inresourceangegebenen Pfad.firebasedatabase.data.update: Schreibzugriff auf den inresourceangegebenen Pfad.firebasedatabase.data.connect: Platzhalter fürConnectundDisconnect. Für die Verbindung zu einer Realtime Database-Instanz ist keine Autorisierung erforderlich.firebasedatabase.data.cancel: Wird fürUnlistenundOnDisconnectCancelverwendet. Für den Widerruf oder die Kündigung 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 inRealtimeDatabaseAuditMetadata |
Name des Profiler-Vorgangs |
|---|---|---|
| Verbinden | RequestType ist REALTIME |
concurrent-connect |
| Verbindung trennen | RequestType ist REALTIME |
concurrent-disconnect |
| Lesen | RequestType ist REALTIME |
Echtzeit-Lesevorgang |
| Lesen | RequestType ist REST |
rest-read |
| Schreiben | RequestType ist REALTIME |
realtime-write |
| Schreiben | RequestType ist REST |
rest-write |
| Aktualisieren | RequestType ist REALTIME.
PreconditionType prüfen. |
Echtzeit-Update Echtzeittransaktion |
| Aktualisieren | RequestType ist REST.
PreconditionType prüfen. |
rest-update rest-transaction |
| ListenerListen | RequestType ist REALTIME |
listener-listen |
| ListenerUnlisten | RequestType ist REALTIME |
listener-unlisten |
| OnDisconnectPut | RequestType ist REALTIME |
on-disconnect-put |
| OnDisconnectUpdate | RequestType ist REALTIME |
on-disconnect-update |
| OnDisconnectCancel | RequestType ist REALTIME |
on-disconnect-cancel |
| RunOnDisconnect | RequestType ist REALTIME |
run-on-disconnect |