2 Protezione di PostgreSQL/TimescaleDB
Panoramica
Questa sezione contiene le best practices per la protezione di un database PostgreSQL.
Per una configurazione di base, consultare le istruzioni predefinite per la creazione del database PostgreSQL, che includono la creazione dell'utente 'zabbix' con privilegi completi sul database Zabbix. Questo utente è il proprietario del database e dispone anche dei privilegi necessari per modificarne la struttura durante l'aggiornamento di Zabbix.
Per migliorare la sicurezza, si consiglia di configurare un modello di utilizzo sicuro dello schema e di creare ruoli e utenti aggiuntivi del database con privilegi minimi. Questi ruoli e utenti devono essere configurati in base al principio del privilegio minimo, ovvero, devono disporre solo dei privilegi essenziali per l'esecuzione delle funzioni previste.
Configurazione del database
Creare l'utente che sarà il proprietario del database e creare il database Zabbix; il proprietario del database è l'utente specificato durante la creazione del database:
createuser -U postgres -h localhost --pwprompt usr_owner
createdb -U postgres -h localhost -O usr_owner -E Unicode -T template0 zabbix
Un'installazione pulita o un aggiornamento del database deve essere eseguito dal proprietario del database. Questo perché il diritto di eliminare un oggetto del database o modificarne la definizione è un privilegio intrinseco del proprietario del database e non può essere concesso né revocato.
I seguenti comandi in questa pagina devono essere eseguiti mentre la connessione a PostgreSQL è stabilita specificamente al database zabbix.
Creare lo schema zabbix e impostare il proprietario del database (usr_owner) come proprietario di questo schema:
CREATE SCHEMA zabbix AUTHORIZATION usr_owner;
Configurare un modello di utilizzo sicuro dello schema:
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
-- Nota: search_path deve puntare allo schema "zabbix":
ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";
Dopo aver configurato il database, procedere con la creazione dei ruoli utente.
Creazione dei ruoli utente
Creare i seguenti ruoli con i privilegi corrispondenti:
- zbx_srv - ruolo per l'esecuzione di Zabbix server e 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 - ruolo per l'esecuzione di Zabbix frontend e 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 - ruolo per il backup delle tabelle:
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;
Il ripristino delle tabelle è possibile solo da parte del proprietario del database.
Dopo aver creato i ruoli, questi possono essere assegnati agli utenti.
Assegnazione dei ruoli utente
Per assegnare i ruoli utente creati, creare gli utenti e assegnare loro i ruoli pertinenti.
Sostituire <user>, <role> e <password> secondo necessità.
CREATE USER <user> WITH ENCRYPTED password '<password>';
GRANT <role> TO <user>;
Ad esempio, per creare e assegnare il ruolo per l'esecuzione del server e del proxy Zabbix:
CREATE USER usr_srv WITH ENCRYPTED password 'password';
GRANT zbx_srv TO usr_srv;
Partizionamento del database con TimescaleDB
Il partizionamento del database è facilitato da TimescaleDB. Per utilizzare TimescaleDB, il server Zabbix richiede i privilegi di proprietario del database.
Se lo schema zabbix di PostgreSQL è già stato creato nel database zabbix, è possibile abilitare TimescaleDB con il seguente comando:
echo "CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix