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

На этой странице описаны журналы аудита, созданные Firebase как часть журналов аудита Cloud .

Обзор

Службы Firebase ведут журналы аудита, чтобы помочь вам ответить на вопросы: «Кто что сделал, где и когда?». Это журналы облачного аудита, предоставляемые как часть проекта Google Cloud, связанного с вашим проектом Firebase .

Каждый ваш проект Firebase содержит только журналы аудита для ресурсов, которые находятся непосредственно в проекте.

Общий обзор журналов облачного аудита см. в разделе Обзор журналов облачного аудита . Для более глубокого понимания формата журнала аудита см. раздел Общие сведения о журналах аудита .

Доступные журналы аудита

Для базы данных Firebase Realtime доступны следующие типы журналов аудита:

  • Журналы аудита действий администратора

    Включает операции административной записи, которые записывают метаданные или информацию о конфигурации.

    Вы не можете отключить журналы аудита действий администратора.

  • Журналы аудита доступа к данным

    Включает операции «административного чтения», которые считывают метаданные или информацию о конфигурации. Также включает операции «чтение данных» и «запись данных», которые считывают или записывают предоставленные пользователем данные.

    Чтобы получать журналы аудита доступа к данным, вы должны явно включить их.

Более полные описания типов журналов аудита см. в разделе Типы журналов аудита .

Проверенные операции

Ниже приведены сводные данные о том, какие операции API соответствуют каждому типу журнала аудита в базе данных Firebase Realtime:

Категория журналов аудита Операции базы данных Firebase в реальном времени
Журналы аудита действий администратора (ADMIN_WRITE)
  • CreateDatabaseInstance
  • DeleteDatabaseInstance
  • DisableDatabaseInstance
  • ReenableDatabaseInstance
Журналы аудита доступа к данным (ADMIN_READ)
  • GetDatabaseInstance
  • ListDatabaseInstances
Журналы аудита доступа к данным (DATA_READ или DATA_WRITE)
  • Соединять
  • Отключить
  • RunOnDisconnect
  • Обновление (с предварительным условием) (для транзакционных операций). См. связанные Precondition и WriteMetadata .
Журналы аудита доступа к данным (DATA_READ)
  • Читать. См. связанные QueryMetadata .
  • Слушать. См. связанные QueryMetadata .
  • Отменить прослушивание
Журналы аудита доступа к данным (DATA_WRITE)
  • Напишите
  • Обновлять. См. соответствующие WriteMetadata .
  • Ондисконнектпут
  • OnDisconnectUpdate. См. соответствующие WriteMetadata .
  • OnDisconnectCancel

Аудит аутентификационных данных

Записи журнала аудита включают информацию об удостоверении, выполнившем зарегистрированную операцию. Чтобы идентифицировать инициатора запроса, см. следующие поля в объекте AuditLog:

  • Установление соединений в реальном времени. Операции Connect к базе данных в реальном времени не регистрируют данные проверки подлинности, поскольку проверка подлинности базы данных в реальном времени выполняется после установления соединения. Таким образом, Connect не имеет информации для аутентификации. Объект AuthenticationInfo содержит principalEmail адрес электронной почты-заполнителя audit-pending-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com .

  • Аутентификация Google. Операции с базой данных в реальном времени, использующие стандартную аутентификацию Google, например трафик из Firebase Admin SDK или запросы REST, аутентифицированные с помощью стандартного токена OAuth , имеют объект AuthenticationInfo , который содержит фактическое электронное письмо с учетными данными.

  • Аутентификация Firebase. Операции с базой данных в реальном времени, использующие аутентификацию Firebase, имеют объект AuthenticationInfo , который содержит значение PrincipleEmail principalEmail audit-third-party-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com . То же самое верно, если вы реализуете собственное решение для аутентификации, создавая собственные JWT.

    • Если для сторонней проверки подлинности использовался веб-токен JSON (JWT), поле thirdPartyPrincipal включает заголовок токена и полезные данные. Например, журналы аудита для запросов, аутентифицированных с помощью Firebase Authentication, включают токен Firebase Authentication этого запроса.
  • Нет аутентификации. Операции с базой данных реального времени, не использующие аутентификацию, имеют объект AuthenticationInfo , который содержит значение audit-no-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com principalEmail Экземпляр базы данных реального времени с открытыми правилами безопасности может разрешать такие запросы. . Мы рекомендуем всем пользователям должным образом защищать свои базы данных.

  • Жетоны устаревших секретов. Операции с базой данных в реальном времени с использованием устаревших токенов имеют объект AuthenticationInfo , который содержит замещающий audit-secret-auth@firebasedatabase-{REGION_CODE}-prod.iam.gserviceaccount.com principalEmail Для JWT, подписанного секретами, thirdPartyPrincipal содержит заголовки JWT и полезные данные.

Аудит оценок правил безопасности Firebase

Журналы Cloud Audit можно использовать для идентификации запросов, на которые могут повлиять изменения правил.

