Audit-Logging in Firebase Realtime Database

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:

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.

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 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_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 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ä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 schützen.

  • Legacy-Tokens für Secrets: Realtime Database-Vorgänge mit Legacy-Tokens haben ein AuthenticationInfo-Objekt, das einen 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.
  • 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 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
  • Zugriff auf Datenbanken prüfen
  • Erfasst kontinuierlich alle Anfragen
  • Ermöglicht die rückwirkende Abfrage
  • Enthält detaillierte Informationen zum Auth-Token
  • 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, was aufgrund des potenziellen Datenvolumens nicht in Audit-Logs verfügbar ist.
  • 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
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