В этом документе описывается ведение журналов аудита для Firebase Realtime Database. Сервисы Google Cloud генерируют журналы аудита, которые записывают административные действия и действия доступа в ваших ресурсах Google Cloud . Для получения дополнительной информации о журналах аудита 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 Database.
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:
Установление соединений в реальном времени. Операции
ConnectRealtime 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 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
Журналы облачного аудита можно использовать для выявления запросов, на которые потенциально могут повлиять изменения Security 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 Database в сочетании с журналом аудита Realtime Database . У каждого инструмента есть свои сильные стороны.
| Ведение журнала аудита облачных сервисов | Профайлер Realtime Database |
|---|---|
|
|
Содержимое журнала аудита соответствует метрикам профилировщика, как показано ниже.
| Название операции аудита | Особые ценности вRealtimeDatabaseAuditMetadata | Название операции профилировщика |
|---|---|---|
| Соединять | RequestType is REALTIME | concurrent-connect |
| Отключить | RequestType is REALTIME | одновременное отключение |
| Читать | RequestType is REALTIME | чтение в реальном времени |
| Читать | RequestType - REST | отдохнуть |
| Писать | RequestType is REALTIME | запись в реальном времени |
| Писать | RequestType - REST | rest-write |
| Обновлять | RequestType имеет тип REALTIME .Проверьте PreconditionType . | обновление в реальном времени транзакция в реальном времени |
| Обновлять | RequestType — REST .Проверьте PreconditionType . | rest-update rest-transaction |
| СлушательСлушать | RequestType is REALTIME | слушатель-слушать |
| ListenerUnlisten | RequestType is REALTIME | слушатель-неслушать |
| OnDisconnectPut | RequestType is REALTIME | включение-отключение-включение |
| OnDisconnectUpdate | RequestType is REALTIME | обновление при отключении |
| OnDisconnectCancel | RequestType is REALTIME | отключение-отмена |
| RunOnDisconnect | RequestType is REALTIME | работа при отключении |