Логирование и аудит действий пользователей: журнал, который отвечает «кто, что и когда»

Логирование и аудит действий пользователей — это журнал, по которому можно восстановить, кто что сделал в системе, и показать это владельцу, службе безопасности или клиенту. Мы делаем его для новых и уже работающих веб-приложений: список событий, запись в коде или на уровне базы, защита от правки, поиск и раздел активности. Начинаем с вопросов, на которые журнал должен отвечать, а не с выбора хранилища.

Обследование от 200 000 ₽, вычитается из первого этапаЖурнал можно добавить в работающую систему без переписыванияКод и журнал остаются на ваших серверах

С чем приходят

Когда журнал действий пора делать отдельной задачей

Нельзя ответить, кто изменил цену или права

В системе есть «логи», но в них ошибки и запросы, а не смысловые действия. Расследование сводится к опросу сотрудников.

Клиент спрашивает про аудит в опроснике

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

Был инцидент, и журнала не оказалось

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

Журнал есть, но он не защищён и не читается

Его может изменить администратор, поиск по нему работает минутами, а смотрят его раз в год.

Читатели

Четыре читателя журнала и чего каждый ждёт

От списка читателей зависит состав событий. Журнал, написанный «для всех», обычно не нужен никому.

Читатель
Его вопрос
Что должно быть в журнале
Как получает ответ
ЧитательСлужба безопасностирасследование
Его вопросКто и откуда выгрузил данные, кто выдал право, почему вошли с чужого адреса
Что должно быть в журналеВходы, отказы, смена ролей, выгрузки, чтение защищённых данных, адрес и способ входа
Как получает ответПоиск по пользователю, действию и периоду; оповещения на пороги
ЧитательПоддержкаразбор обращения
Его вопросЧто клиент сделал перед ошибкой, менял ли он сам настройку или это сделал сотрудник
Что должно быть в журналеДействия клиента над его объектами, вход поддержки от имени клиента
Как получает ответИстория объекта в карточке и поиск по организации
ЧитательАдминистратор клиентаконтроль своих сотрудников
Его вопросКто из наших сотрудников скачал документ, кто добавил пользователя
Что должно быть в журналеДействия в границах его организации, без записей других клиентов
Как получает ответРаздел «Журнал активности» с фильтрами и выгрузкой
ЧитательВнутренний контроль и проверяющийподтверждение порядка
Его вопросВидно ли, кто согласовал и изменил значимые данные, есть ли незаписанные операции
Что должно быть в журналеСогласования, изменения условий и сумм, удаления, значения до и после
Как получает ответОтчёт за период по объекту или пользователю; проверка сохранности
События

Какие события писать: три класса по цене пропуска

Список составляется на обследовании. Здесь логика, по которой события делятся и по которой выбирается способ записи.

Писать всё подряд бесполезно: объём растёт, а нужное тонет. Делим события по цене пропуска. Если событие не записалось и это нельзя исправить задним числом, оно относится к первому классу.

  • Первый класс — деньги, права и удаления. Изменение цены и условий, выдача и отзыв ролей, удаление записей, массовая выгрузка, действия поддержки от имени клиента. Запись идёт в одной транзакции с операцией: нет записи — нет и действия.
  • Второй класс — доступ. Входы и неудачные попытки, отказы в правах, открытие карточек с защищёнными данными, скачивание документов. Запись допустимо отправлять через очередь, но потеря ограничена и оговорена.
  • Третий класс — всё остальное. Открытие справочников, смена вкладок, нажатия. Мы не пишем их в журнал аудита: для этого есть аналитика продукта, у неё другие читатели и другие правила.

Справочник действий вместо свободного текста

Каждое событие получает код из справочника: «заказ.цена.изменение», «роль.выдача», «выгрузка.клиентов». Справочник лежит в репозитории, новое событие появляется вместе с кодом и проходит ревью. Благодаря кодам журнал становится данными: отчёт «все выдачи ролей за месяц» делается запросом.

