Нельзя ответить, кто изменил цену или права
В системе есть «логи», но в них ошибки и запросы, а не смысловые действия. Расследование сводится к опросу сотрудников.
Логирование и аудит действий пользователей — это журнал, по которому можно восстановить, кто что сделал в системе, и показать это владельцу, службе безопасности или клиенту. Мы делаем его для новых и уже работающих веб-приложений: список событий, запись в коде или на уровне базы, защита от правки, поиск и раздел активности. Начинаем с вопросов, на которые журнал должен отвечать, а не с выбора хранилища.
Обследование от 200 000 ₽, вычитается из первого этапаЖурнал можно добавить в работающую систему без переписыванияКод и журнал остаются на ваших серверах
В системе есть «логи», но в них ошибки и запросы, а не смысловые действия. Расследование сводится к опросу сотрудников.
Крупный заказчик хочет знать, что вы фиксируете, как долго храните и можно ли ему показать действия его сотрудников.
Выгрузку базы или выдачу прав заметили позже, а восстановить ход событий нечем.
Его может изменить администратор, поиск по нему работает минутами, а смотрят его раз в год.
От списка читателей зависит состав событий. Журнал, написанный «для всех», обычно не нужен никому.
Список составляется на обследовании. Здесь логика, по которой события делятся и по которой выбирается способ записи.
Писать всё подряд бесполезно: объём растёт, а нужное тонет. Делим события по цене пропуска. Если событие не записалось и это нельзя исправить задним числом, оно относится к первому классу.
Каждое событие получает код из справочника: «заказ.цена.изменение», «роль.выдача», «выгрузка.клиентов». Справочник лежит в репозитории, новое событие появляется вместе с кодом и проходит ревью. Благодаря кодам журнал становится данными: отчёт «все выдачи ролей за месяц» делается запросом.
Пароли, коды подтверждения, токены сессий, содержимое форм и значения чувствительных полей. Достаточно факта изменения и идентификатора записи. Подробнее о разделении данных и журнала — на странице защиты персональных данных; структура записи разобрана в статье «Как вести журнал действий пользователей».
Заготовка для разбора: на ваших системах строки будут другими, вопросы те же.
Переписывать систему ради журнала не нужно. Есть три способа, и их можно комбинировать.
Основной вариант, если код ваш и менять его можно. Запись делается в одном слое, где выполняются осмысленные действия, а не в каждом обработчике. Видны смысл и автор, в том числе «от имени» кого действовали. Минус: правки в базе в обход приложения не видны.
Подходит для старых систем и для случаев, когда код менять нельзя. Любая правка таблицы в любом режиме попадает в журнал. Минус: база видит «строка изменена», но не знает, какой пользователь приложения это сделал, пока его идентификатор не передан в сеанс. Часть систем, например 1С, ведёт собственный журнал регистрации; мы подключаем его выгрузку в общий журнал, а не заменяем его.
Фиксирует все обращения к программному интерфейсу: кто, к чему, с каким результатом. Не требует правок в коде, но видит только адреса и статусы. Подходит для первого шага и для API, дополняя запись в слое операций. Защита самих интерфейсов описана на странице защиты API.
Какой вариант выбрать, решается на обследовании по трём признакам: можно ли менять код, есть ли доступ в обход приложения, насколько важны значения «до и после».
У приложения только право вставки. Читают журнал ответственный за безопасность и аудитор, и это не те, чьи действия записаны. В чувствительных системах журнал лежит там, где администратор основной базы не владеет им.
Записи связываются контрольными значениями, копия по расписанию уходит в хранилище, куда нельзя писать повторно. Подмену в середине видно, а восстановление из копии проверяется тестом.
Журнал содержит идентификаторы, а не персональные данные целиком. Срок хранения записан в регламенте; удаление по сроку тоже оставляет запись. Сроки определяет юрист заказчика.
Журнал содержит сведения о людях, поэтому хранится на ваших серверах или у выбранного вами хостера в России.
В сервисах для компаний журнал часто становится функцией продукта, а не только внутренним инструментом.
Администратор организации-клиента видит действия только своих сотрудников: кто вошёл, кто скачал документы, кто пригласил нового пользователя, кто изменил реквизиты. Раздел содержит фильтры по сотруднику, действию и периоду и выгрузку результата.
Главное требование — изоляция: клиент не должен увидеть записи другой организации или сотрудников поддержки вместе с их служебными заметками. Это проверяется отдельным тестом, как и права в кабинете. О разделении данных клиентов см. статью про мультиарендность в SaaS и страницу личного кабинета. Вход поддержки «от имени клиента» записывается и показывается клиенту, если это решено на обследовании.
Цены — по тарифам. Работы дешевле 150 000 ₽ не берём; остановиться можно после любой ступени, сделанное остаётся у вас по акту.
Читатели журнала, список вопросов и событий, справочник действий, что уже пишется и где, выбор места записи и хранилища. На выходе схема журнала, список событий по классам и вилка бюджета. Вычитается из первого этапа, если продолжаете с нами.
То же для связки приложений, интеграций и базы, где часть правок идёт в обход интерфейса. Добавляются сквозной номер запроса и единый справочник действий.
Запись событий первого и второго классов, отдельное хранение с правом только вставки, поиск по пользователю и объекту, история в карточке, тесты на отказ журнала.
Захват изменений в базе, единое хранилище для нескольких приложений, раздел активности для администраторов клиентов с проверкой изоляции, копия вовне и проверка сохранности.
Развитие справочника, поддержка хранилища и разбор спорных записей. Плановые доработки входят с пакета на 60 000 ₽. Сверх пакета — 5 000 ₽ в час.
Выясняем, кто и о чём спрашивает журнал. Записываем шесть-восемь вопросов, которые можно показать владельцу системы и подписать.
Список событий, коды, класс каждого, поля записи. Согласуем с технической стороной и службой безопасности.
Реализуем запись в выбранном месте, отдельную учётную запись с правом вставки и хранилище.
Выполняем все действия справочника, пробуем изменить запись, отключаем хранилище, отвечаем на вопросы только по журналу.
Сначала события первого класса, затем доступ. Смотрим объём и настраиваем оповещения.
Новые события и разделы добавляются по этапам с приёмкой.
Одно приложение с чистым слоем операций стоит меньше связки систем, где правки идут и через интерфейс, и через загрузку, и через скрипты.
Требует доступа к базе и передачи пользователя в сеанс. Это отдельная работа, но она закрывает правки в обход приложения.
Интерфейс, фильтры, выгрузка и главное тест изоляции организаций: он добавляет работы в проверке.
Много событий и долгий срок требуют разбиения по периодам и архива. Поиск должен оставаться быстрым и через год.
Журнал аудита отвечает на вопрос «кто что сделал». Вопрос «работает ли сервис и где он тормозит» решают метрики, технические журналы и трассировка, см. страницу мониторинга веб-сервисов. Оба набора данных связывает сквозной номер запроса, но хранятся они раздельно.
Если нужно привести в порядок хранение и доступ к персональным данным, журнал входит в состав работ на странице защиты персональных данных, но там он один из слоёв. Если система только проектируется, журнал закладывается при моделировании угроз. Для проверки, что журнал и права работают, используется аудит безопасности.
Журнал фиксирует совершённые действия и не заменяет разграничение прав и вход: за вход отвечает единый вход и двухфакторная аутентификация.
Шесть вопросов к журналу, структура записи, место записи в коде, защита от правки и восемь проверок перед запуском.
Технические меры: карта данных, шифрование, доступ, журнал и вопросы разработчику.
Что записывать, когда действия выполняет ИИ-агент, и когда нужно подтверждение человека.
Сорок минут созвона: кто и о чём спрашивает журнал, что система пишет сейчас и где в ней обходные пути. По итогам скажем, с какой ступени начинать и в какую вилку это укладывается.
Начинаем с обследования: 200 000 ₽ за одно-два приложения и 350 000 ₽ за несколько систем. Лёгкий пилот на одном приложении стоит 150 000–400 000 ₽, тяжёлый (несколько систем, раздел для клиентов) — 400 000–1 200 000 ₽. Обследование вычитается из первого этапа, если продолжаете с нами.
Логи нужны разработчику и отвечают на вопрос, что сломалось. Журнал аудита нужен владельцу системы и проверяющему и отвечает на вопрос, кто что сделал. У него другие читатели, срок хранения и защита: его нельзя править и нельзя терять записи о важных операциях.
Да. Если код менять нельзя или часть правок идёт в обход приложения, используем захват изменений в базе и обращения на входе. Если код ваш, лучше запись в слое операций.
Отдельная учётная запись с правом только вставки, отдельное хранилище, контрольные значения записей и копия по расписанию. От администратора, который управляет и системой, и журналом, защищает только отдельное хранилище с другим администратором.
Да, через раздел «Журнал активности» в кабинете. Администратор организации видит только действия своих сотрудников, с фильтрами и выгрузкой. Изоляция записей проверяется отдельным тестом, как и права в кабинете.
Срок записывается в регламенте и зависит от требований ваших клиентов и юриста: мы не называем нормативных значений. Технически журнал делится по периодам, свежие записи лежат в быстром хранилище, старые уходят в архив.
Мы в Ростове-на-Дону, работаем с заказчиками по всей России: удалённо и в вашем контуре. Доступ к системам и обследование согласуем на старте с вашей службой безопасности.