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

В этом документе описывается ведение журнала аудита для Firebase Realtime Database. Сервисы Google Cloud создают журналы аудита, в которых регистрируются действия администратора и доступа к ресурсам Google Cloud . Подробнее о журналах аудита в облаке см. ниже:

Примечания

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

Название услуги

В журналах аудита Firebase Realtime Database используется имя сервиса firebasedatabase.googleapis.com . Фильтр для этого сервиса:

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

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

Каждое разрешение IAM имеет свойство type , значение которого представляет собой перечисление, которое может принимать одно из четырёх значений: ADMIN_READ , ADMIN_WRITE , DATA_READ или DATA_WRITE . При вызове метода Firebase Realtime Database создаёт журнал аудита, категория которого зависит от свойства type разрешения, необходимого для выполнения метода. Методы, требующие разрешение IAM со значением свойства type DATA_READ , DATA_WRITE или ADMIN_READ создают журналы аудита доступа к данным . Методы, требующие разрешение IAM со значением свойства type ADMIN_WRITE , создают журналы аудита действий администратора .

Методы API в следующем списке, отмеченные символом (LRO), являются длительными операциями (LRO). Эти методы обычно создают две записи в журнале аудита: одну при запуске операции и другую при её завершении. Подробнее см. в разделе Журналы аудита длительных операций .
Тип разрешения Методы
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

Информацию о том, как и какие разрешения оцениваются для каждого метода, см. в документации по управлению идентификацией и доступом в облаке для базы данных 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_WRITE
    • firebasedatabase.data.update - DATA_WRITE
  • Метод представляет собой длительную или потоковую операцию : Нет.
  • Фильтр для этого метода : protoPayload.methodName="google.firebase.database.v1.RealtimeDatabase.Update"

Write

  • Метод : google.firebase.database.v1.RealtimeDatabase.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:

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

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

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

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

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

Аудит оценок Firebase Security Rules

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

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

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

Сопоставьте журналы аудита облака с результатами профилирования Realtime Database

Вы можете проводить углубленный анализ производительности Realtime Database используя Realtime Database Profiler в сочетании с функцией ведения журнала аудита Realtime Database . Каждый инструмент имеет свои сильные стороны.

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

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

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