В этом документе описывается ведение журнала аудита для базы данных 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 этого запроса.
- Если для сторонней проверки подлинности использовался веб-токен JSON (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 в сочетании с ведением журнала аудита Realtime Database . У каждого инструмента есть свои сильные стороны.
Ведение журнала облачного аудита | Профилировщик Realtime Database |
---|---|
|
|
Содержимое журнала аудита соответствует показателям профилировщика, как показано ниже.
Название операции ведения журнала аудита | Особые ценности вRealtimeDatabaseAuditMetadata | Имя операции профилировщика |
---|---|---|
Соединять | RequestType — REALTIME | одновременное подключение |
Отключить | RequestType — REALTIME | одновременное отключение |
Читать | RequestType — REALTIME | чтение в реальном времени |
Читать | RequestType — REST | отдохнуть-прочитать |
Писать | RequestType — REALTIME | запись в реальном времени |
Писать | RequestType — REST | отдыхай-пиши |
Обновлять | RequestType — REALTIME .Проверьте PreconditionType . | обновление в реальном времени транзакция в реальном времени |
Обновлять | RequestType — REST .Проверьте PreconditionType . | отдых-обновление остальная транзакция |
СлушательСлушать | RequestType — REALTIME | слушатель-слушай |
СлушательОтключить прослушивание | RequestType — REALTIME | слушатель-не слушать |
OnDisconnectPut | RequestType — REALTIME | на-отключить-поставить |
OnDisconnectUpdate | RequestType — REALTIME | обновление при отключении |
При отключении Отмена | RequestType — REALTIME | при отключении-отмене |
RunOnDisconnect | RequestType — REALTIME | запуск при отключении |