Audit-Logging in Firebase Realtime Database

In diesem Dokument sind die geprüften Methoden für Firebase Realtime Database aufgeführt. 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:

Hinweise

Weitere Informationen zu Feldern in protoPayload.metadata für DATA_READ- und DATA_WRITE-Vorgänge finden Sie in der Referenzdokumentation.

Dienstname

So rufen Sie die Audit-Logs der Firebase Realtime Database auf:

  1. Rufen Sie in der Google Cloud Console die Seite Logs Explorer auf:

    Zu Logs Explorer wechseln

  2. Kopieren Sie die folgende Abfrage und fügen Sie sie in das Feld Abfrage von Logs Explorer ein. Klicken Sie dann auf Abfrage ausführen.

        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.

API-Methoden in der folgenden Liste, die mit (LRO) gekennzeichnet sind, sind Vorgänge mit langer Ausführungszeit. Diese Methoden generieren in der Regel zwei Audit-Log-Einträge: einen beim Starten und einen beim Beenden des Vorgangs. Weitere Informationen finden Sie unter Audit-Logs für Vorgänge mit langer Ausführungszeit.
Berechtigungstyp Methoden
ADMIN_READ google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
ADMIN_WRITE google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
DATA_READ google.firebase.database.v1.RealtimeDatabase.Connect
google.firebase.database.v1.RealtimeDatabase.Disconnect
google.firebase.database.v1.RealtimeDatabase.Listen
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
google.firebase.database.v1.RealtimeDatabase.Read
google.firebase.database.v1.RealtimeDatabase.Unlisten
DATA_WRITE google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
google.firebase.database.v1.RealtimeDatabase.Update
google.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 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_WRITE
    • 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.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, die den protokollierten Vorgang ausgeführt hat. Die Identität des Aufrufers einer Anfrage finden Sie in den folgenden Feldern des AuditLog-Objekts:

  • 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ält Connect keine Authentifizierungsinformationen. Das AuthenticationInfo-Objekt enthält einen Platzhalter principalEmail mit dem Wert audit-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 einen principalEmail-Wert von audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com enthä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 thirdPartyPrincipal den 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.
  • Keine Authentifizierung. Realtime Database-Vorgänge, für die keine Authentifizierung verwendet wird, haben ein AuthenticationInfo-Objekt, das einen principalEmail-Wert von audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com enthält. Eine Realtime Database-Instanz mit offenen Sicherheitsregeln kann solche Anfragen zulassen. Wir empfehlen allen Nutzern, ihre Datenbanken richtig zu sichern.

  • Legacy-Tokens für Secrets: Realtime Database-Vorgänge mit Legacy-Tokens haben ein AuthenticationInfo-Objekt, das den Platzhalter principalEmail mit dem Wert audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com enthält. Bei mit Secrets signierten JWTs enthält thirdPartyPrincipal die 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 in resource angegebenen Pfad.
  • firebasedatabase.data.update: Schreibzugriff auf den in resource angegebenen Pfad gewährt.
  • firebasedatabase.data.connect: Platzhalter für Connect und Disconnect. Für die Verbindung zu einer Realtime Database-Instanz ist keine Autorisierung erforderlich.
  • firebasedatabase.data.cancel: Wird für Unlisten und OnDisconnectCancel verwendet. 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
  • Zugriff auf Datenbanken prüfen
  • Erfasst kontinuierlich alle Anfragen
  • Ermöglicht rückwirkende Abfragen
  • Enthält detaillierte Informationen zum Authentifizierungstoken
  • Es fallen Nutzungskosten an.
  • Wird für die Leistungsanalyse verwendet
  • Bietet nützliche Tools zur Identifizierung von Hotspots und damit zur Leistungsoptimierung
  • Sie können Listener-Broadcasts messen, die aufgrund des potenziellen Datenvolumens nicht in Audit-Logs verfügbar sind.
  • Es ist leichtgewichtig und bietet Echtzeitfunktionen, was es für Live-Lasttests geeignet macht. Es kann einige Minuten dauern, bis Audit-Logeinträge angezeigt werden.

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 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
Echtzeit-Transaktion
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