sql >> Databáze >  >> NoSQL >> MongoDB

Jak zabezpečit své open source databáze pomocí ClusterControl

Zabezpečení je jedním z nejdůležitějších aspektů provozu databáze. Ať už jste vývojář nebo DBA, pokud spravujete databázi, je vaší odpovědností chránit svá data a chránit je před jakýmkoli druhem neoprávněného přístupu. Nešťastnou skutečností je, že mnoho organizací nechrání svá data, jak jsme viděli při nové vlně ransomwarových útoků MongoDB v září 2017. Již dříve jsme publikovali blog o tom, jak zabezpečit databáze MongoDB.

V tomto příspěvku na blogu se podíváme na to, jak zabezpečit databáze pomocí ClusterControl. Všechny zde popsané funkce jsou dostupné ve verzi 1.5.1 ClusterControl (vydáno 23. prosince 2017). Upozorňujeme, že některé funkce jsou dostupné pouze pro určité typy databází.

Šifrování zálohy

ClusterControl 1.5.1 představil novou funkci nazvanou šifrování záloh. Všechny šifrované zálohy jsou označeny ikonou zámku vedle:

Tuto funkci můžete použít u všech metod zálohování (mysqldump, xtrabackup, mongodump, pg_dump) podporovaných ClusterControl. Chcete-li povolit šifrování, jednoduše při plánování nebo vytváření zálohy přepněte přepínač „Povolit šifrování“. ClusterControl automaticky vygeneruje klíč k zašifrování zálohy. Využívá šifrovací algoritmus AES-256 (CBC) a provádí šifrování za chodu na cílovém serveru. Následující příkaz ukazuje příklad toho, jak ClusterControl provádí zálohu mysqldump:

$ mysqldump --defaults-file=/etc/my.cnf --flush-privileges --hex-blob --opt --no-create-info --no-data --triggers --routines --events --single-transaction --skip-comments --skip-lock-tables --skip-add-locks --databases db1 | gzip -6 -c | openssl enc -aes-256-cbc -pass file:/var/tmp/cmon-094508-e0bc6ad658e88d93.tmp | socat - TCP4:192.168.55.170:9999'

Pokud byste se pokusili dekomprimovat šifrovanou zálohu, aniž byste ji nejprve dešifrovali pomocí správného klíče, uvidíte následující chybu:

$ gunzip mysqldump_2018-01-03_175727_data.sql.gz
gzip: mysqldump_2018-01-03_175727_data.sql.gz: not in gzip format

Klíč je uložen v databázi ClusterControl a lze jej získat ze souboru cmon_backup.metadata pro konkrétní sadu záloh. Při provádění obnovy jej použije ClusterControl. Šifrování záloh se důrazně doporučuje, zejména pokud chcete zálohy zabezpečit mimo pracoviště, jako je archivace v cloudu.

MySQL/PostgreSQL šifrování klient-server

Kromě dodržování doporučených bezpečnostních kroků během nasazení můžete zvýšit spolehlivost své databázové služby pomocí šifrování klient-server SSL. Pomocí ClusterControl můžete tuto operaci provést jednoduchým ukázáním a kliknutím:

Vygenerované klíče a certifikáty pak můžete načíst přímo z hostitele ClusterControl pod /var/lib/cmon/ca cestu k navázání zabezpečeného připojení s databázovými klienty. Všechny klíče a certifikáty lze spravovat přímo pod správou klíčů, jak je popsáno níže.

Šifrování replikace databáze

Replikační provoz v rámci Galera Cluster lze povolit jediným kliknutím. ClusterControl používá 2048bitový výchozí klíč a certifikát vygenerovaný v uzlu ClusterControl, který se přenese do všech uzlů Galera:

Je nutný restart clusteru. ClusterControl provede operaci postupného restartu, přičemž zabírá jeden uzel po druhém. Jakmile je šifrování povoleno, uvidíte vedle databázového serveru zelenou ikonu zámku (Galera označuje šifrování Galera Replication, zatímco SSL označuje šifrování klient-server) v mřížce Hosts na stránce Přehled:

