Rejestrowanie audytu bazy danych Firebase Realtime

Na tej stronie opisano dzienniki audytu utworzone przez Firebase w ramach dzienników audytu Cloud .

Przegląd

Usługi Firebase zapisują dzienniki audytu, które pomogą Ci odpowiedzieć na pytania: „Kto, co, gdzie i kiedy zrobił?”. Są to dzienniki audytu Cloud dostarczane w ramach projektu Google Cloud połączonego z Twoim projektem Firebase .

Każdy z Twoich projektów Firebase zawiera tylko dzienniki kontroli zasobów znajdujących się bezpośrednio w projekcie.

Aby zapoznać się z ogólnym omówieniem dzienników audytu Cloud, zobacz Omówienie dzienników audytu Cloud . Aby uzyskać głębsze zrozumienie formatu dziennika audytu, zobacz Omówienie dzienników audytu .

Dostępne dzienniki audytu

W bazie danych Firebase Realtime Database dostępne są następujące typy dzienników kontrolnych:

  • Dzienniki kontroli aktywności administratora

    Obejmuje operacje „zapisu administratora”, które zapisują metadane lub informacje konfiguracyjne.

    Nie można wyłączyć dzienników kontroli aktywności administratora.

  • Dzienniki kontroli dostępu do danych

    Obejmuje operacje „odczytu administratora”, które odczytują metadane lub informacje konfiguracyjne. Obejmuje także operacje „odczytu danych” i „zapisu danych”, które umożliwiają odczyt lub zapis danych dostarczonych przez użytkownika.

    Aby otrzymywać dzienniki kontroli dostępu do danych, musisz je jawnie włączyć.

Pełniejszy opis typów dzienników audytu można znaleźć w sekcji Typy dzienników audytu .

Audytowane operacje

Poniżej podsumowano, które operacje interfejsu API odpowiadają poszczególnym typom dziennika audytu w bazie danych Firebase Realtime Database:

Kategoria dzienników audytu Operacje na bazie danych czasu rzeczywistego Firebase
Dzienniki kontroli aktywności administratora (ADMIN_WRITE)
  • Utwórz instancję bazy danych
  • Usuń instancję bazy danych
  • Wyłącz instancję bazy danych
  • Ponownie włącz instancję bazy danych
Dzienniki kontroli dostępu do danych (ADMIN_READ)
  • Pobierz instancję bazy danych
  • Lista instancji bazy danych
Dzienniki kontroli dostępu do danych (DATA_READ lub DATA_WRITE)
  • Łączyć
  • Rozłączyć się
  • RunOnDisconnect
  • Aktualizacja (z warunkiem wstępnym) (dla operacji transakcyjnych). Zobacz powiązane Precondition i WriteMetadata .
Dzienniki kontroli dostępu do danych (DATA_READ)
Dzienniki kontroli dostępu do danych (DATA_WRITE)
  • Pisać
  • Aktualizacja. Zobacz powiązane WriteMetadata .
  • OnDisconnectPut
  • OnDisconnectUpdate. Zobacz powiązane WriteMetadata .
  • WłączRozłączAnuluj

Informacje o uwierzytelnianiu audytu

