Bezpečnostní audity jsou nezbytností ve všech společnostech, aby chránily data a předešly možnému narušení bezpečnosti, ale je to také časově náročný úkol, protože musíte pravidelně kontrolovat spoustu věcí. Výsledkem je, že společnosti obecně dodržují kontrolní seznam zabezpečení a konfigurují vše tak, aby jej pokryly, ale nemají bezpečnostní audity. Můžete říci:„Pokud všechno funguje dobře, nech to tak, jak to je“. Ve skutečnosti nemůžete věřit, že zásady zabezpečení, které nyní konfigurujete, budou užitečné v budoucnu a že se nic nezmění, aby je ovlivnilo. Řešením by mohla být automatizace těchto bezpečnostních auditů nebo způsob, jak to pravidelně provádět uživatelsky přívětivým způsobem.
V tomto blogu uvidíme, jak provádět různé bezpečnostní audity pro PostgreSQL a jak je automatizovat pomocí ClusterControl.
Co potřebujete k provedení bezpečnostního auditu na PostgreSQL?
Podívejme se na některé z nejdůležitějších věcí, které je třeba auditovat z bezpečnostních důvodů v databázi PostgreSQL:
-
Komunikace:Komunikace ve všech vašich systémech musí být šifrována a musíte omezit provoz pouze na ten, který přichází ze známých zdrojů, abyste snížili riziko neoprávněného přístupu k vašim datům.
-
Přístup k databázi:Musíte omezit fyzický i vzdálený přístup k vašim databázím. Vzdálený přístup lze omezit povolením připojení pouze ze známých zdrojů pro každého uživatele nebo dokonce pomocí připojení SSH nebo VPN.
-
Uživatelské účty:Existuje mnoho způsobů, jak zlepšit zabezpečení vašich uživatelských účtů v PostgreSQL, jako je odstranění neaktivních uživatelů , udělování pouze nezbytných oprávnění atd.
-
Instalace a konfigurace:Pro zabezpečení instalace PostgreSQL je třeba provést několik změn, například nainstalovat pouze nezbytné balíčky, změna výchozích přihlašovacích údajů a konfigurace atd.
-
Audit a protokolování:Výkazy protokolování vám mohou pomoci odhalit bezpečnostní problémy nebo se jim vyhnout, pokud je zachytíte včas . Můžete použít standardní protokolovací zařízení PostgreSQL, ale můžete také použít rozšíření jako pgAudit pro podrobnější protokolování.
-
Upgrady:Udržujte svůj operační systém a databázi co nejaktuálnější pomocí oprav a aktualizací zabezpečení.
-
Monitor dotazů:Měli byste zkontrolovat provoz, abyste odhalili abnormální dotazy nebo útoky DoS.
-
Monitorování:Chcete-li znát stav svých systémů, budete potřebovat dobrý monitorovací systém. To by mohlo být užitečné k nalezení bezpečnostních problémů nebo dokonce k tomu, abyste se jim vyhnuli.
Nyní víme, co zkontrolovat. Pojďme se podívat na možnost automatizace těchto úloh – ClusterControl.
Bezpečnostní audity pro PostgreSQL s ClusterControl
Pro audity zabezpečení PostgreSQL je ClusterControl dobrou volbou, protože je to systém pro správu a monitorování, který vám pomáhá nasazovat, spravovat, monitorovat a škálovat databáze z uživatelsky přívětivého rozhraní. Podporuje špičkové technologie open source databází a můžete automatizovat mnoho databázových úloh, které musíte pravidelně provádět, jako je přidávání a škálování nových uzlů, spouštění záloh a obnovy a další.
Podívejme se, jak můžete pokrýt výše uvedené bezpečnostní kontroly pomocí ClusterControl.
Komunikace
V sekci zabezpečení (ClusterControl -> Vyberte Cluster -> karta Zabezpečení) můžete povolit šifrování SSL pro šifrování spojení mezi klienty a serverem.
Přístup z ClusterControl k uzlům je také zabezpečen pomocí SSH bez hesla s párem klíčů.
Přístup k databázi
Můžete omezit přístup ke své databázi PostgreSQL úpravou konfiguračního souboru pg_hba.conf z uživatelského rozhraní ClusterControl (ClusterControl -> Vybrat cluster -> Spravovat -> Konfigurace). Tímto způsobem můžete zadat následující možnosti:
-
Typ:Zde jsou nejpoužívanější možnosti „místní“ pro soket domény Unix a „hostitel“ pro prostý nebo SSL šifrovaný TCP/IP soket, ale existují další možnosti jako "hostssl" a další.
-
Databáze:Může to být "all", "sameuser", "samerole", "replication", a název databáze nebo seznam názvů databází oddělených čárkami.
-
Uživatel:Může to být "vše", uživatelské jméno, název skupiny s předponou "+", nebo jejich seznam oddělený čárkami.
-
Adresa:Název hostitele nebo IP adresa a maska CIDR.
-
Metoda:Zde se nejčastěji používají "důvěra", "odmítnout", "md5", "ident" a „peer“, ale existuje více možností, jako je „scram-sha-256“ nebo „ldap“.
Příklad:
# TYPE DATABASE USER ADDRESS METHOD
host all admindb 10.10.10.121/32 md5
Uživatelské účty
Uživatele databáze můžete spravovat z uživatelského rozhraní ClusterControl (ClusterControl -> Vyberte Cluster -> Spravovat -> Správa uživatelů). Můžete vytvářet nové uživatele nebo upravovat a mazat stávající a přidělovat jim odpovídající oprávnění.
Instalace a konfigurace
Můžete nasadit nový cluster PostgreSQL nebo importovat existující. S vaším PostgreSQL clusterem přidaným do ClusterControl můžete spravovat aktuální konfiguraci (ClusterControl -> Select Cluster -> Manage -> Configuration), nebo dokonce přidávat nové uzly do clusteru.
Během implementace můžete upravit konfiguraci databáze, jako je port databáze nebo přihlašovací údaje, a ClusterControl pak nainstaluje pouze balíčky potřebné k nasazení vašeho nového clusteru.
Audit a protokolování
Standardní protokolování PostgreSQL můžete zkontrolovat v uživatelském rozhraní ClusterControl (ClusterControl -> Select Cluster -> Logs -> System Logs) nebo dokonce povolit rozšíření pgAudit z ClusterControl a zkontrolovat protokolování auditu na stejném místě .
Upgrady
V případě menších upgradů můžete pro tento úkol použít ClusterControl. Můžete vstoupit do uživatelského rozhraní a spustit upgrade (ClusterControl -> Select Cluster -> Manage -> Upgrades), nebo použít provozní sestavu ClusterControl „Upgrades Package“, abyste obdrželi dostupné balíčky e-mailem nebo si je mohli zkontrolovat v uživatelském rozhraní ClusterControl.
Monitor dotazů
V sekci sledování dotazů můžete najít nejčastější dotazy, spuštěné dotazy, odlehlé hodnoty dotazů a statistiky dotazů pro sledování provozu databáze.
Monitorování
ClusterControl vám umožňuje monitorovat vaše servery v reálném čase pomocí předem definované sady řídicích panelů pro analýzu některých nejběžnějších metrik.
ClusterControl vám umožňuje přizpůsobit grafy dostupné v clusteru a můžete povolit monitorování založené na agentech, abyste mohli generovat podrobnější řídicí panely.
Můžete také vytvářet výstrahy, které vás informují o událostech ve vašem clusteru, nebo je lze integrovat s různými službami, jako je PagerDuty nebo Slack.
Provozní zprávy
Pokud nechcete přistupovat k uživatelskému rozhraní ClusterControl a kontrolovat stav vašich clusterů, můžete vytvořit nebo naplánovat provozní sestavy.
Provozní zprávy vám poskytují informace o stavu vaší databáze, které můžete použít k auditu vašeho prostředí. Tyto zprávy se skládají z různých kontrol a řeší různé každodenní úkoly DBA. Myšlenkou ClusterControl Operational Reporting je dát všechna nejdůležitější data do jediného dokumentu, který lze rychle analyzovat, abyste získali jasnou představu o stavu databází a jejich procesech.
Můžete naplánovat přehledy jako „Denní systémová zpráva“, „Zpráva o aktualizaci balíčku“, „Zpráva o změně schématu“, „Zálohy“ a „Dostupnost“ a můžete je dostávat ve více než jednom e-mailu adresu.
Použití ClusterControl CLI pro automatizaci auditů zabezpečení
ClusterControl CLI, také známý jako s9s, je nástroj příkazového řádku představený ve verzi ClusterControl 1.4.1 pro interakci, ovládání a správu databázových clusterů pomocí systému ClusterControl. ClusterControl CLI otevírá nové dveře pro automatizaci clusteru, kde jej můžete snadno integrovat se stávajícími nástroji pro automatizaci nasazení, jako je Ansible, Puppet, Chef atd. Nástroj příkazového řádku se vyvolá spuštěním binárního souboru nazvaného s9s, který je standardně přidán do instalace ClusterControl.
Podívejme se na několik příkladů tohoto mocného nástroje. Za tímto účelem se podíváme, jak provádět zmíněné úlohy Security Audit pomocí CLI ClusterControl.
Komunikace
Šifrování SSL můžete ve svém clusteru povolit pomocí následujícího příkazu:
$ s9s cluster --enable-ssl --cluster-id=ID
Kde ID je číslo ID clusteru:průběh tohoto úkolu (a ostatních úkolů) můžete sledovat vypsáním postupu úlohy.
$ s9s job --list
Přístup k databázi
Můžete zkontrolovat konfiguraci databáze a ověřit povolený přístup:
$ s9s node --cluster-id=ID \
--nodes="IP_ADDRESS:PORT" \
--list-config
GROUP OPTION NAME VALUE
- data_directory '/var/lib/pgsql/13/data'
- hba_file '/var/lib/pgsql/13/data/pg_hba.conf'
- ident_file '/var/lib/pgsql/13/data/pg_ident.conf'
- listen_addresses '*'
- port 5432
- max_connections 100
- ssl on
- ssl_ca_file '/etc/ssl/postgresql_single/cluster_47/server_ca.crt'
- ssl_cert_file '/etc/ssl/postgresql_single/cluster_47/server.crt'
...
Kde ID je číslo ID clusteru, IP_ADDRESS a PORT jsou IP adresa a port vaší databáze.
Uživatelské účty
Můžete uvést uživatelské účty, které jsou v clusteru:
$ s9s accounts --list --cluster-id=ID --long
NAME P CONN MAXC GRANTS
's9spostgresqlchk'@'%' N 0 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
'postgres'@'%' N 1 0 LOGIN,SUPERUSER,INHERIT,REPLICATION,CREATEROLE,CREATEDB
'pg_write_server_files'@'%' N 0 0 INHERIT
...
'cmon_replication'@'%' N 2 0 LOGIN,INHERIT,REPLICATION
'admindb'@'%' N 3 0 LOGIN,SUPERUSER,INHERIT,CREATEROLE,CREATEDB
Kde ID je číslo ID clusteru.
Instalace a konfigurace
Můžete vytvářet nové clustery, přidávat nové uzly databáze nebo dokonce měnit stávající konfigurace v clusteru:
$ s9s cluster --create \
--cluster-type=postgresql \
--nodes="IP_ADDRESS1?master;IP_ADDRESS2?slave;IP_ADDRESS3?slave;" \
--db-admin="DBUSER" \
--db-admin-passwd="DBPASSWORD" \
--cluster-name=PG1 \
--os-user=OSUSER \
--os-key-file=/home/OSUSER/.ssh/id_rsa \
--provider-version=13 \
--log
Kde IP_ADDRESS je IP adresa vaší databáze a musíte nahradit DBUSER, DBPASSWORD a OSUSER pro přihlašovací údaje databáze a uživatele operačního systému.
Audit a protokolování
Protokolování auditu můžete povolit z příkazového řádku pomocí následujícího příkazu:
$ s9s cluster --setup-audit-logging --cluster-id=ID
Kde ID je číslo ID clusteru:pak můžete zkontrolovat protokoly s informacemi protokolování auditu.
Upgrady
Můžete vytvářet sestavy, abyste viděli, zda potřebujete upgradovat databáze nebo balíčky operačních systémů.
$ s9s report --cluster-id=ID --type=upgrade --create
Kde ID je číslo Cluster ID:na základě této zprávy můžete naplánovat okna údržby pro spuštění upgradů a lze to provést také z ClusterControl.
Monitor dotazů
Můžete zkontrolovat proces běžící na vašich uzlech a filtrovat je podle dotazu, zdroje a dalších.
$ s9s process \
--top-queries \
--cluster-id=ID \
--update-freq=1 \
'INSERT*'
$ s9s process \
--list-queries \
--cluster-id=ID \
--client='IP_ADDRESS:*' \
'INSERT*'
Monitorování
Odtud máte různé možnosti sledování svých systémů. Můžete zkontrolovat stav všech clusterů, zkontrolovat jeden z nich nebo dokonce zkontrolovat alarmy v reálném čase.
$ s9s cluster --list --long
ID STATE TYPE OWNER GROUP NAME COMMENT
1 STARTED postgresql_single system admins PostgreSQL Cluster All nodes are operational.
2 FAILURE galera system admins PXC57 Cluster failure.
3 STARTED replication system admins MariaDB104 All nodes are operational.
4 STARTED mongodb system admins MongoDB42 All nodes are operational.
Total: 4
$ s9s alarm --cluster-name="PostgreSQL Cluster" --list
ID CID SEVERITY COMPONENT TYPE HOSTNAME TITLE
263 1 CRITICAL Network HostSshFailed haproxy1 SSH failed
264 1 CRITICAL Network HostSshFailed haproxy2 SSH failed
265 1 CRITICAL Network HostSshFailed postgresql2 SSH failed
266 1 CRITICAL Network HostSshFailed postgresql3 SSH failed
...
Zprávy o provozu
Můžete vytvářet provozní zprávy a kontrolovat je z příkazového řádku. Stejná sestava je k dispozici v uživatelském rozhraní ClusterControl.
$ s9s report --cluster-id=ID --type=default --create
Toto byly jen některé základní příklady, které ukazují, jaké druhy věcí můžete provádět pomocí rozhraní CLI ClusterControl. Další informace o nástroji naleznete v oficiální dokumentaci.
Závěr
Vždy existuje riziko hacknutí, ale mezeru ve zranitelnosti na clusteru PostgreSQL můžete uzavřít kontrolou výše uvedených bodů. Chcete-li tento úkol mnohem usnadnit, můžete použít uživatelské rozhraní ClusterControl nebo dokonce automatizovat kontroly pomocí CLI ClusterControl. Může být také integrován s externími nástroji, jako je Ansible, Puppet a další.