Что в журнал не попадает

Пароли, коды подтверждения, токены сессий, содержимое форм и значения чувствительных полей. Достаточно факта изменения и идентификатора записи. Подробнее о разделении данных и журнала — на странице защиты персональных данных; структура записи разобрана в статье «Как вести журнал действий пользователей».

По системам

Что фиксировать в разных типах систем

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

Система
Обязательные события
Особенность
Типичная дыра
СистемаЛичный кабинет клиентасторонние пользователи
Обязательные событияВходы, смена реквизитов, оформление и отмена заказа, скачивание документов, приглашение сотрудников
ОсобенностьЗаписи привязаны к организации, чтобы клиент видел свои действия
Типичная дыраНе видно, кто из сотрудников клиента сделал заказ, записан только общий логин
СистемаВнутренняя система учётаCRM, портал, обвязка вокруг 1С
Обязательные событияСогласования, смена статусов и сумм, изменение справочников, выгрузки
ОсобенностьЧасть правок идёт в обход интерфейса, через загрузку или скрипт
Типичная дыраЖурнал есть в интерфейсе, но не в загрузке файлов
СистемаAPI и интеграцииобмен между системами
Обязательные событияКакая интеграция, под каким ключом, какие объекты читала и меняла, результат
ОсобенностьДействует служебная учётная запись, поэтому записывается ещё и вызвавшая сторона
Типичная дыраОдин ключ на все интеграции, невозможно отличить обмен с 1С от скрипта
СистемаПанель администраторасвои сотрудники
Обязательные событияБлокировка и разблокировка, смена прав, вход от имени клиента, массовые операции
ОсобенностьСамые опасные действия совершает узкий круг, записи нужны в первую очередь
Типичная дыраАдминистраторов мало, и журнал им «неудобен», поэтому его обходят
СистемаИИ-ассистентдействия по просьбе пользователя
Обязательные событияКакой пользователь попросил, какие данные ассистент получил, какое действие предложил и подтвердил ли человек
ОсобенностьЗаписывается и запрос, и действие, чтобы можно было разобрать спорный ответ
Типичная дыраПисать полный текст запросов с персональными данными в общий журнал
Работающая система

Как добавить журнал в систему, которая уже работает

Переписывать систему ради журнала не нужно. Есть три способа, и их можно комбинировать.

В коде: слой бизнес-операций

Основной вариант, если код ваш и менять его можно. Запись делается в одном слое, где выполняются осмысленные действия, а не в каждом обработчике. Видны смысл и автор, в том числе «от имени» кого действовали. Минус: правки в базе в обход приложения не видны.

В базе: триггеры или захват изменений

Подходит для старых систем и для случаев, когда код менять нельзя. Любая правка таблицы в любом режиме попадает в журнал. Минус: база видит «строка изменена», но не знает, какой пользователь приложения это сделал, пока его идентификатор не передан в сеанс. Часть систем, например 1С, ведёт собственный журнал регистрации; мы подключаем его выгрузку в общий журнал, а не заменяем его.

На входе: шлюз или прокси

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

Какой вариант выбрать, решается на обследовании по трём признакам: можно ли менять код, есть ли доступ в обход приложения, насколько важны значения «до и после».

Защита

Как защищаем сам журнал и данные в нём

Отдельное хранилище и узкий доступ

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

Проверка сохранности

Записи связываются контрольными значениями, копия по расписанию уходит в хранилище, куда нельзя писать повторно. Подмену в середине видно, а восстановление из копии проверяется тестом.

Маскирование и срок

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

Размещение

Журнал содержит сведения о людях, поэтому хранится на ваших серверах или у выбранного вами хостера в России.

Для клиентов

Раздел «Журнал активности» для администратора клиента

В сервисах для компаний журнал часто становится функцией продукта, а не только внутренним инструментом.