В объекте AuthorizationInfo authorization.permission может быть одним из:

  • firebasedatabase.data.get : доступ на чтение предоставляется по пути, указанному в resource .
  • firebasedatabase.data.update : Доступ для записи предоставляется по пути, указанному в resource .
  • firebasedatabase.data.connect : заполнитель для Connect и Disconnect . Для подключения к экземпляру базы данных реального времени авторизация не требуется.
  • firebasedatabase.data.cancel : используется для Unlisten и OnDisconnectCancel . Отзыв или отмена ранее авторизованной операции не требует дополнительной авторизации.

Сопоставьте журналы Cloud Audit с результатами профилировщика базы данных в реальном времени.

Вы можете выполнить углубленный анализ производительности базы данных реального времени, используя профилировщик базы данных реального времени в сочетании с ведением журнала аудита базы данных реального времени. У каждого инструмента есть свои сильные стороны.

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

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

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

Формат журнала аудита

Записи журнала аудита включают следующие объекты:

  • Сама запись журнала, которая является объектом типа LogEntry . Полезные поля включают следующее:

    • Имя logName содержит идентификатор ресурса и тип журнала аудита.
    • resource содержит цель проверяемой операции.
    • timestamp содержит время проверяемой операции.
    • protoPayload содержит проверенную информацию.
  • Данные журнала аудита, которые представляют собой объект AuditLog , хранящийся в поле protoPayload записи журнала.

  • Необязательная информация аудита для конкретной службы, которая является объектом для конкретной службы. Для более старых интеграций этот объект хранится в поле serviceData объекта AuditLog ; более новые интеграции используют поле metadata .

Другие поля в этих объектах и ​​способы их интерпретации см. в статье Общие сведения о журналах аудита .

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

Имя журнала

Имена ресурсов журналов аудита облака указывают на проект Firebase или другой объект Google Cloud, которому принадлежат журналы аудита, а также на то, содержит ли журнал данные аудита действий администратора, доступа к данным, отказа в политике или системных событий. Например, ниже показаны имена журналов аудита действий администратора на уровне проекта и журналов аудита доступа к данным организации. Переменные обозначают идентификаторы проекта и организации Firebase.

projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access

Наименование услуги

В журналах аудита базы данных Firebase Realtime используется имя службы firebasedatabase.googleapis.com .

Полный список всех имен служб Cloud Logging API и соответствующих типов отслеживаемых ресурсов см. в разделе Сопоставление служб с ресурсами .

Типы ресурсов

Журналы аудита базы данных Firebase Realtime используют тип ресурса audited_resource для всех журналов аудита.

Список всех отслеживаемых типов ресурсов Cloud Logging и описательную информацию см. в разделе Отслеживаемые типы ресурсов .

Включить ведение журнала аудита

Журналы аудита действий администратора всегда включены; вы не можете отключить их.

Журналы аудита доступа к данным отключены по умолчанию и не записываются, если они явно не включены (исключением являются журналы аудита доступа к данным для BigQuery, которые нельзя отключить).

Журналы аудита доступа к данным для базы данных реального времени переключаются путем проверки DATA_READ и/или DATA_WRITE в консоли GCP. Между включением/отключением журналов в консоли GCP и началом/прекращением доставки журналов может быть задержка до одного часа.

Инструкции по включению некоторых или всех журналов аудита доступа к данным см. в разделе Настройка журналов доступа к данным .

Разрешения и роли

Разрешения и роли Cloud IAM определяют вашу возможность доступа к данным журналов аудита в ресурсах Google Cloud.

Принимая решение о том, какие разрешения и роли для ведения журналов применимы к вашему варианту использования, учитывайте следующее:

  • Роль просмотра журналов ( roles/logging.viewer ) предоставляет вам доступ только для чтения к журналам аудита активности администратора, отказа в политике и системных событий. Если у вас есть только эта роль, вы не можете просматривать журналы аудита доступа к данным, находящиеся в _Default .

  • Роль просмотра частных журналов (roles/logging.privateLogViewer ) включает в себя разрешения, содержащиеся в roles/logging.viewer , а также возможность читать журналы аудита доступа к данным в _Default .

    Обратите внимание, что если эти частные журналы хранятся в определенных пользователем корзинах, то любой пользователь, у которого есть разрешения на чтение журналов в этих корзинах, может читать частные журналы. Дополнительные сведения о сегментах журналов см. в разделе Обзор маршрутизации и хранилища .

Дополнительные сведения о разрешениях и ролях Cloud IAM, применимых к данным журналов аудита, см. в разделе Управление доступом .

Просмотр журналов

Чтобы найти и просмотреть журналы аудита, вам необходимо знать идентификатор проекта Firebase, папки или организации, для которой вы хотите просмотреть информацию журнала аудита. Вы можете дополнительно указать другие индексированные поля LogEntry , такие как resource.type ; подробнее см. в разделе Быстрый поиск записей в журнале .

