2 Защита PostgreSQL/TimescaleDB
Обзор
В этом разделе содержатся рекомендации по обеспечению безопасности базы данных PostgreSQL.
Для базовой настройки см. стандартные инструкции по созданию базы данных PostgreSQL, которые включают создание пользователя 'zabbix' с полными привилегиями для базы данных Zabbix. Этот пользователь является владельцем базы данных и также имеет необходимые привилегии для изменения структуры базы данных при обновлении Zabbix.
Для повышения безопасности рекомендуется настроить безопасную схему использования схемы, а также создать дополнительные роли и пользователей базы данных с минимальными привилегиями. Эти роли и пользователи должны быть настроены в соответствии с принципом наименьших привилегий, то есть они должны иметь только те привилегии, которые необходимы для выполнения предусмотренных функций.
Настройка базы данных
Создайте пользователя, который будет владельцем базы данных, и создайте базу данных Zabbix; владелец базы данных — это пользователь, указанный при создании базы данных:
createuser -U postgres -h localhost --pwprompt usr_owner
createdb -U postgres -h localhost -O usr_owner -E Unicode -T template0 zabbix
Чистая установка или обновление базы данных должны выполняться владельцем базы данных. Это связано с тем, что право удалять объект базы данных или изменять его определение является привилегией, изначально принадлежащей владельцу базы данных, и не может быть предоставлено или отозвано.
Следующие команды на этой странице должны выполняться только при подключении к PostgreSQL именно к базе данных zabbix.
Создайте схему zabbix и назначьте владельца базы данных (usr_owner) владельцем этой схемы:
CREATE SCHEMA zabbix AUTHORIZATION usr_owner;
Настройте безопасный шаблон использования схемы:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
-- Примечание: search_path должен указывать на схему "zabbix":
ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";
После настройки базы данных перейдите к созданию ролей пользователей.
Создание ролей пользователей
Создайте следующие роли с соответствующими привилегиями:
- zbx_srv — роль для запуска сервера Zabbix и прокси:
CREATE ROLE zbx_srv;
GRANT CONNECT ON DATABASE zabbix TO zbx_srv;
GRANT USAGE ON SCHEMA zabbix TO zbx_srv;
ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT DELETE, INSERT, SELECT, UPDATE ON TABLES TO zbx_srv;
ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_srv;
- zbx_web — роль для запуска веб-интерфейса Zabbix и API:
CREATE ROLE zbx_web;
GRANT CONNECT ON DATABASE zabbix TO zbx_web;
GRANT USAGE ON SCHEMA zabbix TO zbx_web;
ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT DELETE, INSERT, SELECT, UPDATE ON TABLES TO zbx_web;
ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_web;
- zbx_bckp — роль для резервного копирования таблиц:
CREATE ROLE zbx_bckp;
GRANT CONNECT ON DATABASE zabbix TO zbx_bckp;
GRANT USAGE ON SCHEMA zabbix TO zbx_bckp;
ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT ON TABLES TO zbx_bckp;
ALTER DEFAULT PRIVILEGES FOR ROLE usr_owner IN SCHEMA zabbix GRANT SELECT, UPDATE, USAGE ON sequences TO zbx_bckp;
Восстановление таблиц возможно только владельцем базы данных.
После создания ролей их можно назначить пользователям.
Назначение ролей пользователей
Чтобы назначить созданные роли пользователей, создайте пользователей и назначьте им соответствующие роли.
При необходимости замените <user>, <role> и <password>.
CREATE USER <user> WITH ENCRYPTED password '<password>';
GRANT <role> TO <user>;
Например, чтобы создать и назначить роль для запуска сервера Zabbix и прокси:
CREATE USER usr_srv WITH ENCRYPTED password 'password';
GRANT zbx_srv TO usr_srv;
Секционирование базы данных с помощью TimescaleDB
Секционирование базы данных выполняется с помощью TimescaleDB. Для использования TimescaleDB серверу Zabbix требуются привилегии владельца базы данных.
Если схема PostgreSQL zabbix уже создана в базе данных zabbix, вы можете включить TimescaleDB следующей командой:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix