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

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

Примечания

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

Название службы

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

    protoPayload.serviceName="firebasedatabase.googleapis.com"
  

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

Каждое разрешение IAM имеет свойство type , значение которого представляет собой перечисление, которое может иметь одно из четырех значений: ADMIN_READ , ADMIN_WRITE , DATA_READ или DATA_WRITE . Когда вы вызываете метод, база данных Firebase Realtime создает журнал аудита, категория которого зависит от свойства type разрешения, необходимого для выполнения метода. Методы, которым требуется разрешение IAM со значением свойства type DATA_READ , DATA_WRITE или ADMIN_READ , создают журналы аудита доступа к данным . Методы, которым требуется разрешение IAM со значением свойства type 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_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:

  • Установление соединений в реальном времени. Операции Connect Realtime Database не регистрируют данные аутентификации, поскольку 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 (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 в сочетании с ведением журнала аудита Realtime Database . У каждого инструмента есть свои сильные стороны.

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

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

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