Администратор организации-клиента видит действия только своих сотрудников: кто вошёл, кто скачал документы, кто пригласил нового пользователя, кто изменил реквизиты. Раздел содержит фильтры по сотруднику, действию и периоду и выгрузку результата.

Главное требование — изоляция: клиент не должен увидеть записи другой организации или сотрудников поддержки вместе с их служебными заметками. Это проверяется отдельным тестом, как и права в кабинете. О разделении данных клиентов см. статью про мультиарендность в SaaS и страницу личного кабинета. Вход поддержки «от имени клиента» записывается и показывается клиенту, если это решено на обследовании.

Что делаем

Из чего состоит работа и сколько она стоит

Цены — по тарифам. Работы дешевле 150 000 ₽ не берём; остановиться можно после любой ступени, сделанное остаётся у вас по акту.

Обследование: одно-два приложения

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

200 000 ₽ · 2–3 недели

Обследование: несколько систем

То же для связки приложений, интеграций и базы, где часть правок идёт в обход интерфейса. Добавляются сквозной номер запроса и единый справочник действий.

350 000 ₽ · 3–4 недели

Пилот лёгкий: журнал в одном приложении

Запись событий первого и второго классов, отдельное хранение с правом только вставки, поиск по пользователю и объекту, история в карточке, тесты на отказ журнала.

150 000–400 000 ₽ · 2–8 недель

Пилот тяжёлый: несколько систем и раздел для клиентов

Захват изменений в базе, единое хранилище для нескольких приложений, раздел активности для администраторов клиентов с проверкой изоляции, копия вовне и проверка сохранности.

400 000–1 200 000 ₽ · 2–3 месяца

Сопровождение

Развитие справочника, поддержка хранилища и разбор спорных записей. Плановые доработки входят с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.

20 000 / 60 000 / 120 000 ₽ в месяц
Процесс

Как идёт работа

2–3 недели — Обследование: читатели и вопросы

Выясняем, кто и о чём спрашивает журнал. Записываем шесть-восемь вопросов, которые можно показать владельцу системы и подписать.

Неделя — Справочник действий и классы событий

Список событий, коды, класс каждого, поля записи. Согласуем с технической стороной и службой безопасности.

От 2 недель — Запись и хранилище

Реализуем запись в выбранном месте, отдельную учётную запись с правом вставки и хранилище.

1–2 недели — Проверка по вопросам

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

Запуск — Включение по частям

Сначала события первого класса, затем доступ. Смотрим объём и настраиваем оповещения.

Дальше — Развитие или сопровождение

Новые события и разделы добавляются по этапам с приёмкой.

Цена

Что двигает цену журнала внутри вилки

Число систем и точек записи

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

Захват изменений в базе

Требует доступа к базе и передачи пользователя в сеанс. Это отдельная работа, но она закрывает правки в обход приложения.

Раздел для клиентов

Интерфейс, фильтры, выгрузка и главное тест изоляции организаций: он добавляет работы в проверке.

Объём и срок хранения

Много событий и долгий срок требуют разбиения по периодам и архива. Поиск должен оставаться быстрым и через год.

Контроль

Что остаётся у вас и чего мы не делаем

Остаётся у вас

  • Исходный код записи и справочник действий в вашем репозитории с первого коммита.
  • Журнал и копии на ваших серверах или у выбранного вами хостера.
  • Документ с вопросами к журналу и составом событий: по нему можно проверять любого подрядчика.
  • Инструкция по развёртыванию и проверке сохранности.
  • Право остановиться после любой ступени: сделанное остаётся у вас по акту.

Мы этого не делаем

  • Не поставляем SIEM и не ведём круглосуточный мониторинг событий безопасности.
  • Не дежурим 24/7 и не реагируем на инциденты в течение часа.
  • Не определяем сроки хранения и обязательный состав записей: это решает юрист заказчика.
  • Не проводим аттестацию и экспертизу журнала для суда, лицензии ФСТЭК у нас нет.
  • Не следим за сотрудниками: журнал фиксирует действия в системе по правилам, согласованным с вами.
  • Не берём работы дешевле 150 000 ₽.
