В этом документе описывается ведение журнала аудита для 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
, создают журналы аудита действий администратора .
Тип разрешения | Методы |
---|---|
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 этого запроса.
- Если для сторонней аутентификации использовался JSON Web Token (JWT), поле
Аутентификация не требуется. Операции 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 | Имя операции профилировщика |
---|---|---|
Соединять | RequestType — REALTIME | одновременное подключение |
Отключить | RequestType — REALTIME | одновременное отключение |
Читать | RequestType — REALTIME | чтение в реальном времени |
Читать | RequestType — REST | отдохни-прочитай |
Писать | RequestType — REALTIME | запись в реальном времени |
Писать | RequestType — REST | отдых-написать |
Обновлять | RequestType — REALTIME .Проверьте PreconditionType . | обновление в реальном времени транзакция в реальном времени |
Обновлять | RequestType — REST .Проверьте PreconditionType . | обновление rest-up остаток транзакции |
СлушательСлушать | RequestType — REALTIME | слушатель-слушатель |
СлушательНеслушать | RequestType — REALTIME | слушатель-неслушатель |
OnDisconnectPut | RequestType — REALTIME | вкл-отключение-поставить |
OnDisconnectUpdate | RequestType — REALTIME | обновление при отключении |
OnDisconnectCancel | RequestType — REALTIME | при отключении-отмене |
Запустить при отключении | RequestType — REALTIME | запуск при отключении |