Ведение журнала аудита базы данных Firebase Realtime

В этом документе описывается ведение журнала аудита для базы данных Firebase Realtime, в том числе, какие методы генерируют журналы аудита, подробные сведения о журналах аудита, которые создает каждый метод, и какие методы не создают журналы аудита, если таковые имеются. Google Cloud создает журналы аудита, в которых фиксируются действия по администрированию и доступу к вашим ресурсам Google Cloud. Дополнительную информацию см. в разделе Обзор журналов облачного аудита .

Примечания

Дополнительная информация о полях в protoPayload.metadata для операций DATA_READ и DATA_WRITE доступна в справочной документации .

Наименование услуги

Журналы аудита базы данных Firebase Realtime используют имя службы firebasedatabase.googleapis.com .

Методы по типу разрешения

Методы, проверяющие разрешения DATA_READ , DATA_WRITE и ADMIN_READ создают журналы, отнесенные к категории журналов аудита доступа к данным . Методы, проверяющие разрешения ADMIN_WRITE создают журналы, отнесенные к категории журналов аудита активности администратора .

Тип разрешения Методы
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

Журналы аудита для каждого интерфейса API

Информацию о том, как и какие разрешения оцениваются для каждого метода, см. в документации Cloud Identity and Access Management для базы данных Firebase Realtime.

google.firebase.database.v1.RealtimeDatabase

В следующем разделе содержатся сведения о журналах аудита, связанных с методами, принадлежащими google.firebase.database.v1.RealtimeDatabase .

Connect

  • Метод : google.firebase.database.v1.RealtimeDatabase.Connect .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.connect - DATA_READ
  • Метод — длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Connect"

Disconnect

  • Метод : google.firebase.database.v1.RealtimeDatabase.Disconnect .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.connect - DATA_READ
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Disconnect"

Listen

  • Метод : google.firebase.database.v1.RealtimeDatabase.Listen
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.get - DATA_READ
  • Метод — длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Listen"

OnDisconnectCancel

  • Метод : google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.cancel - DATA_READ
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectCancel"

OnDisconnectPut

  • Метод : google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.update - DATA_WRITE
  • Метод — длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectPut"

OnDisconnectUpdate

  • Метод : google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.update - DATA_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdate"

Read

  • Метод : google.firebase.database.v1.RealtimeDatabase.Read
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.get - DATA_READ
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Read"

RunOnDisconnect

  • Метод : google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.update - DATA_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.RunOnDisconnect"

Unlisten

  • Метод : google.firebase.database.v1.RealtimeDatabase.Unlisten
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.cancel - DATA_READ
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Unlisten"

Update

  • Метод : google.firebase.database.v1.RealtimeDatabase.Update .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.get - DATA_READ
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • Метод — длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Метод : google.firebase.database.v1.RealtimeDatabase.Write .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.data.get - DATA_READ
    • firebasedatabase.data.get - DATA_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Write"

google.firebase.database.v1beta.RealtimeDatabaseService

В следующем разделе содержатся сведения о журналах аудита, связанных с методами, принадлежащими google.firebase.database.v1beta.RealtimeDatabaseService .

CreateDatabaseInstance

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance .
  • Тип журнала аудита : активность администратора.
  • Разрешения :
    • firebasedatabase.instances.create - ADMIN_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstance"

DeleteDatabaseInstance

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance .
  • Тип журнала аудита : активность администратора.
  • Разрешения :
    • firebasedatabase.instances.delete - ADMIN_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstance"

DisableDatabaseInstance

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance .
  • Тип журнала аудита : активность администратора.
  • Разрешения :
    • firebasedatabase.instances.disable - ADMIN_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstance"

GetDatabaseInstance

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.instances.get - ADMIN_READ
  • Метод — длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.GetDatabaseInstance"

ListDatabaseInstances

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances .
  • Тип журнала аудита : Доступ к данным
  • Разрешения :
    • firebasedatabase.instances.list - ADMIN_READ
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances"

ReenableDatabaseInstance

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance .
  • Тип журнала аудита : активность администратора.
  • Разрешения :
    • firebasedatabase.instances.reenable - ADMIN_WRITE
  • Метод — длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstance"

UndeleteDatabaseInstance

  • Метод : google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance .
  • Тип журнала аудита : активность администратора.
  • Разрешения :
    • firebasedatabase.instances.undelete - ADMIN_WRITE
  • Метод — это длительная или потоковая операция : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance"

Аудит аутентификационной информации

