Перейти к содержанию

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

Общие сведения

На каждом инстансе Picodata можно включить регистрацию событий и запись соответствующей информации в журнал аудита.

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

Структура журнала

Журнал представляет собой массив строк с разметкой json, где каждой строке соответствует одно событие. Пример журнала:

{"id":"1.0.1","message":"audit log is ready","severity":"low","time":"2023-12-01T14:28:16.487+0300","title":"init_audit"}
{"id":"1.0.2","message":"instance is starting","severity":"low","time":"2023-12-01T14:28:16.488+0300","title":"local_startup"}
{"auth_type":"md5","id":"1.0.9","message":"created user `PEPPA`","severity":"high","time":"2023-12-01T14:31:24.344+0300","title":"create_user","user":"PEPPA"}
{"grantee":"PEPPA","grantee_type":"user","id":"1.0.10","message":"granted role `2` to user `PEPPA`","role":"2","severity":"high","time":"2023-12-01T14:31:24.344+0300","title":"grant_role"}
{"id":"1.0.14","message":"created table `friends_of_peppa`","name":"friends_of_peppa","severity":"medium","time":"2023-12-01T14:31:50.117+0300","title":"create_table"}

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

  • id – идентификатор записи, состоящий из трех чисел:
    • raft_id – идентификатор узла в Raft на момент регистрации события
    • gen – счетчик перезапусков узла
    • count – внутренний счетчик событий
  • message – название события (например: audit log is ready, instance is starting)
  • severity – важность события (low / medium / high)
  • time – подробная временная метка, привязанная к дате и времени события
  • title – наименование события безопасности (например, create_user)

Помимо этого, запись содержит дополнительные идентификаторы затронутых субъектов и объектов, например, имена пользователей, БД, изменения ACL и т.д. Дополнительные поля записи непосредственно зависят от типа события. Примеры дополнительных полей:

  • auth_type – тип аутентификации (chap-sha1 / md5 / ldap)
  • grantee – субъект получения/изъятия привилегии или роли
  • grantee_type – тип такого субъекта (пользователь или роль)
  • user – субъект операции доступа: пользователь, выполнивший операцию, либо создаваемый пользователь

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

Способы ведения журнала

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

  • file — в виде текстового файла, по строчке на событие. В таком случае смотреть его можно средствами защищенной ОС, а также при помощи API, предоставляемых самой СУБД.
  • pipe — с использованием внешнего процесса-коллектора, который СУБД должна будет запустить при старте узла. В этом случае журнал будет поступать в текстовом виде на вход процессу-коллектору (через stdin). Вся дальнейшая логика работы целиком зависит от запущенного процесса; например, он может отправлять журнал в централизованное внешнее хранилище.
  • syslog — с использованием общесистемного логирования и встроенных средств защищенной ОС. Подобная схема решает вопросы архивации, ротации и оповещения администратора. В качестве реализации Syslog на современных дистрибутивах Linux часто используется journald (компонент системного менеджера Systemd), который имеет множество настроек и даже позволяет отправлять журналы на внешние хосты.

Включение журнала

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

Для примера, задействуем файл журнала при запуске инстанса:

Вывод журнала в текстовый файл:

picodata run --audit=/tmp/audit.log

Вывод журнала в syslog:

picodata run --audit=syslog:

Получение доступа к журналу

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

tail -f /tmp/audit.log

Вывод журнала в syslog в современных дистрибутивах Linux предполагает доступ к данным с помощью journalctl (компонента Systemd). Для изоляции событий, относящихся только к инстансу Picodata, используйте такую команду:

journalctl -f _COMM=picodata

См. также: