Logowanie kontrolne Bazy danych czasu rzeczywistego Firebase

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:

Uwagi

Dodatkowe informacje o polach protoPayload.metadata dotyczących operacji DATA_READ i DATA_WRITEznajdziesz 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. Dlatego Connect nie ma danych uwierzytelniających. Obiekt AuthenticationInfo zawiera obiekt zastępczy principalEmail o wartości audit-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.
  • Bez uwierzytelniania. Realtime Database operacji, które nie używają żadnych mają obiekt AuthenticationInfo zawierający element Wartość principalEmail z audit-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ępczy principalEmail obiektu audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. W przypadku tokena JWT podpisanego za pomocą sekretów thirdPartyPrincipal 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 w resource
  • firebasedatabase.data.update: przyznanie uprawnień do zapisu w ścieżce określonej w resource.
  • firebasedatabase.data.connect: obiekt zastępczy dla ConnectDisconnect. Autoryzacja nie jest wymagana do nawiązania połączenia z instancją Realtime Database.
  • firebasedatabase.data.cancel: używane w celach Unlisten i OnDisconnectCancel. 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
  • Kontroluje dostęp do baz danych
  • Stale rejestruje wszystkie żądania
  • Umożliwia wykonywanie zapytań wstecznych
  • Zawiera szczegółowe informacje o tokenie uwierzytelniania
  • Wiąże się z kosztem wykorzystania
  • Służy do analizy wydajności
  • Udostępnia przydatne narzędzia do identyfikowania punktów krytycznych i optymalizowania wydajności
  • Możesz mierzyć audytorium transmisji, która jest niedostępna w dziennikach kontrolnych ze względu na potencjalną objętość danych.
  • Jest lekki i działa w czasie rzeczywistym, co ułatwia testowanie obciążenia w czasie rzeczywistym. Pojawienie się wpisów w dzienniku audytu może zająć kilka minut.

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