2 Proteger PostgreSQL/TimescaleDB

Descripción general

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

Para una configuración sencilla, se recomienda seguir las instrucciones predeterminadas de creación de base de datos PostgreSQL, que incluyen la creación del usuario 'zabbix' con privilegios completos en la base de datos 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 de base de datos adicionales y usuarios con privilegios mínimos. Estos roles y usuarios deben configurarse según el principio de privilegio mínimo, es decir, sólo deben tener privilegios que sean 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 especificado en la creación de 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

El propietario de la base de datos debe realizar una instalación limpia o una actualización de la base de datos. Esto se debe a que el derecho a eliminar un objeto de base de datos o modificar su definición es un privilegio inherente al propietario de la base de datos y no se puede otorgar ni revocar.

Los siguientes comandos en 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 configure el propietario de la base de datos (usr_owner) para que sea el propietario de este esquema:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Configure un esquema de patrón de uso seguro:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
       REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
       -- Nota: search_path debe apuntar al esquema "zabbix":
       ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";

Después de configurar la base de datos, proceda a crear los roles de usuario.

Crear roles de usuario

Cree los siguientes roles con los privilegios correspondientes:

  • zbx_srv - rol para ejecutar el servidor y el proxy 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 - rol para ejecutar la interfaz y API de Zabbix:
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 la tabla:
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 sólo es posible por el propietario de la base de datos.

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

Asignar de roles de usuario

Para asignar los roles de usuario creados, cree usuarios y asígneles los roles relevantes. Reemplace <usuario>, <rol> y <contraseña> según sea necesario.

CREATE USER <usuario> WITH ENCRYPTED password '<contraseña>';
       GRANT <rol> TO <usuario>;

Por ejemplo, para crear y asignar la función para ejecutar el servidor y el proxy Zabbix:

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

Partición de bases de datos con TimescaleDB

TimescaleDB facilita la partición de la base de datos. Para utilizar TimescaleDB, el servidor Zabbix requiere privilegios de propietario de la base de datos.

Si el esquema zabbix de PostgreSQL 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