PostgreSQL je jednou z nejbezpečnějších databází na světě. Zabezpečení databáze hraje klíčovou roli v kritických prostředích reálného světa. Je důležité zajistit, aby databáze a data byla vždy zabezpečena a nebyla vystavena neoprávněnému přístupu, čímž by byla ohrožena bezpečnost dat. Přestože PostgreSQL poskytuje uživatelům různé mechanismy a metody pro bezpečný přístup k databázi, lze jej také integrovat s různými externími autentizačními systémy, aby bylo zajištěno splnění standardních podnikových požadavků na zabezpečení databáze.
Kromě poskytování bezpečných autentizačních mechanismů prostřednictvím SSL, MD5, pgpass a pg_ident atd. lze PostgreSQL integrovat s různými dalšími populárními externími autentizačními systémy podnikové třídy. V tomto blogu se zaměřím na LDAP, Kerberos a RADIUS s SSL a pg_ident.
LDAP
LDAP označuje Lightweight Directory Access Protocol, což je populárně používaný centralizovaný autentizační systém. Jedná se o datové úložiště, které ukládá přihlašovací údaje uživatele a různé další podrobnosti související s uživatelem, jako jsou jména, domény, obchodní jednotky atd. ve formě hierarchie ve formátu tabulky. Koncoví uživatelé připojující se k cílovým systémům (např. databázi) se musí nejprve připojit k serveru LDAP, aby prošli úspěšnou autentizací. LDAP je jedním z populárních ověřovacích systémů, které se v současnosti používají v organizacích požadujících vysoké bezpečnostní standardy.
LDAP + PostgreSQL
PostgreSQL lze integrovat s LDAP. Podle mých zkušeností se zákaznickým poradenstvím je to považováno za jednu z klíčových schopností PostgreSQL. Protože ověřování uživatelského jména a hesla probíhá na serveru LDAP, aby se uživatelé mohli připojit k databázi přes LDAP, musí v databázi existovat uživatelský účet. Jinými slovy to znamená, že uživatelé při pokusu o připojení k PostgreSQL jsou nejprve směrováni na server LDAP a poté po úspěšné autentizaci do databáze Postgres. Konfiguraci lze provést v souboru pg_hba.conf, abyste zajistili směrování připojení na server LDAP. Níže je ukázkový záznam pg_hba.conf -
host all pguser 0.0.0.0/0 ldap ldapserver=ldapserver.example.com ldapprefix="cn=" ldapsuffix=", dc=example, dc=com"
Níže je uveden příklad záznamu LDAP v pg_hba.conf:
host all pguser 0.0.0.0/0 ldap ldapserver=ldapserver.example.com ldapprefix="cn=" ldapsuffix=", ou=finance, dc=example, dc=com"
Při použití jiného než výchozího portu ldap a TLS:
ldap ldapserver=ldapserver.example.com ldaptls=1 ldapport=5128 ldapprefix="uid=" ldapsuffix=",ou=finance,dc=apix,dc=com"
Porozumění výše uvedenému záznamu LDAP
- LDAP používá různé atributy a terminologie k ukládání/vyhledávání uživatelského záznamu ve svém datovém úložišti. Také, jak je uvedeno výše, uživatelské položky jsou uloženy v hierarchii.
- Výše uvedené položky pg_hba.conf ldap se skládají z atributů zvaných CN (Common Name), OU (Organization Unit) a DC (Domain Component), které se nazývají Relative Distinguished Names (RDN). Tyto sekvence RDN se společně stávají něčím nazývané DN (Distinguished Name). DN je objekt LDAP, na jehož základě se vyhledávání provádí v datovém úložišti LDAP.
- Hodnoty atributů LDAP, jako je CN, DC, OU atd., jsou definovány v třídách objektů LDAP, které mohou poskytnout systémoví odborníci, kteří vytvořili prostředí LDAP.
Bude tím LDAP dostatečně zabezpečen?
Možná ne. Hesla sdělovaná přes síť v prostředí LDAP nejsou šifrována, což může představovat bezpečnostní riziko, protože šifrovaná hesla mohou být hacknuta. Existují možnosti, jak zajistit bezpečnější komunikaci s přihlašovacími údaji.
- Zvažte konfiguraci LDAP na TLS (Transport Layer Security)
- LDAP lze konfigurovat pomocí SSL, což je další možnost
Tipy k dosažení integrace LDAP s PostgreSQL
(pro systémy založené na Linuxu)
- Nainstalujte příslušné moduly openLDAP na základě verze operačního systému
- Zajistěte, aby byl software PostgreSQL nainstalován s knihovnami LDAP
- Zajistěte, aby byl protokol LDAP dobře integrován se službou Active Directory
- Seznamte se se všemi existujícími CHYBAMI v používaných modulech openLDAP. To může být katastrofální a může to ohrozit bezpečnostní standardy.
- Windows Active Directory lze také integrovat s LDAP
- Zvažte konfiguraci LDAP s SSL, která je bezpečnější. Nainstalujte vhodné moduly openSSL a uvědomte si chyby, jako je krvácení srdce, které může odhalit přihlašovací údaje přenášené přes síť.
Kerberos
Kerberos je průmyslový standard centralizovaného autentizačního systému, který se běžně používá v organizacích a poskytuje autentizační mechanismus založený na šifrování. Hesla jsou ověřována ověřovacím serverem třetí strany, který se nazývá KDC (Key Distribution Center). Hesla lze šifrovat na základě různých algoritmů a lze je dešifrovat pouze pomocí sdílených soukromých klíčů. To také znamená, že hesla sdělovaná přes síť jsou šifrována.
PostgreSQL + Kerberos
PostgreSQL podporuje ověřování založené na GSSAPI s Kerberos. Uživatelé, kteří se pokoušejí připojit k databázi Postgres, budou přesměrováni na server KDC k ověření. Tato autentizace mezi klienty a databází KDC se provádí na základě sdílených soukromých klíčů a po úspěšné autentizaci by nyní klienti vlastnili přihlašovací údaje Kerberos. Stejné přihlašovací údaje podléhají ověření mezi serverem Postgres a KDC, což bude provedeno na základě souboru keytab vygenerovaného Kerberos. Tento soubor keytab musí existovat na databázovém serveru s příslušnými oprávněními pro uživatele, který vlastní proces Postgres.
Proces konfigurace a připojení Kerberos -
-
Uživatelské účty založené na Kerberos musí vygenerovat lístek ( žádost o připojení ) pomocí příkazu „kinit“.
-
Soubor keytab musí být vygenerován pomocí příkazu „kadmin“ pro plně kvalifikovaný uživatelský účet založený na Kerberos (zmocněnec) a poté by Postgres použil stejný soubor keytab k ověření přihlašovacích údajů. Principály lze zašifrovat a přidat do existujícího souboru tabulky klíčů pomocí příkazu „ktadd“. Šifrování Kerberos podporuje různé standardní šifrovací algoritmy.
Vygenerovaný soubor keytab musí být zkopírován na server Postgres, musí být čitelný pro proces Postgres. Níže uvedený parametr postgresql.conf musí být nakonfigurován:
krb_server_keyfile = '/database/postgres/keytab.example.com'
Pokud vám záleží na rozlišení velkých a malých písmen, použijte níže uvedený parametr
krb_caseins_users which is by default “off” (case sensitive)
-
V souboru pg_hba.conf je třeba provést záznam, aby bylo zajištěno, že připojení budou směrována na server KDC
Příklad záznamu pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.1.6/32 gss include_realm=1 krb_realm=EXAMPLE.COM
Příklad záznamu pg_hba.conf se záznamem mapy
# TYPE DATABASE USER CIDR-ADDRESS METHOD host all all 192.168.1.6/32 gss include_realm=1 krb_realm=EXAMPLE.COM map=krb
-
Uživatelský účet, který se pokouší připojit, musí být přidán do databáze KDC, která se nazývá hlavní, a stejný uživatelský účet nebo mapovací uživatelský účet musí existovat také v databázi
Níže je uveden příklad principu Kerberos
pguser je uživatelské jméno a „example.com“ je název sféry nakonfigurovaný v konfiguraci Kerberos (/etc/krb5.conf) na serveru KDC.
Ve světě kerberos hlavní jsou ve formátu jako e-mail ([email protected]) a uživatelé databáze nemohou být vytvořeni ve stejném formátu. To přiměje správce databází uvažovat o vytvoření mapování uživatelských jmen databáze a zajistit, aby se principálové spojili s namapovanými jmény pomocí pg_ident.conf.
Níže je uveden příklad záznamu názvu mapy v pg_ident.conf
# MAPNAME SYSTEM-USERNAME GP-USERNAME mapuser /^(.*)EXAMPLE\.DOMAIN$ admin
Bude tím Kerberos dostatečně zabezpečen?
Možná ne. Uživatelské přihlašovací údaje komunikované přes síť mohou být odhaleny, hacknuty. Ačkoli Kerberos šifruje principály, mohou být ukradeny, hacknuty. To přináší potřebu implementace zabezpečení síťové vrstvy. Ano, SSL nebo TLS je správná cesta. Autentizační systém Kerberos může být integrován s SSL nebo TLS. TLS je nástupcem SSL. Je doporučeno mít Kerberos nakonfigurovaný s SSL nebo TLS, aby byla komunikace po síti zabezpečena.
TIPY
- Ujistěte se, že jsou nainstalovány knihovny krb*
- Pro konfiguraci SSL musí být nainstalovány knihovny OpenSSL
- Zajistěte, aby byl Postgres nainstalován s následujícími možnostmi
./configure --with-gssapi --with-krb-srvnam --with-openssl
RADIUS
RADIUS je síťový protokol služby vzdálené autentizace, který poskytuje centralizované
Autentizace, autorizace a účetnictví (AAA). Páry uživatelské jméno / heslo se ověřují na serveru RADIUS. Tento způsob centralizované autentizace je mnohem přímočarý a jednodušší ve srovnání s jinými autentizačními systémy jako LDAP a Kerberos, což vyžaduje trochu složitosti.
RADIUS + PostgreSQL
PostgreSQL lze integrovat s autentizačním mechanismem RADIUS. Účetnictví zatím není v Postgres podporováno. To vyžaduje, aby v databázi existovaly uživatelské účty databáze. Připojení k databázi jsou autorizována na základě sdíleného tajemství nazývaného „radiussecret“.
Záznam v konfiguraci pg_hba.conf je nezbytný pro směrování připojení k radius serveru pro ověření.
Příklad záznamu pg_hba.conf
hostssl all all 0.0.0.0/0 radius radiusserver=127.0.0.1 radiussecret=secretr radiusport=3128
Pro pochopení výše uvedeného záznamu -
„radiusserver“ je hostitelská IP adresa serveru RADIUS, kam jsou uživatelé směrováni k ověření. Tento parametr je nakonfigurován v /etc/radiusd.conf na serveru RADIUS.
„radiussecret“ hodnota je extrahována z client.conf. Toto je tajný kód, který jednoznačně identifikuje připojení klienta Radius.
„radiusport“ lze nalézt v souboru /etc/radiusd.conf. Toto je port, na kterém budou naslouchat rádiová připojení.
Význam SSL
SSL (Secure Socket Layer) hraje zásadní roli se zavedenými externími autentizačními systémy. Důrazně se doporučuje nakonfigurovat SSL s externím autentizačním systémem, protože mezi klienty a servery bude po síti probíhat komunikace citlivých informací a SSL může dále posílit zabezpečení.
Dopad používání externích autentizačních systémů na výkon
Efektivní a efektivní bezpečnostní systém jde na úkor výkonu. Vzhledem k tomu, že klienti/uživatelé, kteří se pokoušejí připojit k databázi, jsou směrováni do ověřovacích systémů k navázání spojení, může dojít ke snížení výkonu. Existují způsoby, jak překonat výkonnostní překážky.
- Při použití externího ověřovacího mechanismu může dojít ke zpoždění při navazování připojení k databázi. To může být skutečným problémem, když je k databázi navazováno velké množství spojení.
- Vývojáři musí zajistit, aby se s databází nenavazovalo zbytečně velké množství připojení. Bylo by výhodné obsluhovat více požadavků aplikací prostřednictvím jednoho připojení.
- Důležitou roli hraje také to, jak dlouho každý požadavek na konci databáze trvá. Pokud dokončení požadavku trvá déle, další požadavky se zařadí do fronty. Klíčové bude ladění výkonu procesů a pečlivá architektura infrastruktury!
- Databáze a infrastruktura musí být efektivně navrženy a musí mít odpovídající kapacitu, aby byl zajištěn dobrý výkon.
- Při srovnávání výkonu se ujistěte, že je povoleno SSL a poté je třeba vyhodnotit průměrnou dobu navázání připojení.
Integrace externích autentizačních systémů s ClusterControl – PostgreSQL
Instance PostgreSQL lze sestavovat a konfigurovat automaticky prostřednictvím GUI ClusterControl. Integrace externích autentizačních systémů s instancemi PostgreSQL nasazenými prostřednictvím ClusterControl je do značné míry podobná integraci s tradičními instancemi PostgreSQL a ve skutečnosti je o něco jednodušší. Níže je jejich přehled -
- ClusterControl nainstaluje knihovny PostgreSQL s povolenými funkcemi LDAP, KRB, GSSAPI a OpenSSL
- Integrace s externími autentizačními systémy vyžaduje různé změny konfigurace parametrů na databázovém serveru postgresql, které lze provést pomocí GUI ClusterControl.