Wpisy dziennika inspekcji zawierają informacje o tożsamości, która wykonała zarejestrowaną operację. Aby zidentyfikować osobę wywołującą żądanie, zobacz następujące pola w obiekcie AuditLog:

  • Nawiązywanie połączeń w czasie rzeczywistym. Operacje programu Realtime Database Connect nie rejestrują danych uwierzytelniających, ponieważ baza danych Realtime Database uwierzytelnia się po nawiązaniu połączenia. Dlatego Connect nie ma informacji uwierzytelniających. Obiekt AuthenticationInfo zawiera zastępczy adres principalEmail adresu audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com .

  • Uwierzytelnianie Google. Operacje bazy danych w czasie rzeczywistym, które korzystają ze standardowego uwierzytelniania Google, takie jak ruch z pakietu Firebase Admin SDK lub żądania REST uwierzytelniane za pomocą standardowego tokena OAuth , mają obiekt AuthenticationInfo zawierający rzeczywisty adres e-mail z danymi uwierzytelniającymi.

  • Uwierzytelnianie Firebase. Operacje bazy danych w czasie rzeczywistym korzystające z uwierzytelniania Firebase mają obiekt AuthenticationInfo , który zawiera wartość principalEmail audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . To samo dotyczy sytuacji, gdy wdrażasz własne rozwiązanie uwierzytelniające, tworząc niestandardowe JWT.

    • Jeśli do uwierzytelniania innej firmy użyto tokenu internetowego JSON (JWT), pole thirdPartyPrincipal zawiera nagłówek i ładunek tokenu. Na przykład dzienniki kontroli żądań uwierzytelnionych za pomocą uwierzytelniania Firebase obejmują token uwierzytelniania Firebase tego żądania.
  • Brak autoryzacji. Operacje bazy danych czasu rzeczywistego, które nie korzystają z żadnego uwierzytelniania, mają obiekt AuthenticationInfo , który zawiera wartość principalEmail audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com Instancja bazy danych czasu rzeczywistego z otwartymi regułami bezpieczeństwa może akceptować takie żądania . Zalecamy wszystkim użytkownikom prawidłowe zabezpieczenie swoich baz danych.

  • Starsze tokeny sekretów. Operacje bazy danych w czasie rzeczywistym przy użyciu starszych tokenów mają obiekt AuthenticationInfo , który zawiera zastępczy adres principalEmail o adresie audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . W przypadku JWT podpisanego kluczem tajnym, thirdPartyPrincipal zawiera nagłówki JWT i ładunek.

Kontroluj oceny reguł bezpieczeństwa Firebase

Dzienniki audytu Cloud mogą służyć do identyfikowania żądań, na które potencjalnie będą miały wpływ zmiany Reguł.

W obiekcie AuthorizationInfo , authorization.permission może mieć jedną z następujących wartości:

  • firebasedatabase.data.get : Dostęp do odczytu przyznany w ścieżce określonej w resource .
  • firebasedatabase.data.update : Dostęp do zapisu przyznany w ścieżce określonej w resource .
  • firebasedatabase.data.connect : Symbol zastępczy dla Connect i Disconnect . Aby połączyć się z instancją bazy danych Realtime Database, nie jest wymagana żadna autoryzacja.
  • firebasedatabase.data.cancel : Używane do funkcji Unlisten i OnDisconnectCancel . Odwołanie lub anulowanie wcześniej autoryzowanej operacji nie wymaga dodatkowej autoryzacji.

Koreluj dzienniki audytu Cloud z wynikami profilera bazy danych Realtime Database

Możesz przeprowadzić dogłębną analizę wydajności bazy danych Realtime Database, korzystając z profilera bazy danych Realtime w połączeniu z rejestrowaniem audytu bazy danych Realtime. Każde narzędzie ma swoje mocne strony.

Rejestrowanie audytu w chmurze Profiler bazy danych w czasie rzeczywistym
  • Audyty dostępu do baz danych
  • Stale przechwytuje wszystkie żądania
  • Umożliwia wykonywanie zapytań retrospektywnych
  • Zawiera szczegółowe informacje o tokenie autoryzacji
  • Ponosi koszty użytkowania
  • Używany do analizy wydajności
  • Zapewnia przydatne narzędzia do identyfikacji hotspotów, a tym samym optymalizacji wydajności
  • Może mierzyć transmisję nasłuchującą , która nie jest dostępna w dziennikach audytu ze względu na potencjalną ilość danych
  • Lekki i działający w czasie rzeczywistym, dzięki czemu nadaje się do testowania obciążenia na żywo. Pojawienie się wpisów dziennika inspekcji może zająć kilka minut.

Zawartość dziennika inspekcji odpowiada metrykom profilera, jak pokazano poniżej.

