В этом документе описывается ведение журнала аудита для 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.GetDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ListDatabaseInstances |
ADMIN_WRITE | google.firebase.database.v1beta.RealtimeDatabaseService.CreateDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DeleteDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.DisableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.ReenableDatabaseInstancegoogle.firebase.database.v1beta.RealtimeDatabaseService.UndeleteDatabaseInstance |
DATA_READ | google.firebase.database.v1.RealtimeDatabase.Connectgoogle.firebase.database.v1.RealtimeDatabase.Disconnectgoogle.firebase.database.v1.RealtimeDatabase.Listengoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectCancelgoogle.firebase.database.v1.RealtimeDatabase.Readgoogle.firebase.database.v1.RealtimeDatabase.Unlisten |
DATA_WRITE | google.firebase.database.v1.RealtimeDatabase.OnDisconnectPutgoogle.firebase.database.v1.RealtimeDatabase.OnDisconnectUpdategoogle.firebase.database.v1.RealtimeDatabase.RunOnDisconnectgoogle.firebase.database.v1.RealtimeDatabase.Updategoogle.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 | запуск при отключении |