2 Sécurisation de PostgreSQL/TimescaleDB
Aperçu
Cette section contient les bonnes pratiques pour sécuriser une base de données PostgreSQL.
Pour une configuration de base, consultez les instructions par défaut de création de la base de données PostgreSQL, qui incluent la création de l'utilisateur « zabbix » avec tous les privilèges sur la base de données Zabbix. Cet utilisateur est le propriétaire de la base de données et dispose également des privilèges nécessaires pour modifier la structure de la base de données lors de la mise à niveau de Zabbix.
Pour améliorer la sécurité, il est recommandé de configurer un modèle d’utilisation sécurisé des schémas, ainsi que de créer des rôles et des utilisateurs de base de données supplémentaires avec des privilèges minimaux. Ces rôles et utilisateurs doivent être configurés selon le principe du moindre privilège, c’est-à-dire qu’ils ne doivent disposer que des privilèges essentiels à l’exécution des fonctions prévues.
Configuration de la base de données
Créez l'utilisateur qui sera le propriétaire de la base de données, puis créez la base de données Zabbix ; le propriétaire de la base de données est l'utilisateur spécifié lors de la création de la base de données :
createuser -U postgres -h localhost --pwprompt usr_owner
createdb -U postgres -h localhost -O usr_owner -E Unicode -T template0 zabbix
Une installation propre ou une mise à niveau de la base de données doit être effectuée par le propriétaire de la base de données. En effet, le droit de supprimer un objet de base de données ou d’en modifier la définition est un privilège inhérent au propriétaire de la base de données et ne peut être ni accordé ni révoqué.
Les commandes suivantes de cette page doivent être exécutées lorsque la connexion à PostgreSQL est établie spécifiquement à la base de données zabbix.
Créez le schéma zabbix et définissez le propriétaire de la base de données (usr_owner) comme propriétaire de ce schéma :
CREATE SCHEMA zabbix AUTHORIZATION usr_owner;
Configurez un modèle d’utilisation sécurisé du schéma :
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
-- Remarque : search_path doit pointer vers le schéma "zabbix" :
ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";
Après avoir configuré la base de données, passez à la création des rôles utilisateur.
Création des rôles utilisateur
Créez les rôles suivants avec les privilèges correspondants :
- zbx_srv - rôle pour exécuter le serveur et le 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 - rôle pour exécuter l'interface web et l'API 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 - rôle pour la sauvegarde des tables :
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 restauration des tables n'est possible que par le propriétaire de la base de données.
Après la création des rôles, ils peuvent être attribués aux utilisateurs.
Attribution des rôles utilisateur
Pour attribuer les rôles utilisateur créés, créez des utilisateurs et assignez-leur les rôles appropriés.
Remplacez <user>, <role> et <password> selon les besoins.
CREATE USER <user> WITH ENCRYPTED password '<password>';
GRANT <role> TO <user>;
Par exemple, pour créer et attribuer le rôle destiné à l’exécution du serveur et du proxy Zabbix :
CREATE USER usr_srv WITH ENCRYPTED password 'password';
GRANT zbx_srv TO usr_srv;
Partitionnement de la base de données avec TimescaleDB
Le partitionnement de la base de données est facilité par TimescaleDB. Pour utiliser TimescaleDB, le serveur Zabbix nécessite les privilèges du propriétaire de la base de données.
Si le schéma PostgreSQL zabbix a déjà été créé dans la base de données zabbix, vous pouvez activer TimescaleDB avec la commande suivante :
echo "CREATE EXTENSION IF NOT EXISTS timescaledb WITH SCHEMA zabbix CASCADE;" | sudo -u postgres psql zabbix