Nazwa operacji rejestrowania audytu Wartości specjalne w
RealtimeDatabaseAuditMetadata
Nazwa operacji profilera
Łączyć RequestType to REALTIME połączenie współbieżne
Rozłączyć się RequestType to REALTIME jednoczesne rozłączenie
Czytać RequestType to REALTIME odczyt w czasie rzeczywistym
Czytać RequestType to REST przeczytaj resztę
Pisać RequestType to REALTIME pisz w czasie rzeczywistym
Pisać RequestType to REST odpoczywaj-pisz
Aktualizacja RequestType to REALTIME .
Sprawdź PreconditionType .
aktualizacja w czasie rzeczywistym
transakcja w czasie rzeczywistym
Aktualizacja RequestType to REST .
Sprawdź PreconditionType .
aktualizacja reszta
transakcja reszta
SłuchaczSłuchaj RequestType to REALTIME słuchacz-słuchaj
SłuchaczNie słuchaj RequestType to REALTIME słuchacz-niesłuchaj
OnDisconnectPut RequestType to REALTIME przy rozłączaniu
OnDisconnectUpdate RequestType to REALTIME aktualizacja po rozłączeniu
WłączRozłączAnuluj RequestType to REALTIME on-rozłącz-anuluj
RunOnDisconnect RequestType to REALTIME działanie po rozłączeniu

Format dziennika audytu

Wpisy dziennika kontroli obejmują następujące obiekty:

  • Sam wpis dziennika będący obiektem typu LogEntry . Przydatne pola obejmują:

    • logName zawiera identyfikator zasobu i typ dziennika inspekcji.
    • resource zawiera cel kontrolowanej operacji.
    • timestamp zawiera czas kontrolowanej operacji.
    • protoPayload zawiera kontrolowane informacje.
  • Dane rejestrowania audytu, które są obiektem AuditLog przechowywanym w polu protoPayload wpisu dziennika.

  • Opcjonalne informacje kontrolne specyficzne dla usługi, które są obiektem specyficznym dla usługi. W przypadku starszych integracji obiekt ten jest przechowywany w polu serviceData obiektu AuditLog ; nowsze integracje korzystają z pola metadata .

Informacje na temat innych pól w tych obiektach oraz sposobu ich interpretacji można znaleźć w artykule Opis dzienników kontrolnych .

Dodatkowe informacje o polach w protoPayload.metadata dla operacji DATA_READ i DATA_WRITE dostępne są w dokumentacji referencyjnej .

Nazwa dziennika

Nazwy zasobów dzienników audytu Cloud wskazują projekt Firebase lub inny podmiot Google Cloud będący właścicielem dzienników audytu oraz to, czy dziennik zawiera dane dotyczące działań administratora, dostępu do danych, odmowy zasad lub rejestrowania zdarzeń systemowych. Na przykład poniżej przedstawiono nazwy dzienników kontroli działań administratora na poziomie projektu i dzienników kontroli dostępu do danych organizacji. Zmienne oznaczają identyfikatory projektu i organizacji Firebase.

projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

Nazwa serwisu

Dzienniki audytu bazy danych Firebase Realtime Database korzystają z nazwy usługi firebasedatabase.googleapis.com .

Pełną listę wszystkich nazw usług Cloud Logging API i odpowiadających im typów monitorowanych zasobów znajdziesz w artykule Mapowanie usług na zasoby .

Typy zasobów

Dzienniki audytu bazy danych Firebase Realtime Database korzystają z typu zasobu audited_resource dla wszystkich dzienników audytu.

Listę wszystkich typów zasobów monitorowanych przez Cloud Logging i informacje opisowe znajdziesz w artykule Monitorowane typy zasobów .

Włącz rejestrowanie audytu

Dzienniki kontroli aktywności administratora są zawsze włączone; nie możesz ich wyłączyć.

Dzienniki kontrolne dostępu do danych są domyślnie wyłączone i nie są zapisywane, chyba że zostanie to wyraźnie włączone (wyjątkiem są dzienniki kontrolne dostępu do danych dla BigQuery, których nie można wyłączyć).

