Ten dokument opisuje logowanie kontrolne Bazy danych czasu rzeczywistego Firebase. Google Cloud usługa generować logi kontrolne rejestrujące działania administracyjne i dotyczące dostępu w zasobach Google Cloud. Więcej informacji o logach kontrolnych Cloud znajdziesz w tych artykułach:
- Typy dzienników kontrolnych
- Struktura wpisu w dzienniku kontrolnym
- Przechowywanie i kontrolowanie dzienników kontrolnych
- Podsumowanie cennika Cloud Logging
- Włączanie logów kontrolnych dostępu do danych
Uwagi
Dodatkowe informacje o polach protoPayload.metadata
dotyczących operacji DATA_READ
i DATA_WRITE
znajdziesz w dokumentacji referencyjnej.
Nazwa usługi
Logi kontrolne Bazy danych czasu rzeczywistego Firebase używają nazwy usługi firebasedatabase.googleapis.com
.
Filtruj według tej usługi:
protoPayload.serviceName="firebasedatabase.googleapis.com"
Metody według typu uprawnień
Każde uprawnienie IAM ma właściwość type
, której wartość jest wartością z enumeracji. Może to być jedna z 4 wartości: ADMIN_READ
, ADMIN_WRITE
, DATA_READ
lub DATA_WRITE
. Gdy wywołujesz metodę,
Baza danych czasu rzeczywistego Firebase generuje dziennik kontrolny, którego kategoria zależy od
Właściwość type
uprawnienia wymaganego do wykonania metody.
Metody, które wymagają uprawnień z wartością właściwości type
z DATA_READ
, DATA_WRITE
lub ADMIN_READ
wygeneruj
Logi kontrolne dostępu do danych.
Metody, które wymagają uprawnień IAM z wartością parametru type
ADMIN_WRITE
, generują dzienniki kontroli Aktywności administratora.
Typ uprawnienia | Metody |
---|---|
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 |
Logi kontrolne interfejsu API
Aby dowiedzieć się, jak i które uprawnienia są oceniane w przypadku poszczególnych metod, zapoznaj się z dokumentacją Cloud Identity and Access Management w Bazie danych czasu rzeczywistego Firebase.
google.firebase.database.v1.RealtimeDatabase
Te logi kontrolne są powiązane z metodami należącymi do:
google.firebase.database.v1.RealtimeDatabase
Connect
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Connect
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.connect - DATA_READ
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"
Disconnect
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Disconnect
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.connect - DATA_READ
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"
Listen
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Listen
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.get - DATA_READ
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"
OnDisconnectCancel
- Metoda:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.cancel - DATA_READ
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"
OnDisconnectPut
- Metoda:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.update - DATA_WRITE
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"
OnDisconnectUpdate
- Metoda:
google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.update - DATA_WRITE
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"
Read
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Read
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.get - DATA_READ
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"
RunOnDisconnect
- Metoda:
google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.update - DATA_WRITE
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"
Unlisten
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Unlisten
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.cancel - DATA_READ
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"
Update
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Update
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.get - DATA_WRITE
firebasedatabase.data.update - DATA_WRITE
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"
Write
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Write
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.update - DATA_WRITE
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
Te dzienniki kontrolne są powiązane z metodami należącymi do google.firebase.database.v1beta.RealtimeDatabaseService
.
CreateDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
- Typ dziennika kontrolnego: Aktywność administratora
- Uprawnienia:
firebasedatabase.instances.create - ADMIN_WRITE
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"
DeleteDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance
- Typ dziennika kontrolnego: Aktywność administratora
- Uprawnienia:
firebasedatabase.instances.delete - ADMIN_WRITE
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"
DisableDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance
- Typ dziennika kontrolnego: Aktywność administratora
- Uprawnienia:
firebasedatabase.instances.disable - ADMIN_WRITE
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"
GetDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.instances.get - ADMIN_READ
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"
ListDatabaseInstances
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.instances.list - ADMIN_READ
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj dla tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"
ReenableDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance
- Typ dziennika kontrolnego: Aktywność administratora
- Uprawnienia:
firebasedatabase.instances.reenable - ADMIN_WRITE
- Metoda to długotrwała operacja lub operacja strumieniowa: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"
UndeleteDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance
- Typ dziennika kontrolnego: Aktywność administratora
- Uprawnienia:
firebasedatabase.instances.undelete - ADMIN_WRITE
- Metoda jest długo trwającą lub przesyłaną transmisją:
Nr
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
Sprawdź informacje dotyczące uwierzytelniania
Wpisy w dzienniku kontrolnym zawierają informacje o tożsamości, która wykonała zarejestrowaną operację. Aby zidentyfikować wywołującego, sprawdź te pola w obiekcie AuditLog:
Nawiązywanie połączeń w czasie rzeczywistym. Wykonywane operacje: Realtime Database (
Connect
) nie loguje danych uwierzytelniania, bo Realtime Database uwierzytelnia się po nawiązano połączenie. DlategoConnect
nie ma danych uwierzytelniających. ObiektAuthenticationInfo
zawiera obiekt zastępczyprincipalEmail
o wartościaudit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
Uwierzytelnianie Google. Operacje Realtime Database, które korzystają ze standardowego uwierzytelniania Google, np. ruch z Firebase Admin SDK lub żądania REST uwierzytelnione za pomocą standardowego tokena OAuth, mają obiekt
AuthenticationInfo
zawierający rzeczywiste dane logowania (e-mail).Firebase Authentication. Operacje Realtime Database, które używają Firebase Authentication, mają obiekt
AuthenticationInfo
zawierający wartośćprincipalEmail
audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. To samo dotyczy sytuacji, w której wdrożysz własne rozwiązanie do uwierzytelniania, generując kod niestandardowe tokeny JWT.- Jeśli do uwierzytelniania przez zewnętrzną usługę użyto tokena internetowego JSON (JWT), pole
thirdPartyPrincipal
zawiera nagłówek i ładunek tokena. Dla: przykładowe logi kontrolne żądań uwierzytelnionych za pomocą Firebase Authentication dodaj token Firebase Authentication tego żądania.
- Jeśli do uwierzytelniania przez zewnętrzną usługę użyto tokena internetowego JSON (JWT), pole
Bez uwierzytelniania. Realtime Database operacji, które nie używają żadnych mają obiekt
AuthenticationInfo
zawierający element WartośćprincipalEmail
zaudit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
Takie żądania może spełniać instancja Realtime Database z otwartymi regułami zabezpieczeń. Zalecamy wszystkim użytkownikom odpowiednie zabezpieczenie baz danych.Starszy token obiektu tajnego. Operacje Realtime Database korzystające z starszych tokenów mają obiekt
AuthenticationInfo
, który zawiera element zastępczyprincipalEmail
obiektuaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. W przypadku tokena JWT podpisanego za pomocą sekretówthirdPartyPrincipal
zawiera nagłówki i ładunek tokena JWT.
Oceny audytowania Firebase Security Rules
Logi kontrolne Cloud można wykorzystać do identyfikowania żądań, które potencjalnie mogą Liczba zmian, na które ma wpływ Rules zmiany.
W obiekcie AuthorizationInfo authorization.permission
może mieć jedną z tych wartości:
firebasedatabase.data.get
: uprawnienia do odczytu przyznane w ścieżce określonej wresource
firebasedatabase.data.update
: przyznanie uprawnień do zapisu w ścieżce określonej wresource
.firebasedatabase.data.connect
: obiekt zastępczy dlaConnect
iDisconnect
. Autoryzacja nie jest wymagana do nawiązania połączenia z instancją Realtime Database.firebasedatabase.data.cancel
: używane w celachUnlisten
iOnDisconnectCancel
. Anulowanie lub anulowanie wcześniej autoryzowanej operacji nie wymaga żadnych dodatkowych czynności autoryzacji.
Skoreluj logi kontrolne Cloud z wynikami narzędzia do profilowania Realtime Database
Możesz przeprowadzić szczegółową analizę skuteczności kampanii Realtime Database za pomocą Program profilujący Realtime Database w połączeniu z Realtime Database log kontrolny. Każde narzędzie ma swoje mocne strony.
Cloud Audit Logging | Program profilujący Realtime Database |
---|---|
|
|
Zawartość logu kontrolnego odpowiada wskaźnikom programu profilującego, jak pokazano poniżej.
Nazwa operacji w logu kontrolnym | Wartości specjalne w RealtimeDatabaseAuditMetadata |
Nazwa operacji w Profilerze |
---|---|---|
Połącz | RequestType to REALTIME |
połączenie równoczesne |
Odłącz | RequestType to REALTIME |
równoczesne rozłączanie |
Odczyt | RequestType to REALTIME |
odczyt w czasie rzeczywistym |
Odczyt | RequestType to REST |
przeczytane w spoczynku |
Zapis | RequestType to REALTIME |
zapis w czasie rzeczywistym |
Zapis | RequestType to REST |
rest-write |
Zaktualizuj | RequestType – występuje: REALTIME .
Sprawdź PreconditionType . |
aktualizacja w czasie rzeczywistym transakcja w czasie rzeczywistym |
Zaktualizuj | RequestType – występuje: REST .
Sprawdź PreconditionType . |
rest-update rest-transaction |
ListenerListen (Słuchaj) | RequestType to REALTIME |
Słuchaj |
Nie odsłuchuj | RequestType to REALTIME |
listener-unlisten |
OnDisconnectPut | RequestType to REALTIME |
on-disconnect-put |
OnOdłączUpdate | RequestType to REALTIME |
on-disconnect-update |
OnDisconnectCancel | RequestType to REALTIME |
anulowanie przy rozłączeniu |
RunOnDisconnect | RequestType to REALTIME |
run-on-disconnect |