Записи журнала аудита включают информацию о личности, выполнившей зарегистрированную операцию. Чтобы идентифицировать вызывающую сторону запроса, просмотрите следующие поля в объекте AuditLog:

  • Установление соединений в реальном времени. Операции Connect к базе данных реального времени не регистрируют данные аутентификации, поскольку база данных реального времени проверяет подлинность после установления соединения. Поэтому Connect не имеет информации для аутентификации. Объект AuthenticationInfo содержит заполнитель principalEmail audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com .

  • Google-аутентификация. Операции с базой данных в реальном времени, использующие стандартную аутентификацию Google, такие как трафик из Firebase Admin SDK или запросы REST , аутентифицированные с помощью стандартного токена OAuth , имеют объект AuthenticationInfo , который содержит фактическое электронное письмо с учетными данными.

  • Аутентификация Firebase. Операции с базой данных реального времени, использующие аутентификацию Firebase, имеют объект AuthenticationInfo , который содержит значение principalEmail audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . То же самое верно, если вы реализуете собственное решение для аутентификации, создавая собственные JWT.

    • Если для сторонней проверки подлинности использовался веб-токен JSON (JWT), поле thirdPartyPrincipal включает заголовок и полезные данные токена. Например, журналы аудита для запросов, аутентифицированных с помощью Firebase Authentication, включают в себя токен Firebase Authentication этого запроса.
  • Никакой аутентификации. Операции с базой данных реального времени, не использующие аутентификацию, имеют объект AuthenticationInfo , который содержит значение principalEmail audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com Экземпляр базы данных реального времени с открытыми правилами безопасности может разрешать такие запросы. . Мы рекомендуем всем пользователям правильно защищать свои базы данных.

  • Жетоны секретов наследия. Операции с базой данных в реальном времени с использованием устаревших токенов имеют объект AuthenticationInfo , который содержит заполнитель principalEmail audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . Для JWT, подписанного секретом, thirdPartyPrincipal содержит заголовки JWT и полезные данные.

Аудит оценок правил безопасности Firebase

Журналы облачного аудита можно использовать для выявления запросов, на которые потенциально могут повлиять изменения правил.

В объекте AuthorizationInfo authorization.permission может быть одним из:

  • firebasedatabase.data.get : доступ на чтение предоставлен по пути, указанному в resource .
  • firebasedatabase.data.update : доступ на запись предоставлен по пути, указанному в resource .
  • firebasedatabase.data.connect : заполнитель для Connect и Disconnect . Для подключения к экземпляру базы данных реального времени не требуется авторизация.
  • firebasedatabase.data.cancel : используется для Unlisten и OnDisconnectCancel . Отзыв или отмена ранее авторизованной операции не требует дополнительной авторизации.

Сопоставление журналов облачного аудита с результатами профилировщика базы данных в реальном времени.

Вы можете выполнить углубленный анализ производительности базы данных реального времени, используя профилировщик базы данных реального времени в сочетании с ведением журнала аудита базы данных реального времени. У каждого инструмента есть свои сильные стороны.

Ведение журнала облачного аудита Профилировщик базы данных в реальном времени
  • Аудит доступа к базам данных
  • Постоянно фиксирует все запросы
  • Позволяет ретроспективный запрос
  • Содержит подробную информацию о токене авторизации.
  • Взимается плата за использование
  • Используется для анализа производительности
  • Предоставляет полезные инструменты для идентификации горячих точек и, следовательно, оптимизации производительности.
  • Может измерять Listener-broadcast , что недоступно в журналах аудита из-за потенциального объема данных.
  • Легкий и работает в режиме реального времени, что делает его подходящим для тестирования нагрузки в реальном времени. Записи журнала аудита могут появиться через несколько минут.

Содержимое журнала аудита соответствует показателям профилировщика, как показано ниже.

Название операции ведения журнала аудита Особые ценности в
RealtimeDatabaseAuditMetadata
Имя операции профилировщика
Соединять RequestTypeREALTIME одновременное подключение
Отключить RequestTypeREALTIME одновременное отключение
Читать RequestTypeREALTIME чтение в реальном времени
Читать RequestTypeREST отдохнуть-прочитать
Писать RequestTypeREALTIME запись в реальном времени
Писать RequestTypeREST отдыхай-пиши
Обновлять RequestTypeREALTIME .
Проверьте PreconditionType .
обновление в реальном времени
транзакция в реальном времени
Обновлять RequestTypeREST .
Проверьте PreconditionType .
отдых-обновление
остальная транзакция
СлушательСлушать RequestTypeREALTIME слушатель-слушай
СлушательОтключить прослушивание RequestTypeREALTIME слушатель-не слушать
OnDisconnectPut RequestTypeREALTIME на-отключить-поставить
OnDisconnectUpdate RequestTypeREALTIME обновление при отключении
При отключении Отмена RequestTypeREALTIME при отключении-отмене
RunOnDisconnect RequestTypeREALTIME запуск при отключении