W tym dokumencie opisujemy logowanie kontrolne w przypadku Bazy danych czasu rzeczywistego Firebase. Usługi Google Cloud generują logi kontrolne, które rejestrują działania administracyjne i dostęp do Twoich zasobów Google Cloud. Więcej informacji o logach kontrolnych Cloud znajdziesz w tych artykułach:
- Rodzaje dzienników kontrolnych
- Struktura wpisu w dzienniku kontrolnym
- Przechowywanie i przekazywanie dzienników kontrolnych
- Podsumowanie cen Cloud Logging
- Włączanie logów kontrolnych dostępu do danych
Uwagi
Więcej informacji o polach w protoPayload.metadata
w przypadku operacji DATA_READ
i DATA_WRITE
znajdziesz w dokumentacji.
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 wyliczeniem, które może przyjmować jedną z 4 wartości: ADMIN_READ
, ADMIN_WRITE
, DATA_READ
lub DATA_WRITE
. Gdy wywołasz metodę, Baza danych czasu rzeczywistego Firebase wygeneruje dziennik audytu, którego kategoria zależy od właściwości type
uprawnień wymaganych do wykonania tej metody.
Metody, które wymagają uprawnienia Cloud IAM z wartością właściwości type
równą DATA_READ
, DATA_WRITE
lub ADMIN_READ
, generują logi kontrolne dostępu do danych.
Metody, które wymagają uprawnień IAM z wartością właściwości type
ADMIN_WRITE
generate, generują logi kontrolne aktywności administratora.
Typ uprawnień | 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
Informacje o tym, jak i które uprawnienia są oceniane w przypadku poszczególnych metod, znajdziesz w dokumentacji usługi Cloud Identity and Access Management dotyczącej Bazy danych czasu rzeczywistego Firebase.
google.firebase.database.v1.RealtimeDatabase
Z metodami należącymi do google.firebase.database.v1.RealtimeDatabase
powiązane są te dzienniki kontrolne:
Connect
- Metoda:
google.firebase.database.v1.RealtimeDatabase.Connect
- Typ dziennika kontrolnego: Dostęp do danych
- Uprawnienia:
firebasedatabase.data.connect - DATA_READ
- Metoda jest długotrwałą lub strumieniową operacją: 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ługotrwałą lub strumieniową operacją: nie.
- Filtruj według 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ługotrwałą lub strumieniową operacją: nie.
- Filtruj według 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ługotrwałą lub strumieniową operacją: nie.
- 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 jest długotrwałą lub strumieniową operacją: nie.
- Filtruj według 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 jest długotrwałą lub strumieniową operacją: nie.
- Filtruj według 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 jest długotrwałą lub strumieniową operacją: 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ługotrwałą lub strumieniową operacją: nie.
- 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ługotrwałą lub strumieniową operacją: nie.
- 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ługotrwałą lub strumieniową operacją: nie.
- 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 jest długotrwałą lub strumieniową operacją: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"
google.firebase.database.v1beta.RealtimeDatabaseService
Z metodami należącymi do google.firebase.database.v1beta.RealtimeDatabaseService
powiązane są te dzienniki kontrolne:
CreateDatabaseInstance
- Metoda:
google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance
- Typ dziennika kontrolnego: Aktywność administratora
- Uprawnienia:
firebasedatabase.instances.create - ADMIN_WRITE
- Metoda jest długotrwałą lub strumieniową operacją: nie.
- 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 jest długotrwałą lub strumieniową operacją: nie.
- Filtruj według 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ługotrwałą lub strumieniową operacją: nie.
- Filtruj według 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 jest długotrwałą lub strumieniową operacją: 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 jest długotrwałą lub strumieniową operacją: nie.
- Filtruj według 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 jest długotrwałą lub strumieniową operacją: 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ługotrwałą lub strumieniową operacją: nie.
- Filtruj według tej metody:
protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"
Sprawdzanie informacji o uwierzytelnianiu
Wpisy w dzienniku kontrolnym zawierają informacje o tożsamości, która wykonała zarejestrowaną operację. Aby zidentyfikować podmiot wywołujący żądanie, sprawdź te pola w obiekcie AuditLog:
Nawiązywanie połączeń w czasie rzeczywistym. Operacje Realtime Database
Connect
nie rejestrują danych uwierzytelniania, ponieważ Realtime Database uwierzytelnia się po nawiązaniu połączenia. DlategoConnect
nie zawiera informacji o uwierzytelnianiu. ObiektAuthenticationInfo
zawiera symbol 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 uwierzytelniane za pomocą standardowego tokena OAuth, mają obiekt
AuthenticationInfo
, który zawiera rzeczywiste dane logowania, np. adres e-mail.Firebase Authentication. Operacje Realtime Database, które używają Firebase Authentication, mają obiekt
AuthenticationInfo
zawierający wartośćprincipalEmail
równąaudit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. To samo dotyczy sytuacji, gdy wdrażasz własne rozwiązanie do uwierzytelniania, generując niestandardowe tokeny JWT.- Jeśli do uwierzytelniania zewnętrznego użyto tokena internetowego JSON (JWT), pole
thirdPartyPrincipal
zawiera nagłówek i ładunek tokena. Na przykład logi kontrolne żądań uwierzytelnionych za pomocą parametru Firebase Authentication zawierają token Firebase Authentication tego żądania.
- Jeśli do uwierzytelniania zewnętrznego użyto tokena internetowego JSON (JWT), pole
Brak uwierzytelniania. Operacje Realtime Database, które nie używają żadnego uwierzytelniania, mają obiekt
AuthenticationInfo
zawierający wartośćprincipalEmail
audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
.Realtime DatabaseInstancja Realtime Database z otwartymi regułami bezpieczeństwa może przyznawać takie żądania. Zalecamy wszystkim użytkownikom odpowiednie zabezpieczenie baz danych.Starsze tokeny obiektów tajnych Operacje Realtime Database korzystające z tokenów starszego typu zawierają obiekt
AuthenticationInfo
, który zawiera symbol zastępczyprincipalEmail
o wartościaudit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com
. W przypadku tokena JWT podpisanego za pomocą klucza tajnegothirdPartyPrincipal
zawiera nagłówki i ładunek tokena JWT.
Kontrola Firebase Security Rules ocen
Dzienniki kontrolne Cloud Audit Logs mogą służyć do identyfikowania żądań, na które mogą mieć wpływ zmiany Rules.
W obiekcie AuthorizationInfo parametr authorization.permission
może mieć jedną z tych wartości:
firebasedatabase.data.get
: dostęp do odczytu przyznany w ścieżce określonej w parametrzeresource
.firebasedatabase.data.update
: przyznano uprawnienia do zapisu w ścieżce określonej wresource
.firebasedatabase.data.connect
: obiekt zastępczy dlaConnect
iDisconnect
. Do połączenia z instancją Realtime Database nie jest wymagana autoryzacja.firebasedatabase.data.cancel
: używane w przypadkuUnlisten
iOnDisconnectCancel
. Cofnięcie lub anulowanie wcześniej autoryzowanej operacji nie wymaga dodatkowej autoryzacji.
Korelacja logów kontrolnych Cloud z wynikami profilowania Realtime Database
Szczegółową analizę wydajności Realtime Database możesz przeprowadzić za pomocą Realtime Database profilera w połączeniu z Realtime Database dziennikiem kontrolnym. Każde narzędzie ma swoje zalety.
Cloud Audit Logging | Realtime Database profiler |
---|---|
|
|
Zawartość dziennika audytu odpowiada danym profilera w sposób pokazany poniżej.
Nazwa operacji logowania kontrolnego | Wartości specjalne wRealtimeDatabaseAuditMetadata |
Nazwa operacji Profilera |
---|---|---|
Połącz | RequestType to REALTIME |
concurrent-connect |
Odłącz | RequestType to REALTIME |
concurrent-disconnect |
Odczyt | RequestType to REALTIME |
realtime-read |
Odczyt | RequestType to REST |
rest-read |
Zapis | RequestType to REALTIME |
zapis w czasie rzeczywistym |
Zapis | RequestType to REST |
rest-write |
Zaktualizuj | Obecny stan „RequestType ”: REALTIME .
Czek PreconditionType . |
realtime-update realtime-transaction |
Zaktualizuj | Obecny stan „RequestType ”: REST .
Czek PreconditionType . |
rest-update rest-transaction |
ListenerListen | RequestType to REALTIME |
listener-listen |
ListenerUnlisten | RequestType to REALTIME |
listener-unlisten |
OnDisconnectPut | RequestType to REALTIME |
on-disconnect-put |
OnDisconnectUpdate | RequestType to REALTIME |
on-disconnect-update |
OnDisconnectCancel | RequestType to REALTIME |
on-disconnect-cancel |
RunOnDisconnect | RequestType to REALTIME |
run-on-disconnect |