Audit-Logging in Firebase Realtime Database

In diesem Dokument wird das Audit-Logging für Firebase Realtime Database beschrieben. Google Cloud Dienstleistung Audit-Logs generieren, in denen Administrator- und Zugriffsaktivitäten in Ihren Google Cloud-Ressourcen aufgezeichnet werden. Weitere Informationen zu Cloud-Audit-Logs finden Sie hier:

Hinweise

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

Dienstname

Für Firebase Realtime Database-Audit-Logs 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 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.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

Weitere Informationen darüber, wie und welche Berechtigungen für die einzelnen Methoden ausgewertet werden, finden Sie in der Cloud Identity and Access Management-Dokumentation für 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, die den aufgezeichneten Vorgang 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 nach dem Herstellen einer Verbindung authentifiziert wird. Daher hat Connect keine Authentifizierungsinformationen. Das AuthenticationInfo-Objekt enthält den Platzhalter principalEmail audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com.

  • Google-Authentifizierung Realtime Database-Vorgänge, die die standardmäßige Google-Version verwenden Authentifizierung, z. B. Traffic von Firebase Admin SDK- oder REST-Anfragen mit einem standardmäßigen OAuth-Token authentifiziert, ein AuthenticationInfo-Objekt haben, das die tatsächlichen Anmeldedaten enthält E-Mail.

  • Firebase Authentication. Realtime Database-Vorgänge, die Firebase Authentication verwenden, haben Ein AuthenticationInfo-Objekt, das einen principalEmail-Wert von audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com Dasselbe gilt, wenn Sie Ihre eigene Authentifizierungslösung durch Prägung benutzerdefinierten JWTs.

    • Wurde ein JSON Web Token (JWT) für die Authentifizierung von Drittanbietern verwendet, enthält das thirdPartyPrincipal-Feld den Header und die Nutzlast des Tokens. Für Beispiel: Audit-Logs für mit Firebase Authentication authentifizierte Anfragen Fügen Sie das Firebase Authentication-Token dieser Anfrage ein.
  • Keine Authentifizierung. Realtime Database-Vorgänge, die keine verwenden Authentifizierung haben ein AuthenticationInfo-Objekt, das ein Wert principalEmail von audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com Eine Realtime Database-Instanz mit offenen Sicherheitsregeln kann solche Anfragen gewähren. Mi. empfehlen allen Nutzenden, ihre Datenbanken ordnungsgemäß zu sichern.

  • Legacy-Secrets-Tokens: Realtime Database-Vorgänge mit alten Tokens enthalten ein AuthenticationInfo-Objekt mit einem PlatzhalterprincipalEmail von audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. Bei Secrets-signierten JWTs enthält thirdPartyPrincipal die JWT-Header und Payload.

Firebase Security Rules Bewertungen prüfen

Cloud-Audit-Logs können verwendet werden, um Anfragen zu identifizieren, die möglicherweise von Rules Änderungen betroffen.

Im AuthorizationInfo-Objekt kann authorization.permission einen der folgenden Werte haben:

  • firebasedatabase.data.get: Lesezugriff für den in angegebenen Pfad gewährten Pfad resource.
  • firebasedatabase.data.update: Schreibzugriff wurde über den in angegebenen Pfad gewährt. resource.
  • firebasedatabase.data.connect: Platzhalter für Connect und Disconnect. Es ist keine Autorisierung erforderlich, um eine Verbindung zu einer Realtime Database-Instanz herzustellen.
  • firebasedatabase.data.cancel: Wird für Unlisten und OnDisconnectCancel verwendet. Zum Widerrufen oder Abbrechen eines zuvor autorisierten Vorgangs sind keine weiteren Autorisierung.

Cloud-Audit-Logs mit Realtime Database-Profiler-Ergebnissen korrelieren

Mit dem Realtime Database-Profiler in Kombination mit dem Realtime Database-Audit-Logging können Sie eine detaillierte Leistungsanalyse von Realtime Database durchführen. Jedes Tool hat seine Stärken.

Cloud-Audit-Logging Realtime Database Profiler
  • Prüft den Zugriff auf Datenbanken
  • Erfasst kontinuierlich alle Anfragen
  • Ermöglicht retrospektive Abfragen
  • Enthält detaillierte Informationen zum Auth-Token
  • Verursacht Nutzungskosten
  • Wird für die Leistungsanalyse verwendet
  • Bietet nützliche Tools zur Identifizierung von Hotspots und damit zur Leistung Optimierung
  • Kann Listener-Broadcast die aufgrund eines potenziellen Datenvolumens in Audit-Logs nicht verfügbar ist
  • Leichtgewichtig und in Echtzeit, daher gut für Live-Lasttests geeignet. Prüfung Es kann einige Minuten dauern, bis Logeinträge angezeigt werden.

Der Inhalt des Audit-Logs entspricht den Profiler-Messwerten, die unten dargestellt sind.

Name des Audit-Logging-Vorgangs Besondere Werte in
RealtimeDatabaseAuditMetadata
Name des Profiler-Vorgangs
Verbinden RequestType ist REALTIME gleichzeitige Verbindung
Verbindung trennen RequestType ist REALTIME gleichzeitiges Aufheben der Verbindung
Lesen RequestType ist REALTIME in Echtzeit lesen
Lesen RequestType ist REST Ausruhen
Schreiben RequestType ist REALTIME realtime-write
Schreiben RequestType ist REST rest-write
Aktualisieren RequestType ist REALTIME.
Klicken Sie auf das Kästchen PreconditionType.
realtime-update
realtime-transaction
Aktualisieren RequestType ist REST.
Klicken Sie auf das Kästchen PreconditionType.
rest-update
rest-transaction
Zuhören RequestType ist REALTIME listener-listen
Zuhören (Listener) RequestType ist REALTIME listener-unlisten
BeiTrennungPut RequestType ist REALTIME on-disconnect-put
Aktualisierung bei Verbindungstrennung RequestType ist REALTIME on-disconnect-update
OnTrennenAbbrechen RequestType ist REALTIME on-disconnect-cancel
RunOnDisconnect RequestType ist REALTIME run-on-disconnect