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. 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.

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 Start und einen beim Ende 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 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 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 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.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 den principalEmail-Wert 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 ordnungsgemäß 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 Geheimnissen 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 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 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 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 Zuhörer-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 Echtzeitlesevorgang
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.
Echtzeitaktualisierung
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