2 Zabezpieczanie PostgreSQL/TimescaleDB

Przegląd

Ta sekcja zawiera najlepsze praktyki dotyczące zabezpieczania bazy danych PostgreSQL.

W przypadku podstawowej konfiguracji zobacz domyślne instrukcje tworzenia bazy danych PostgreSQL, które obejmują utworzenie użytkownika 'zabbix' z pełnymi uprawnieniami do bazy danych Zabbix. Ten użytkownik jest właścicielem bazy danych i ma również niezbędne uprawnienia do modyfikowania struktury bazy danych podczas aktualizacji Zabbix.

Aby poprawić bezpieczeństwo, zaleca się skonfigurowanie bezpiecznego sposobu korzystania ze schematu, a także utworzenie dodatkowych ról i użytkowników bazy danych z minimalnymi uprawnieniami. Role i użytkownicy powinni być skonfigurowani zgodnie z zasadą najmniejszych uprawnień, to znaczy powinni mieć wyłącznie uprawnienia niezbędne do wykonywania zamierzonych funkcji.

Konfiguracja bazy danych

Utwórz użytkownika, który będzie właścicielem bazy danych, oraz utwórz bazę danych Zabbix; właścicielem bazy danych jest użytkownik wskazany podczas tworzenia bazy danych:

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

Czysta instalacja lub aktualizacja bazy danych musi zostać wykonana przez właściciela bazy danych. Dzieje się tak, ponieważ prawo do usunięcia obiektu bazy danych lub zmiany jego definicji jest uprawnieniem wynikającym z własności bazy danych i nie może zostać przyznane ani odebrane.

Poniższe polecenia na tej stronie muszą zostać wykonane przy połączeniu z PostgreSQL ustanowionym konkretnie z bazą danych zabbix.

Utwórz schemat zabbix i ustaw właściciela bazy danych (usr_owner) jako właściciela tego schematu:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Skonfiguruj bezpieczny wzorzec użycia schematu:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
-- Uwaga: search_path powinien wskazywać na schemat "zabbix":
ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";

Po skonfigurowaniu bazy danych przejdź do tworzenia ról użytkowników.

Tworzenie ról użytkowników

Utwórz następujące role z odpowiednimi uprawnieniami:

  • zbx_srv - rola do uruchamiania Zabbix server i 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 - rola do uruchamiania Zabbix frontend i 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 - rola do tworzenia kopii zapasowej tabel:
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;

Przywracanie tabel jest możliwe tylko przez właściciela bazy danych.

Po utworzeniu ról można je przypisać użytkownikom.

Przypisywanie ról użytkowników

Aby przypisać utworzone role użytkowników, utwórz użytkowników i przypisz im odpowiednie role. W razie potrzeby zastąp <user>, <role> i <password>.

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

Na przykład, aby utworzyć i przypisać rolę do uruchamiania serwer Zabbix i proxy:

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

Partycjonowanie bazy danych z TimescaleDB

Partycjonowanie bazy danych jest obsługiwane przez TimescaleDB. Aby korzystać z TimescaleDB, serwer Zabbix wymaga uprawnień właściciela bazy danych.

Jeśli schemat PostgreSQL zabbix został już utworzony w bazie danych zabbix, można włączyć TimescaleDB za pomocą następującego polecenia:

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