Dzienniki kontroli dostępu do danych dla bazy danych Realtime są przełączane poprzez sprawdzenie DATA_READ i/lub DATA_WRITE w konsoli GCP. Pomiędzy włączeniem/wyłączeniem logów w konsoli GCP a momentem rozpoczęcia/zatrzymania dostarczania logów może wystąpić maksymalnie godzinne opóźnienie.

Aby uzyskać instrukcje dotyczące włączania niektórych lub wszystkich dzienników kontroli dostępu do danych, zobacz Konfigurowanie dzienników dostępu do danych .

Uprawnienia i role

Uprawnienia i role Cloud IAM określają Twoją możliwość dostępu do danych dzienników kontrolnych w zasobach Google Cloud.

Decydując, które uprawnienia i role związane z rejestrowaniem mają zastosowanie w Twoim przypadku użycia, weź pod uwagę następujące kwestie:

  • Rola Przeglądający dzienniki ( roles/logging.viewer ) zapewnia dostęp tylko do odczytu do dzienników działań administratora, odmów zasad i dzienników audytu zdarzeń systemowych. Jeśli masz tylko tę rolę, nie możesz przeglądać dzienników kontroli dostępu do danych znajdujących się w zasobniku _Default .

  • Rola Przeglądający dzienniki prywatne (roles/logging.privateLogViewer ) obejmuje uprawnienia zawarte w roles/logging.viewer oraz możliwość odczytu dzienników kontroli dostępu do danych w zasobniku _Default .

    Pamiętaj, że jeśli te prywatne logi są przechowywane w zasobnikach zdefiniowanych przez użytkownika, każdy użytkownik mający uprawnienia do odczytu dzienników w tych zasobnikach będzie mógł je odczytać. Aby uzyskać więcej informacji na temat zasobników logów, zobacz Omówienie routingu i przechowywania .

Więcej informacji na temat uprawnień i ról Cloud IAM mających zastosowanie do danych dzienników inspekcji znajdziesz w artykule Kontrola dostępu .

Zobacz rejestry

Aby znaleźć i wyświetlić dzienniki audytu, musisz znać identyfikator projektu Firebase, folderu lub organizacji, dla której chcesz wyświetlić informacje o dziennikach audytu. Możesz dodatkowo określić inne indeksowane pola LogEntry , takie jak resource.type ; szczegółowe informacje można znaleźć w artykule Szybkie wyszukiwanie wpisów w dzienniku .

Poniżej znajdują się nazwy dzienników kontrolnych; zawierają zmienne identyfikatorów projektu, folderu lub organizacji Firebase:

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

Dzienniki kontrolne w Cloud Logging możesz przeglądać za pomocą konsoli GCP, narzędzia wiersza poleceń gcloud lub interfejsu Logging API.

Konsola

Możesz użyć Eksploratora logów w konsoli GCP, aby pobrać wpisy dziennika kontrolnego dotyczące projektu, folderu lub organizacji Firebase:

  1. W konsoli GCP przejdź do strony Rejestrowanie > Eksplorator logów .

    Przejdź do strony Eksplorator logów

  2. Na stronie Eksplorator logów wybierz istniejący projekt, folder lub organizację Firebase.

  3. W panelu Konstruktor zapytań wykonaj następujące czynności:

    • W obszarze Typ zasobu wybierz zasób Google Cloud, którego dzienniki kontrolne chcesz wyświetlić.

    • W polu Nazwa dziennika wybierz typ dziennika kontrolnego, który chcesz wyświetlić:

      • W dziennikach kontroli działań administratora wybierz działanie .
      • W przypadku dzienników kontroli dostępu do danych wybierz opcję data_access .
      • W dziennikach audytu zdarzeń systemowych wybierz opcję system_event .
      • W dziennikach kontroli odmowy zasad wybierz zasadę .

    Jeśli nie widzisz tych opcji, oznacza to, że w projekcie, folderze lub organizacji Firebase nie są dostępne żadne dzienniki kontroli tego typu.

    Aby uzyskać więcej informacji na temat wykonywania zapytań przy użyciu Eksploratora logów, zobacz Tworzenie zapytań do dzienników .