Všechny klíče a certifikáty lze spravovat přímo pod správou klíčů, jak je popsáno níže.

Správa klíčů

Všechny vygenerované klíče a certifikáty lze spravovat přímo z uživatelského rozhraní ClusterControl. Správa klíčů vám umožňuje spravovat certifikáty SSL a klíče, které lze zřídit ve vašich clusterech:

Pokud platnost certifikátu vypršela, můžete jednoduše pomocí uživatelského rozhraní vygenerovat nový certifikát se správným klíčem a certifikační autoritou (CA) nebo importovat existující klíč a certifikát do hostitele ClusterControl.

Bezpečnostní poradci

Poradci jsou miniprogramy, které běží v ClusterControl. Provádějí konkrétní úkoly a poskytují rady, jak řešit problémy v oblastech, jako je výkon, zabezpečení, správa protokolů, konfigurace, úložný prostor a další. Každý poradce může být naplánován jako úloha cron a spuštěn jako samostatný spustitelný soubor v uživatelském rozhraní ClusterControl. Lze jej také spustit prostřednictvím klienta příkazového řádku ClusterControl 's9s'.

ClusterControl umožňuje dva bezpečnostní poradce pro systémy založené na MySQL:

  • Přístup z libovolného hostitele ('%') – Identifikuje všechny uživatele, kteří používají zástupný hostitel ze systémové tabulky mysql, a umožňuje vám mít větší kontrolu nad tím, kteří hostitelé se mohou připojit k serverům.
  • Zkontrolovat počet účtů bez hesla – Identifikuje všechny uživatele, kteří nemají heslo v systémové tabulce mysql.

Pro MongoDB máme následující poradce:

  • Autentizace MongoDB povolena – Zkontrolujte, zda instance MongoDB běží s povoleným režimem ověřování.
  • Kontrola autorizace – Zkontrolujte, zda uživatelé MongoDB nemají autorizaci s příliš tolerantní rolí pro řízení přístupu.

Další podrobnosti o tom, jak ClusterControl provádí bezpečnostní kontroly, se můžete podívat na zdrojový kód poradce podobný JavaScriptu pod Manage -> Developer Studio . Výsledky provádění můžete vidět na stránce Poradci:

Více síťových rozhraní

Mít více síťových karet na hostitelích databáze vám umožňuje oddělit databázový provoz od provozu správy. Databázové uzly využívají jednu síť ke vzájemné komunikaci a tato síť není vystavena žádné veřejné síti. Druhou síť používá ClusterControl pro účely správy. ClusterControl je schopen nasadit takové nastavení pro více sítí. Zvažte následující schéma architektury:

Chcete-li importovat výše uvedený databázový cluster do ClusterControl, musíte zadat primární IP adresu hostitelů databáze. Poté je možné zvolit síť pro správu i datovou síť:

ClusterControl může pracovat i v prostředí bez přístupu k internetu, přičemž databáze jsou zcela izolovány od veřejné sítě. Většina funkcí bude fungovat dobře. Pokud je hostitel ClusterControl nakonfigurován s internetem, je také schopen klonovat úložiště dodavatele databáze pro databázové servery bez internetu. Stačí přejít do Nastavení (horní nabídka) -> Úložiště -> Vytvořit nové úložiště a nastavte volby tak, aby odpovídaly prostředí cílového databázového serveru:

Zrcadlení může trvat asi 10 až 20 minut v závislosti na připojení k internetu, novou položku uvidíte v seznamu později. Toto úložiště pak můžete místo toho vybrat při škálování nebo nasazování nového clusteru, aniž by hostitelé databáze museli mít připojení k internetu (všimněte si, že by mělo být k dispozici i offline úložiště operačního systému).

Správa uživatelů MySQL