Граница

Журнал аудита, мониторинг и защита данных: где что

Журнал аудита отвечает на вопрос «кто что сделал». Вопрос «работает ли сервис и где он тормозит» решают метрики, технические журналы и трассировка, см. страницу мониторинга веб-сервисов. Оба набора данных связывает сквозной номер запроса, но хранятся они раздельно.

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

Журнал фиксирует совершённые действия и не заменяет разграничение прав и вход: за вход отвечает единый вход и двухфакторная аутентификация.

Инструменты

На чём собираем

Запись и хранение
  • Python или Go в слое бизнес-операций, шаблон «запись в одной транзакции с действием»
  • PostgreSQL с таблицей только для вставки, разбиением по периодам и триггерами там, где код менять нельзя
  • Очередь на RabbitMQ или в базе для событий второго класса
  • S3-совместимое хранилище для копий и архива
Поиск, оповещения и вход
  • OpenSearch или поиск средствами PostgreSQL в зависимости от объёма
  • Правила оповещений по порогам с отправкой на почту или в рабочий чат
  • Keycloak или ваш каталог: идентификатор пользователя из единого входа попадает в запись
  • Docker, Nginx, GitLab CI; всё в вашем контуре
Материалы

Материалы по теме

Статья

Как вести журнал действий пользователей

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

  • Вопросы к журналу
  • Структура записи
  • Проверки
Читать →
Статья

Защита персональных данных в веб-приложении

Технические меры: карта данных, шифрование, доступ, журнал и вопросы разработчику.

  • Карта данных
  • Доступ
  • Журнал
Читать →
Статья

ИИ-агент: права и подтверждение действий

Что записывать, когда действия выполняет ИИ-агент, и когда нужно подтверждение человека.

  • Права агента
  • Подтверждение
  • Запись действий
Читать →
Заявка

Разберём, на какие вопросы должен отвечать ваш журнал

Сорок минут созвона: кто и о чём спрашивает журнал, что система пишет сейчас и где в ней обходные пути. По итогам скажем, с какой ступени начинать и в какую вилку это укладывается.

Спасибо, заявка отправлена. Ответим в течение рабочего дня.

Не удалось отправить. Напишите в телеграм или позвоните.

Вопросы

Частые вопросы: логирование и аудит действий пользователей

Сколько стоит журнал аудита действий пользователей?

Начинаем с обследования: 200 000 ₽ за одно-два приложения и 350 000 ₽ за несколько систем. Лёгкий пилот на одном приложении стоит 150 000–400 000 ₽, тяжёлый (несколько систем, раздел для клиентов) — 400 000–1 200 000 ₽. Обследование вычитается из первого этапа, если продолжаете с нами.

Чем журнал аудита отличается от обычных логов?

Логи нужны разработчику и отвечают на вопрос, что сломалось. Журнал аудита нужен владельцу системы и проверяющему и отвечает на вопрос, кто что сделал. У него другие читатели, срок хранения и защита: его нельзя править и нельзя терять записи о важных операциях.

Можно ли добавить журнал в уже работающую систему?

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

Как защищается журнал от правки?

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

Может ли клиент видеть журнал своих сотрудников?

Да, через раздел «Журнал активности» в кабинете. Администратор организации видит только действия своих сотрудников, с фильтрами и выгрузкой. Изоляция записей проверяется отдельным тестом, как и права в кабинете.

Сколько хранить журнал?

Срок записывается в регламенте и зависит от требований ваших клиентов и юриста: мы не называем нормативных значений. Технически журнал делится по периодам, свежие записи лежат в быстром хранилище, старые уходят в архив.

Вы работаете только в Ростове-на-Дону?

Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.