2 PostgreSQL/TimescaleDB drošības nodrošināšana

Pārskats

Šajā sadaļā ir sniegta paraugprakse PostgreSQL datubāzes drošības nodrošināšanai.

Pamata iestatīšanai skatiet noklusējuma PostgreSQL datubāzes izveides norādījumus, kas ietver lietotāja 'zabbix' izveidi ar pilnām privilēģijām Zabbix datubāzē. Šis lietotājs ir datubāzes īpašnieks, kuram ir arī nepieciešamās privilēģijas datubāzes struktūras modificēšanai, jauninot Zabbix.

Lai uzlabotu drošību, ieteicams konfigurēt drošu shēmas lietošanas modeli, kā arī izveidot papildu datubāzes lomas un lietotājus ar minimālām privilēģijām. Šīs lomas un lietotāji jākonfigurē, pamatojoties uz mazāko privilēģiju principu, tas ir, tiem jābūt tikai tādām privilēģijām, kas ir būtiskas paredzēto funkciju veikšanai.

Datubāzes iestatīšana

Izveidojiet lietotāju, kas būs datubāzes īpašnieks, un izveidojiet Zabbix datubāzi; datubāzes īpašnieks ir lietotājs, kas ir norādīts datubāzes izveides laikā:

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

Tīra datubāzes instalēšana vai jaunināšana jāveic datubāzes īpašniekam. Tas ir tāpēc, ka tiesības dzēst datubāzes objektu vai mainīt tā definīciju ir privilēģija, kas ir raksturīga datubāzes īpašniekam un ko nevar piešķirt vai atsaukt.

Šajā lapā norādītās komandas jāizpilda, kamēr savienojums ar PostgreSQL ir izveidots tieši ar zabbix datubāzi.

Izveidojiet zabbix shēmu un iestatiet datubāzes īpašnieku (usr_owner) kā šīs shēmas īpašnieku:

CREATE SCHEMA zabbix AUTHORIZATION usr_owner;

Konfigurējiet drošu shēmas lietošanas modeli:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE ALL ON DATABASE zabbix FROM PUBLIC;
-- Piezīme: search_path jānorāda uz "zabbix" shēmu:
ALTER ROLE ALL IN DATABASE zabbix SET search_path = "zabbix";

Pēc datubāzes iestatīšanas turpiniet ar lietotāju lomu izveidi.

Lietotāju lomu izveide

Izveidojiet šādas lomas ar atbilstošajām privilēģijām:

  • zbx_srv - loma Zabbix servera un starpniekservera darbināšanai:
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 - loma Zabbix lietotāja saskarnes un API darbināšanai:
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 - loma tabulu dublēšanai:
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;

Tabulu atjaunošana ir iespējama tikai datubāzes īpašniekam.

Pēc lomu izveides tās var piešķirt lietotājiem.

Lietotāju lomu piešķiršana

Lai piešķirtu izveidotās lietotāju lomas, izveidojiet lietotājus un piešķiriet tiem atbilstošās lomas. Aizstājiet <user>, <role> un <password> pēc nepieciešamības.

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

Piemēram, lai izveidotu un piešķirtu lomu Zabbix servera un starpniekservera darbināšanai:

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

Datubāzes particionēšana ar TimescaleDB

Datubāzes particionēšanu atvieglo TimescaleDB. Lai izmantotu TimescaleDB, Zabbix serverim ir nepieciešamas datubāzes īpašnieka privilēģijas.

Ja PostgreSQL zabbix shēma jau ir izveidota zabbix datubāzē, varat iespējot TimescaleDB ar šādu komandu:

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