Ниже приведены имена журналов аудита. они включают переменные для идентификаторов проекта, папки или организации Firebase:

   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Factivity
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   projects/PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Factivity
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   folders/FOLDER_ID/logs/cloudaudit.googleapis.com%2Fpolicy

   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fdata_access
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fsystem_event
   organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Fpolicy

Вы можете просматривать журналы аудита в Cloud Logging с помощью консоли GCP, инструмента командной строки gcloud или Logging API.

Приставка

Вы можете использовать обозреватель журналов в консоли GCP, чтобы получить записи журнала аудита для вашего проекта, папки или организации Firebase:

  1. В консоли GCP перейдите на страницу Ведение журнала > Обозреватель журналов .

    Перейти на страницу обозревателя журналов

  2. На странице Logs Explorer выберите существующий проект Firebase, папку или организацию.

  3. На панели построителя запросов выполните следующие действия.

    • В поле Тип ресурса выберите ресурс Google Cloud, журналы аудита которого вы хотите просмотреть.

    • В поле Имя журнала выберите тип журнала аудита, который вы хотите просмотреть:

      • Для журналов аудита активности администратора выберите активность .
      • Для журналов аудита доступа к данным выберите data_access .
      • Для журналов аудита системных событий выберите system_event .
      • Для журналов аудита отклоненных политик выберите policy .

    Если вы не видите эти параметры, значит, в проекте, папке или организации Firebase нет журналов аудита такого типа.

    Дополнительные сведения о запросах с помощью обозревателя журналов см. в разделе Создание запросов журнала .

gcloud

Инструмент командной строки gcloud предоставляет интерфейс командной строки для API ведения журналов в облаке. Укажите действительный PROJECT_ID , FOLDER_ID или ORGANIZATION_ID в каждом из имен журналов.

Чтобы прочитать записи журнала аудита на уровне проекта Firebase, выполните следующую команду:

gcloud logging read "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com" --project=PROJECT_ID

Чтобы прочитать записи журнала аудита на уровне папки, выполните следующую команду:

gcloud logging read "logName : folders/FOLDER_ID/logs/cloudaudit.googleapis.com" --folder=FOLDER_ID

Чтобы прочитать записи журнала аудита на уровне организации, выполните следующую команду:

gcloud logging read "logName : organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com" --organization=ORGANIZATION_ID

Дополнительные сведения об использовании инструмента gcloud см. в разделе Чтение записей журнала .

API

При построении запросов замените переменные допустимыми значениями, замените соответствующие имена или идентификаторы журналов аудита на уровне проекта, папки или организации, как указано в именах журналов аудита. Например, если ваш запрос включает PROJECT_ID , то указанный вами идентификатор проекта должен относиться к текущему выбранному проекту Firebase.

Чтобы использовать Logging API для просмотра записей журнала аудита, выполните следующие действия:

  1. Перейдите к разделу Попробуйте этот API в документации по методу entries.list .

  2. Поместите следующее в часть тела запроса формы « Попробуйте этот API ». Щелчок по этой предварительно заполненной форме автоматически заполняет тело запроса, но вам необходимо указать действительный PROJECT_ID в каждом из имен журналов.

    {
      "resourceNames": [
        "projects/PROJECT_ID"
      ],
      "pageSize": 5,
      "filter": "logName : projects/PROJECT_ID/logs/cloudaudit.googleapis.com"
    }
    
  3. Нажмите «Выполнить» .

Дополнительные сведения о запросах см. в разделе Язык запросов ведения журналов.

Пример записи журнала аудита и способы поиска в нем самой важной информации см. в разделе Образец записи журнала аудита .

Журналы аудита маршрутизации

Вы можете направлять журналы аудита в поддерживаемые места назначения так же, как вы можете направлять другие типы журналов. Вот несколько причин, по которым вы можете захотеть перенаправить журналы аудита:

  • Чтобы хранить журналы аудита в течение более длительного периода времени или использовать более мощные возможности поиска, вы можете направить копии журналов аудита в Google Cloud Storage, BigQuery или Google Cloud Pub/Sub. Используя Cloud Pub/Sub, вы можете направлять данные к другим приложениям, другим репозиториям и третьим сторонам.

  • Чтобы управлять журналами аудита во всей организации, вы можете создать агрегированные приемники , которые могут направлять журналы из любого или всех проектов Firebase в организации.

  • Если ваши включенные журналы аудита доступа к данным выталкивают ваши проекты Firebase за ваши выделенные журналы, вы можете создать приемники, которые исключают журналы аудита доступа к данным из ведения журнала.

Инструкции по журналам маршрутизации см. в разделе Настройка приемников .

Цены

Журналы аудита действий администратора и журналы аудита системных событий предоставляются бесплатно.

Журналы аудита доступа к данным и журналы аудита отказа в политике являются платными.

Дополнительные сведения о ценах на ведение журнала в облаке см. в разделе Цены на набор операций Google Cloud: ведение журнала в облаке .