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

Pārskats

Šī sadaļa satur labāko praksi PostgreSQL datubāzes drošības nodrošināšanai.

Pamata iestatīšanai skatiet noklusējuma PostgreSQL datubāzes izveides instrukcijas, kas ietver 'zabbix' lietotāja 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, veicot Zabbix jaunināšanu.

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 tiek 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ācija vai atjaunināšana ir 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.

Tālāk norādītās komandas šajā lapā ir 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 serveris un starpniekserveris palaiš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 saskarne un API palaiš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 serveris un starpniekserveris palaišanai:

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

Datu bāzes sadalīšana ar TimescaleDB

Datu bāzes sadalīšanu atvieglo TimescaleDB. Lai izmantotu TimescaleDB, Zabbix serverim ir nepieciešamas datu bāzes īpašnieka tiesības.

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

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