gcloud

Narzędzie wiersza poleceń gcloud zapewnia interfejs wiersza poleceń do interfejsu Cloud Logging API. Podaj prawidłowy identyfikator PROJECT_ID , FOLDER_ID lub ORGANIZATION_ID w każdej nazwie dziennika.

Aby odczytać wpisy dziennika audytu na poziomie projektu Firebase, uruchom następujące polecenie:

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" --project=PROJECT_ID

Aby odczytać wpisy dziennika inspekcji na poziomie folderu, uruchom następujące polecenie:

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" --folder=FOLDER_ID

Aby odczytać wpisy dziennika inspekcji na poziomie organizacji, uruchom następujące polecenie:

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" --organization=ORGANIZATION_ID

Aby uzyskać więcej informacji na temat korzystania z narzędzia gcloud , zobacz Odczytywanie wpisów dziennika .

API

Podczas tworzenia zapytań zastąp zmienne prawidłowymi wartościami, zastąp odpowiednią nazwę lub identyfikatory dziennika audytu na poziomie projektu, folderu lub organizacji, wymienione w nazwach dzienników audytu. Na przykład, jeśli zapytanie zawiera PROJECT_ID , wówczas podany identyfikator projektu musi odnosić się do aktualnie wybranego projektu Firebase.

Aby użyć interfejsu Logging API do przeglądania wpisów w dzienniku kontrolnym, wykonaj następujące czynności:

  1. Przejdź do sekcji Wypróbuj ten interfejs API w dokumentacji metody entries.list .

  2. Umieść następujący tekst w części treści żądania w formularzu Wypróbuj ten interfejs API . Kliknięcie tego wstępnie wypełnionego formularza powoduje automatyczne wypełnienie treści żądania, ale w każdej nazwie dziennika należy podać prawidłowy PROJECT_ID .

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. Kliknij Wykonaj .

Więcej informacji na temat zapytań można znaleźć w sekcji Język zapytań rejestrowania .

Przykładowy wpis dziennika audytu i sposób wyszukiwania w nim najważniejszych informacji można znaleźć w artykule Przykładowy wpis dziennika audytu .

Dzienniki kontroli trasy

Dzienniki inspekcji można kierować do obsługiwanych miejsc docelowych w taki sam sposób, jak inne rodzaje dzienników. Oto kilka powodów, dla których warto kierować dzienniki kontroli:

  • Aby przechowywać dzienniki kontrolne przez dłuższy czas lub skorzystać z bardziej zaawansowanych możliwości wyszukiwania, możesz kierować kopie dzienników kontrolnych do Google Cloud Storage, BigQuery lub Google Cloud Pub/Sub. Korzystając z Cloud Pub/Sub, możesz kierować do innych aplikacji, innych repozytoriów i stron trzecich.

  • Aby zarządzać dziennikami kontrolnymi w całej organizacji, możesz utworzyć zagregowane ujścia , które mogą kierować dzienniki z dowolnego lub wszystkich projektów Firebase w organizacji.

  • Jeśli włączone dzienniki kontroli dostępu do danych wypychają projekty Firebase ponad przydziały dzienników, możesz utworzyć ujścia, które wykluczają dzienniki kontroli dostępu do danych z rejestrowania.

Aby uzyskać instrukcje dotyczące dzienników routingu, zobacz Konfigurowanie ujścia .

cennik

Dzienniki audytu działań administratora i dzienniki audytu zdarzeń systemowych są bezpłatne.

Dzienniki audytu dostępu do danych i dzienniki audytu Odmowy zasad są płatne.

Więcej informacji o cenach Cloud Logging znajdziesz w artykule Cennik pakietu operacyjnego Google Cloud: Cloud Logging .