sql >> Databáze >  >> RDS >> PostgreSQL

Automatizace bezpečnostních auditů pro PostgreSQL

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ší.


  1. Jak mohu určit nainstalované instance SQL Server a jejich verze?

  2. Získání výjimky java.sql.SQLException:Operace není povolena po uzavření sady ResultSet

  3. Jak mohu číst data ze šifrované databáze pomocí SQLiteAssetHelper?

  4. SQL Server 2016:Uložte výsledky dotazu do souboru CSV