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.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ältConnect
keine Authentifizierungsinformationen. DasAuthenticationInfo
-Objekt enthält einen PlatzhalterprincipalEmail
mit 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.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.
- 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.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 PlatzhalterprincipalEmail
mit dem Wertaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
enthält. Bei mit Geheimnissen signierten JWTs enthältthirdPartyPrincipal
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 inresource
angegebenen Pfad.firebasedatabase.data.update
: Schreibzugriff auf den inresource
angegebenen Pfad.firebasedatabase.data.connect
: Platzhalter fürConnect
undDisconnect
. Für die Verbindung zu einer Realtime Database-Instanz ist keine Autorisierung erforderlich.firebasedatabase.data.cancel
: Wird fürUnlisten
undOnDisconnectCancel
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 |
---|---|
|
|
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 |