Безопасность
Аудит
16
Авторские права
© Postgres Professional, 2023–2026
Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев, Игорь
Гнатюк
Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы
Расширение pg_proaudit
Возможности pg_proaudit
Аудит ролей и объектов
Сохранение настроек
Запись событий аудита
3
Расширение pg_proaudit
Аудит — средство сбора событий безопасности
не отладка (поиск ошибок и неисправностей)
не мониторинг (выявление аномалий и проблем)
Не зависит от обычного журнала сообщений
отдельный фоновый процесс
отдельный журнал событий безопасности
Доступ к расширению и журналу событий безопасности
должен быть предоставлен только уполномоченным ролям
Аудит регистрирует действия, связанные с объектами кластера баз
данных. При этом поток регистрируемых событий может быть очень
велик, что затрудняет анализ инцидентов и увеличивает нагрузку на
систему. Поэтому требуется точный выбор объектов наблюдения.
Расширение pg_proaudit разработано в Postgres Professional для
регистрации событий, связанных с безопасностью. Оно реализует
концепцию независимости подсистемы аудита. Для этого запускается
отдельный фоновый процесс pg_proaudit logging worker, который
регистрирует события безопасности независимо от записи в обычный
журнал сообщений сервера.
Место размещения журнала событий безопасности (журнал аудита)
в файловой системе и настройки для передачи сообщений в syslog
или во внешнюю систему определяются параметрами конфигурации
расширения pg_proaudit. Каждое событие описывается фиксированным
набором полей, для него формируется отдельная строка журнала или
отдельное сообщение.
Доступ к расширению pg_proaudit и журналам аудита следует
предоставлять только пользователям, исполняющим роль
администратора информационной безопасности (например,
администратору безопасности; см. тему «Защищенная схема»).
5
Возможности pg_proaudit
Классы фиксируемых событий
команды DDL — создание, изменение и удаление объектов баз данных
команды DCL — управление доступом к объектам баз данных
команды DML — обращение к объектам баз данных
подключения и отключения
действия, выполняемые заданной ролью
клиент
PostgreSQL
подключения
и отключения
DDL, DML, DCL
действия
роли
Расширение pg_proaudit позволяет отслеживать действия заданных
ролей, а также следить за операциями с заданными объектами
(например, конкретными таблицами) или с определенными классами
объектов и событий:
●
команды создания, изменения и удаления объектов СУБД;
●
команды управления доступом к объектам баз данных;
●
команды обращения к объектам баз данных;
●
события аутентификации или отключения от баз данных;
●
любые команды, выполняемые заданным пользователем.
В том числе можно регистрировать в журнале аудита обращения
к системному каталогу и отслеживать работу с профилями. Есть
возможность исключить аудит временных объектов.
Полный список регистрируемых событий и классов событий:
6
Аудит ролей и объектов
Управление аудитом ролей, объектов или типов объектов
pg_proaudit_set_rule()
pg_proaudit_remove_rule()
Отключение аудита всех событий
pg_proaudit_reset()
Текущие настройки
представление pg_proaudit_settings
Для отслеживания событий или классов событий, выполняемых
ролями (в том числе групповыми), а также событий, связанных
с определенным объектом или типом объектов базы данных, создаются
соответствующие правила. Для работы с правилами используются
функции:
●
pg_proaudit_set_rule — создание правила регистрации;
●
pg_proaudit_remove_rule — удаление правила регистрации.
Функция pg_proaudit_reset отключает регистрацию всех событий.
Регистрация событий аудита запускается и останавливается
немедленно при вызове этих функций.
Текущие настройки аудита (список правил) можно получить с помощью
представления pg_proaudit_settings.
8
Настройки
Настройки, сделанные функциями, необходимо сохранить
в файле PGDATA/pg_proaudit.conf
pg_proaudit_save()
Файл настроек аудита можно отредактировать напрямую,
но после этого надо перечитать
pg_proaudit_reload()
Настройки аудита, произведенные вызовами функций расширения
pg_proaudit, будут потеряны после перезагрузки сервера, если не
сохранить их в файле настроек pg_proaudit.conf.
Файл pg_proaudit.conf размещается в каталоге кластера данных
(PGDATA), изменить его расположение нельзя.
Для сохранения текущих настроек в этот файл предназначена функция
pg_proaudit_save. Аудит можно настраивать и непосредственным
редактированием файла pg_proaudit.conf, но это не так удобно, как
вызов функций расширения.
Если изменить настройки непосредственно в файле pg_proaudit.conf,
их нужно прочитать и применить функцией pg_proaudit_reload.
При запуске сервера настройки из файла считываются автоматически.
10
клиент
PostgreSQL
Запись событий аудита
pg_proaudit.log_destination
syslog, cefsyslog
служба
syslog
файл
SIEM
c
s
v
l
o
g
c
e
f
l
o
g
возможность
ротации
Параметр расширения pg_proaudit.log_des tination определяет способ
регистрации (один или несколько) событий безопасности:
●
csvlog — записывать события в файл CSV.
Параметр pg_proaudit.log_filename задает шаблон имен файлов CSV,
а параметр pg_proaudit.log_rotation_size — максимальный размер
файла в килобайтах. Другой способ настройки ротации файлов
журнала — по времени — устанавливается параметром
pg_proaudit.log_rotation_age.
●
ceflog — передавать события в SIEM-систему в формате CEF.
Поддержка открытого формата событий CEF (Common Event Format)
позволяет отправлять собранные данные различным системам
управления информацией и событиями безопасности (SIEM, Security
Information and Event Management).
●
syslog и cefsyslog — передавать события в службу syslog
в формате syslog или CEF.
Передача сообщений в системную службу регистрации событий и
хранения журналов (syslog) удобна при нескольких источниках
событий. Популярные реализации службы позволяют фильтровать
журнальные сообщения и передавать их по сети другим серверам.
Полный список параметров конфигурации записи событий аудита
в журнал содержится в документации:
12
Итоги
Расширение pg_proaudit регистрирует события аудита
независимо от обычного журнала сообщений
Аудиту подлежат подключения и отключения, операции
с объектами баз данных и действия ролей
Журнал аудита может сохраняться как в формате CSV,
так и передаваться службам SIEM или syslog
13
Практика
1. Настройте аудит для записи в CSV и syslog одновременно.
Включите аудит регистрации ролей и создания таблиц.
В следующих заданиях сравните сообщения, попадающие
в CVS и в syslog.
2. Зарегистрируйте новую роль observed1 и настройте аудит
подключений и отключений для этой роли.
3. Создайте таблицу tab1 так, чтобы роль observed1 могла
выполнять команды DML с этой таблицей; владельцем
таблицы должен быть другой пользователь.
4. Настройте регистрацию команд DML, выполненных любым
пользователем, для таблицы tab1.
1. После подключения аудита используйте команду
ALTER SYSTEM SET pg_proaudit.log_destination = 'csvlog,syslog';
для записи сообщений аудита и в файл, и в syslog.
Для настройки аудита используйте функцию pg_proaudit_set_rule.
В заданиях с 2 по 4 просматривать сообщения аудита в файле CSV
нужно в каталоге /var/lib/pgpro/ent-16/pg_proaudit.
Идентификатор, заранее записанный в параметр сервера syslog_ident,
поможет отфильтровать необходимые строки журнала сообщений
syslog, который находится в файле /var/log/syslog. Воспользуйтесь
следующей командой:
sudo grep -a идентификатор /var/log/syslog | tail