Se encuentra viendo la documentación de la versión en desarrollo, puede estar incompleta.
Esta página fue traducida automáticamente. Si detectas un error, selecciónalo y presiona Ctrl+Enter para informarlo a los editores.

2 Asegurando PostgreSQL/TimescaleDB

Descripción general

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

Para una configuración básica, consulte las instrucciones predeterminadas de creación de 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 esquemas seguro, así como crear roles y usuarios de base de datos adicionales con los privilegios mínimos necesarios. Estos roles y usuarios deben configurarse según el principio de privilegio mínimo, 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 de 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 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 alterar su definición es un privilegio inherente al propietario de la base de datos y no puede ser concedido ni revocado.

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 establezca que el propietario de la base de datos (usr_owner) sea el propietario de este esquema:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Configure un patrón de uso de esquema 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, 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 el servidor y proxy de 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 el frontend y la 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 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, pueden ser asignados 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 el servidor y proxy de Zabbix:

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

Particionamiento de la base de datos con TimescaleDB

El particionamiento de la base de datos es facilitado por TimescaleDB. Para utilizar TimescaleDB, el servidor Zabbix requiere privilegios de propietario de la base de datos.

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