Logowanie kontrolne Bazy danych czasu rzeczywistego Firebase

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:

Uwagi

Więcej informacji o polach w protoPayload.metadata w przypadku operacji DATA_READDATA_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 typeADMIN_WRITE generate, generują logi kontrolne aktywności administratora.

Metody interfejsu API na poniższej liście oznaczone symbolem (LRO) to długo trwające operacje (LRO). Te metody zwykle generują 2 wpisy w dzienniku kontrolnym: jeden na początku operacji, a drugi na jej końcu. Więcej informacji znajdziesz w artykule Dzienniki kontrolne operacji długotrwałych.
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. Dlatego Connect nie zawiera informacji o uwierzytelnianiu. Obiekt AuthenticationInfo zawiera symbol 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 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.
  • 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ępczy principalEmail o wartości audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com. W przypadku tokena JWT podpisanego za pomocą klucza tajnego thirdPartyPrincipal 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 parametrze resource.
  • firebasedatabase.data.update: przyznano uprawnienia do zapisu w ścieżce określonej w resource.
  • firebasedatabase.data.connect: obiekt zastępczy dla ConnectDisconnect. Do połączenia z instancją Realtime Database nie jest wymagana autoryzacja.
  • firebasedatabase.data.cancel: używane w przypadku UnlistenOnDisconnectCancel. 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
  • Sprawdzanie dostępu do baz danych
  • Ciągłe rejestrowanie wszystkich żądań
  • Umożliwia wysyłanie zapytań z mocą wsteczną
  • Zawiera szczegółowe informacje o tokenie uwierzytelniania
  • Wiąże się z opłatą za korzystanie
  • Służy do analizy skuteczności
  • Udostępnia przydatne narzędzia do identyfikowania hotspotów, a tym samym optymalizowania wydajności.
  • Może mierzyć słuchaczy transmisji, co nie jest dostępne w logach kontrolnych ze względu na potencjalną ilość danych.
  • Jest lekki i działa w czasie rzeczywistym, dzięki czemu dobrze sprawdza się w testach obciążeniowych na żywo. Wpisy w dzienniku audytu mogą pojawić się po kilku minutach.

Zawartość dziennika audytu odpowiada danym profilera w sposób pokazany poniżej.

Nazwa operacji logowania kontrolnego Wartości specjalne w
RealtimeDatabaseAuditMetadata
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