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:
- Arten 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.
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.
| 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 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_WRITEfirebasedatabase.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ä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 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 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 denprincipalEmail-Wertaudit-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 ordnungsgemäß 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 Geheimnissen 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 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 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 |
|---|---|
|
|
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 |
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 |