Postgres Pro Enterprise 13
Аудит
13
Авторские права
© Postgres Professional, 2023 год.
Авторы: Алексей Береснев, Илья Баштанов, Павел Толмачев
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания 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.
Пользователь Postgres Pro с атрибутом SUPERUSER должен давать
доступ к расширению pg_proaudit и протоколам событий безопасности
только пользователям, исполняющим роль администратора
информационной безопасности.
5
Возможности pg_proaudit
Классы фиксируемых событий
подключения и отключения
команды DDL — создание, изменение и удаление объектов баз данных
команды DML — обращение к объектам баз данных
команды DCL — управление доступом к объектам баз данных
действия, выполняемые заданной ролью
клиент
PostgreSQL
подключения
и отключения
DDL, DML, DCL
действия
роли
Расширение pg_proaudit позволяет отслеживать действия заданных
ролей или следить за операциями с заданными объектами, например,
таблицами, или же с определенными классами объектов. Классы
фиксируемых событий:
команды создания, изменения и удаления объектов
команды управления доступом к объектам баз данных
обращения к объектам баз данных
подключение к базе данных
отключение от базы данных
любые команды, выполняемые заданным пользователем
Фиксируемые события можно задать с помощью функций расширения
или параметров конфигурации сервера.
Полный список регистрируемых событий приведен в документации:
6
Аудит ролей и объектов
Управление аудитом ролей
pg_proaudit_set_role
pg_proaudit_reset_role
Управление аудитом объектов или типов объектов
pg_proaudit_set_object
pg_proaudit_reset_object
Отключение аудита всех событий
pg_proaudit_reset
Текущие настройки
представление pg_proaudit_settings
Расширение pg_proaudit по-разному управляет аудитом для ролей
и объектов СУБД.
Для отслеживания действий, выполняемых конкретными ролями,
используются функции:
pg_proaudit_set_role — регистрация событий для роли;
pg_proaudit_reset_role — отключение регистрации.
Если нужно отслеживать события определенного объекта или типа
объектов базы данных для всех ролей, используют функцию:
pg_proaudit_set_object — регистрация событий для объекта или типа
объектов;
pg_proaudit_reset_object — отключение регистрации.
Функция pg_proaudit_reset отключает регистрацию всех событий.
Регистрация событий аудита запускается и останавливается
немедленно.
Текущие настройки аудита можно получить с помощью представления
pg_proaudit_settings.
8
Сохранение настроек
Настройки хранятся в файле PGDATA/pg_proaudit.conf
pg_proaudit_save — сохраняет настройки регистрации событий
pg_proaudit_reload — загружает настройки регистрации
Файл pg_proaudit.conf можно редактировать напрямую,
но после этого надо перечитать настройки
Настройки аудита, произведенные SQL-командами расширения
pg_proaudit, будут потеряны после перезагрузки сервера, если не
сохранить их в файле настроек pg_proaudit.conf.
Файл pg_proaudit.conf размещается в каталоге кластера данных
(PGDATA), изменить его расположение нельзя.
Для сохранения текущих настроек в этот файл предназначена функция
pg_proaudit_save. Аудита можно настраивать и непосредственным
редактированием файла pg_proaudit.conf, но это не так удобно, как
вызов функций расширения.
Если изменить настройки непосредственно в файле pg_proaudit.conf,
их нужно считать и применить функцией pg_proaudit_reload.
Настройки из файла автоматически считываются при запуске сервера.
10
клиент
PostgreSQL
Запись событий аудита
Запись событий
в CSV-файлы на сервере
в канал журналирования syslog
одновременно в оба приемника
CSV
syslog
pg_proaudit.log_destination
Параметр расширения pg_proaudit.log_destination определяет способ
фиксации событий безопасности:
csvlog — записывать события в файл CSV;
syslog — передавать события в syslog.
Формат строк CSV предопределен в расширении. Параметр
pg_proaudit.log_filename задает шаблон имен файлов CSV. Параметр
pg_proaudit.log_rotation_size задает максимальный размер файла
протокола в килобайтах. Другой способ настройки ротации файлов
протоколов — по времени, устанавливается параметром
pg_proaudit.log_rotation_age.
Чтобы просматривать сообщения аудита в формате CSV из СУБД,
можно подключить расширение file_fdw и использовать внешнюю
таблицу (FOREIGN TABLE).
Передача сообщений в syslog удобнее для централизованной сборки
протоколов. Популярные реализации службы syslog предоставляют
возможности сложной фильтрации, копирования и передачи по сети
сообщений протоколов, но формат строк сообщений в таких службах
может быть разным.
Полный список параметров конфигурации записи событий аудита
в протокол содержится в документации:
12
Итоги
Расширение pg_proaudit протоколирует события аудита
независимо от обычного журнала сообщений
Аудиту подлежат подключения и отключения, операции
с объектами баз данных и действия ролей
Журнал аудита может сохраняться как в формате CSV, так и
передаваться службе syslog
13
Практика
1. Настройте аудит для записи в CSV и syslog одновременно.
2. Включите аудит регистрации ролей и создания таблиц.
3. Зарегистрируйте новую роль observed1 и настройте аудит
подключений и отключений для этой роли.
4. Создайте таблицу tab1 так, чтобы роль observed1 могла
выполнять команды DML с этой таблицей, владельцем
таблицы должен быть другой пользователь.
5. Настройте регистрацию команд DML, выполненных любым
пользователем, для таблицы tab1.
1. После подключения аудита используйте команду ALTER SYSTEM
SET pg_proaudit.log_destination = 'csvlog,syslog'; для записи сообщений
аудита и в файл и в syslog. Сообщения syslog будут записываться
в файл /var/log/syslog, для чтения сообщений необходимо в командной
строке Bash использовать sudo в сеансе пользователя student.
2. Для настройки аудита используйте функцию pg_proaudit_set_object.
В заданиях с 3 по 5 просматривать сообщения аудита в файле CSV
нужно в каталоге /var/lib/pgpro/ent-13/pg_proaudit. Это удобно делать из
сеанса пользователя ОС postgres, который можно запустить командой
sudo -i -u postgres. Просматривать файл журнала сообщений
/var/log/syslog проще всего в сеансе пользователя ОС student
с помощью команды sudo grep pg_proaudit /var/log/syslog | tail.