2 Asegurar PostgreSQL/TimescaleDB

Resumen

Esta sección contiene las mejores prácticas para proteger una base de datos PostgreSQL.

Para una configuración básica, consulte las instrucciones predeterminadas de creación de la base de datos PostgreSQL, que incluyen la creación del usuario 'zabbix' con privilegios completos sobre la base de datos de Zabbix. Este usuario es el propietario de la base de datos y también tiene los privilegios necesarios para modificar la estructura de la base de datos al actualizar Zabbix.

Para mejorar la seguridad, se recomienda configurar un patrón de uso de esquema seguro, así como crear roles y usuarios adicionales de base de datos con privilegios mínimos. Estos roles y usuarios deben configurarse según el principio de mínimo privilegio, es decir, solo deben tener los privilegios esenciales para realizar las funciones previstas.

Configuración de la base de datos

Cree el usuario que será el propietario de la base de datos y cree la base de datos Zabbix; el propietario de la base de datos es el usuario que se especifica al crear la base de datos:

createuser -U postgres -h localhost --pwprompt usr_owner
createdb -U postgres -h localhost -O usr_owner -E Unicode -T template0 zabbix

Una instalación limpia o una actualización de la base de datos debe ser realizada por el propietario de la base de datos. Esto se debe a que el derecho a eliminar un objeto de la base de datos o a modificar su definición es un privilegio inherente al propietario de la base de datos y no puede concederse ni revocarse.

Los siguientes comandos de esta página deben ejecutarse mientras la conexión a PostgreSQL se realiza específicamente a la base de datos zabbix.

Cree el esquema zabbix y establezca al propietario de la base de datos (usr_owner) como propietario de este esquema:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Configure un patrón de uso seguro del esquema usage pattern:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
-- Note: search_path should point to the "zabbix" schema:
ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";

Después de configurar la base de datos, continúe con la creación de roles de usuario.

Creación de roles de usuario

Cree los siguientes roles con los privilegios correspondientes:

  • zbx_srv - rol para ejecutar Zabbix server y proxy:
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 - rol para ejecutar Zabbix frontend y 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 - rol para la copia de seguridad de tablas:
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;

La restauración de tablas solo es posible por el propietario de la base de datos.

Después de crear los roles, se pueden asignar a los usuarios.

Asignación de roles de usuario

Para asignar los roles de usuario creados, cree usuarios y asígneles los roles correspondientes. Reemplace <user>, <role> y <password> según sea necesario.

CREATE USER <user> WITH ENCRYPTED password '<password>';
GRANT <role> TO <user>;

Por ejemplo, para crear y asignar el rol para ejecutar Zabbix server y proxy:

CREATE USER usr_srv WITH ENCRYPTED password 'password';
GRANT zbx_srv TO usr_srv;

Particionado de base de datos con TimescaleDB

El particionado de la base de datos está facilitado por TimescaleDB. Para utilizar TimescaleDB, el server de Zabbix requiere privilegios de propietario de la base de datos.

Si el esquema PostgreSQL zabbix ya se ha creado en la base de datos zabbix, puede habilitar TimescaleDB con el siguiente comando:

echo "CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix