2 Absicherung von PostgreSQL/TimescaleDB

Überblick

Dieser Abschnitt enthält Best Practices für die Absicherung einer PostgreSQL-Datenbank.

Für eine grundlegende Einrichtung siehe die standardmäßigen Anweisungen zur Erstellung einer PostgreSQL-Datenbank, die auch die Erstellung des Benutzers „zabbix“ mit vollständigen Berechtigungen für die Zabbix-Datenbank umfassen. Dieser Benutzer ist der Eigentümer der Datenbank und verfügt außerdem über die erforderlichen Berechtigungen, um die Datenbankstruktur bei einem Upgrade von Zabbix zu ändern.

Zur Verbesserung der Sicherheit wird empfohlen, ein sicheres Nutzungsmuster für Schemas zu konfigurieren sowie zusätzliche Datenbankrollen und Benutzer mit minimalen Berechtigungen zu erstellen. Diese Rollen und Benutzer sollten gemäß dem Prinzip der geringsten Privilegien konfiguriert werden, das heißt, sie sollten nur über die Berechtigungen verfügen, die für die Ausführung der vorgesehenen Funktionen unbedingt erforderlich sind.

Datenbankeinrichtung

Erstellen Sie den Benutzer, der Eigentümer der Datenbank sein wird, und erstellen Sie die Zabbix-Datenbank; der Datenbankeigentümer ist der Benutzer, der bei der Erstellung der Datenbank angegeben wird:

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

Eine Neuinstallation oder ein Upgrade der Datenbank muss durch den Datenbankeigentümer durchgeführt werden. Der Grund dafür ist, dass das Recht, ein Datenbankobjekt zu löschen oder seine Definition zu ändern, ein Privileg ist, das dem Datenbankeigentümer inhärent ist und nicht gewährt oder entzogen werden kann.

Die folgenden Befehle auf dieser Seite müssen ausgeführt werden, während die Verbindung zu PostgreSQL speziell mit der Datenbank zabbix hergestellt ist.

Erstellen Sie das Schema zabbix und legen Sie den Datenbankeigentümer (usr_owner) als Eigentümer dieses Schemas fest:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Konfigurieren Sie ein sicheres Nutzungsmuster für Schemas:

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";

Fahren Sie nach der Einrichtung der Datenbank mit der Erstellung von Benutzerrollen fort.

Erstellen von Benutzerrollen

Erstellen Sie die folgenden Rollen mit den entsprechenden Berechtigungen:

  • zbx_srv - Rolle zum Ausführen von Zabbix Server und 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 - Rolle zum Ausführen von Zabbix Frontend und 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 - Rolle für die Tabellensicherung:
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;

Die Wiederherstellung von Tabellen ist nur durch den Eigentümer der Datenbank möglich.

Nach dem Erstellen der Rollen können diese Benutzern zugewiesen werden.

Zuweisen von Benutzerrollen

Um die erstellten Benutzerrollen zuzuweisen, erstellen Sie Benutzer und weisen Sie ihnen die entsprechenden Rollen zu. Ersetzen Sie <user>, <role> und <password> nach Bedarf.

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

Um beispielsweise die Rolle für den Betrieb von Zabbix Server und Proxy zu erstellen und zuzuweisen:

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

Datenbankpartitionierung mit TimescaleDB

Die Datenbankpartitionierung wird durch TimescaleDB erleichtert. Um TimescaleDB zu nutzen, benötigt der Zabbix Server Datenbankeigentümerrechte.

Wenn das PostgreSQL-Schema zabbix bereits in der Datenbank zabbix erstellt wurde, können Sie TimescaleDB mit folgendem Befehl aktivieren:

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