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 zwiększyć bezpieczeństwo, zaleca się skonfigurowanie bezpiecznego schematu korzystania ze schematów, a także utworzenie dodatkowych ról i użytkowników bazy danych z minimalnymi uprawnieniami. Te role i konta użytkowników powinny być skonfigurowane zgodnie z zasadą najmniejszych uprawnień, to znaczy powinny 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, i utwórz bazę danych Zabbix; właściciel bazy danych to użytkownik określony 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. Wynika to z faktu, że prawo do usunięcia obiektu bazy danych lub zmiany jego definicji jest uprawnieniem przysługującym właścicielowi bazy danych i nie może zostać nadane ani odebrane.
Poniższe polecenia na tej stronie muszą zostać wykonane, gdy połączenie z PostgreSQL jest nawiązane 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 odpowiadającymi im uprawnieniami:
- zbx_srv - rola do uruchamiania serwera Zabbix 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 frontendu Zabbix 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 zapasowych 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 serwera 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 ułatwione dzięki 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żesz 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