Systém oprávnění MySQL zajišťuje, že všichni uživatelé mohou provádět pouze operace, ke kterým mají povoleno. Udělení je zásadní, protože nechcete všem uživatelům poskytnout úplný přístup k vaší databázi, ale potřebujete, aby uživatelé měli potřebná oprávnění ke spouštění dotazů a provádění každodenních úkolů.

ClusterControl poskytuje interaktivní uživatelské rozhraní pro správu databázových schémat a oprávnění. Sjednocuje účty na všech serverech MySQL v clusteru a zjednodušuje proces udělování. Můžete snadno vizualizovat uživatele databáze, takže se vyhnete chybám.

Jak můžete vidět na výše uvedeném snímku obrazovky, ClusterControl zašednul nepotřebná oprávnění, pokud chcete uživateli udělit pouze databázi (shopdb). "Vyžadovat SSL?" je povoleno pouze v případě, že je povoleno šifrování SSL klient/server, zatímco zaškrtávací políčka oprávnění správce jsou zcela deaktivována, pokud je definována konkrétní databáze. Můžete si také prohlédnout vygenerovaný příkaz GRANT v dolní části průvodce, abyste viděli příkaz, který ClusterControl provede za účelem vytvoření tohoto uživatele. Tento pomocník vypadá docela jednoduše, ale vytváření uživatelů a udělování oprávnění může být náchylné k chybám.

ClusterControl také poskytuje seznam neaktivních uživatelů pro všechny databázové uzly v clusteru a ukazuje účty, které nebyly použity od posledního restartu serveru:

To upozorní správce na zbytečné účty, které existují a které by mohly poškodit server. Dalším krokem je ověření, zda účty již nejsou aktivní, a můžete je jednoduše odstranit pomocí možnosti „Vypustit vybraného uživatele“. Ujistěte se, že máte dostatečnou databázovou aktivitu, aby byl seznam vygenerovaný ClusterControl přesný. Čím delší je doba provozu serveru, tím lépe.

Vždy udržujte aktuální informace

Pro produkční použití se důrazně doporučuje nainstalovat balíčky související s databází z úložiště dodavatele. Nespoléhejte na výchozí úložiště operačního systému, kde jsou balíčky obvykle zastaralé. Pokud běžíte v prostředí clusteru, jako je Galera Cluster, nebo dokonce MySQL Replication, máte vždy možnost opravit systém s minimálními prostoji.

ClusterControl podporuje automatický přechod na menší verze pro MySQL/MariaDB jediným kliknutím. Stačí přejít na Správa -> Upgrady -> Upgrade a vyberte vhodnou hlavní verzi pro váš běžící cluster. ClusterControl poté provede upgrade vždy na jednom uzlu. Uzel bude zastaven, poté bude aktualizován software a poté bude uzel znovu spuštěn. Pokud se upgradu některého uzlu nepodaří, proces upgradu se přeruší a administrátor je upozorněn. Upgrady by měly být prováděny pouze tehdy, když je na clusteru co nejmenší provoz.

Upgrady hlavních verzí (např. z MySQL 5.6 na MySQL 5.7) nejsou záměrně automatizované. Velké upgrady obvykle vyžadují odinstalaci stávajících balíčků, což je riskantní úkol zautomatizovat. Pro takový druh upgradů je nezbytné pečlivé plánování a testování.

Zabezpečení databáze je důležitým aspektem provozu databáze v produkci. Ze všech incidentů, o kterých často čteme ve zprávách (a pravděpodobně existuje mnoho dalších, které nejsou zveřejněny), je jasné, že tam jsou skupiny zaneprázdněné špatnými úmysly. Ujistěte se tedy, že jsou vaše databáze dobře chráněny.


  1. Přístup k databázi produkce meteorů v roce 2016

  2. Redis filtrovat podle rozsahu, seřadit a vrátit nejprve 10

  3. Proč nemohu ladit kód v asynchronní metodě?

  4. Která databáze noSQL je nejlepší pro velkoobjemové vkládání/zápisy?