MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak zabezpieczyć bazy danych Open Source za pomocą ClusterControl

Bezpieczeństwo to jeden z najważniejszych aspektów prowadzenia bazy danych. Niezależnie od tego, czy jesteś programistą, czy administratorem baz danych, jeśli zarządzasz bazą danych, Twoim obowiązkiem jest chronić swoje dane i chronić je przed wszelkiego rodzaju nieautoryzowanym dostępem. Niefortunnym faktem jest to, że wiele organizacji nie chroni swoich danych, jak widzieliśmy po nowej fali ataków ransomware MongoDB we wrześniu 2017 r. Wcześniej opublikowaliśmy blog na temat zabezpieczania baz danych MongoDB.

W tym poście na blogu przyjrzymy się, jak zabezpieczyć swoje bazy danych za pomocą ClusterControl. Wszystkie opisane tutaj funkcje są dostępne w wersji 1.5.1 ClusterControl (wydanej 23 grudnia 2017 r.). Należy pamiętać, że niektóre funkcje są dostępne tylko dla niektórych typów baz danych.

Szyfrowanie kopii zapasowych

ClusterControl 1.5.1 wprowadził nową funkcję zwaną szyfrowaniem kopii zapasowych. Wszystkie zaszyfrowane kopie zapasowe są oznaczone ikoną kłódki obok:

Możesz użyć tej funkcji we wszystkich metodach tworzenia kopii zapasowych (mysqldump, xtrabackup, mongodump, pg_dump) obsługiwanych przez ClusterControl. Aby włączyć szyfrowanie, po prostu przełącz przełącznik „Włącz szyfrowanie” podczas planowania lub tworzenia kopii zapasowej. ClusterControl automatycznie generuje klucz do zaszyfrowania kopii zapasowej. Wykorzystuje algorytm szyfrowania AES-256 (CBC) i wykonuje szyfrowanie w locie na serwerze docelowym. Poniższe polecenie pokazuje przykład, jak ClusterControl wykonuje kopię zapasową 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'

Zobaczysz następujący błąd, jeśli spróbujesz zdekompresować zaszyfrowaną kopię zapasową bez uprzedniego odszyfrowania jej odpowiednim kluczem:

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

Klucz jest przechowywany w bazie danych ClusterControl i można go pobrać z pliku cmon_backup.metadata dla określonego zestawu kopii zapasowych. Będzie używany przez ClusterControl podczas przywracania. Szyfrowanie kopii zapasowych jest wysoce zalecane, zwłaszcza gdy chcesz zabezpieczyć swoje kopie zapasowe poza siedzibą firmy, np. archiwizując je w chmurze.

Szyfrowanie MySQL/PostgreSQL klient-serwer

Oprócz wykonywania zalecanych kroków bezpieczeństwa podczas wdrażania, można zwiększyć niezawodność usługi bazy danych za pomocą szyfrowania SSL klient-serwer. Korzystając z ClusterControl, możesz wykonać tę operację za pomocą prostego wskaż i kliknij:

Wygenerowane klucze i certyfikaty można następnie pobrać bezpośrednio z hosta ClusterControl w katalogu /var/lib/cmon/ca ścieżka do nawiązania bezpiecznych połączeń z klientami bazy danych. Wszystkimi kluczami i certyfikatami można zarządzać bezpośrednio w sekcji Zarządzanie kluczami, jak opisano poniżej.

Szyfrowanie replikacji bazy danych

Ruch związany z replikacją w ramach klastra Galera można włączyć jednym kliknięciem. ClusterControl używa 2048-bitowego domyślnego klucza i certyfikatu wygenerowanego w węźle ClusterControl, który jest przesyłany do wszystkich węzłów Galera:

Konieczne jest ponowne uruchomienie klastra. ClusterControl wykona operację odnawiania kroczącego, biorąc po jednym węźle na raz. Zobaczysz zieloną ikonę kłódki obok serwera bazy danych (Galera wskazuje szyfrowanie Galera Replication, podczas gdy SSL wskazuje szyfrowanie klient-serwer) w siatce Hosty na stronie Przegląd po włączeniu szyfrowania:

Wszystkimi kluczami i certyfikatami można zarządzać bezpośrednio w sekcji Zarządzanie kluczami, jak opisano poniżej.

Zarządzanie kluczami

Wszystkimi wygenerowanymi kluczami i certyfikatami można zarządzać bezpośrednio z interfejsu użytkownika ClusterControl. Zarządzanie kluczami umożliwia zarządzanie certyfikatami i kluczami SSL, które mogą być udostępniane w klastrach:

Jeśli certyfikat wygasł, możesz po prostu użyć interfejsu użytkownika, aby wygenerować nowy certyfikat z odpowiednim kluczem i urzędem certyfikacji (CA) lub zaimportować istniejący klucz i certyfikat do hosta ClusterControl.

Doradcy ds. bezpieczeństwa

Advisors to mini-programy działające w ClusterControl. Wykonują określone zadania i doradzają, jak rozwiązywać problemy w obszarach takich jak wydajność, bezpieczeństwo, zarządzanie logami, konfiguracja, przestrzeń dyskowa i inne. Każdego doradcę można zaplanować jak zadanie cron i uruchomić jako samodzielny plik wykonywalny w interfejsie użytkownika ClusterControl. Można go również uruchomić za pomocą klienta wiersza poleceń ClusterControl 's9s'.

ClusterControl umożliwia dwóch doradców ds. bezpieczeństwa dla systemów opartych na MySQL:

  • Dostęp z dowolnego hosta ('%') - Identyfikuje wszystkich użytkowników korzystających z hosta z symbolami wieloznacznymi z tabeli systemowej mysql i pozwala na większą kontrolę nad tym, które hosty mogą łączyć się z serwerami.
  • Sprawdź liczbę kont bez hasła - Identyfikuje wszystkich użytkowników, którzy nie mają hasła w tabeli systemowej mysql.

W przypadku MongoDB mamy następujących doradców:

  • Uwierzytelnianie MongoDB włączone — sprawdź, czy instancja MongoDB działa z włączonym trybem uwierzytelniania.
  • Test autoryzacji — sprawdź, czy użytkownicy MongoDB są autoryzowani ze zbyt liberalną rolą w celu kontroli dostępu.

Aby uzyskać więcej informacji na temat tego, jak ClusterControl przeprowadza kontrole bezpieczeństwa, możesz zapoznać się z doradcą w kodzie źródłowym podobnym do JavaScript w sekcji Zarządzanie -> Studio programistyczne . Wyniki wykonania możesz zobaczyć na stronie Doradcy:

Wiele interfejsów sieciowych

Posiadanie wielu kart sieciowych na hostach bazy danych umożliwia oddzielenie ruchu bazy danych od ruchu związanego z zarządzaniem. Jedna sieć jest używana przez węzły bazy danych w celu komunikowania się ze sobą i ta sieć nie jest wystawiona na działanie żadnej sieci publicznej. Druga sieć jest używana przez ClusterControl do celów zarządzania. ClusterControl jest w stanie wdrożyć taką konfigurację wielosieciową. Rozważ następujący diagram architektury:

Aby zaimportować powyższy klaster bazy danych do ClusterControl, należy określić podstawowy adres IP hostów bazy danych. Następnie można wybrać sieć zarządzania oraz sieć danych:

ClusterControl może również pracować w środowisku bez dostępu do Internetu, z bazami danych całkowicie odizolowanymi od sieci publicznej. Większość funkcji będzie działać dobrze. Jeśli host ClusterControl jest skonfigurowany z Internetem, może również klonować repozytorium dostawcy bazy danych dla serwerów baz danych bez Internetu. Po prostu przejdź do Ustawienia (górne menu) -> Repozytoria -> Utwórz nowe repozytorium i ustaw opcje tak, aby pasowały do ​​docelowego środowiska serwera bazy danych:

Tworzenie kopii lustrzanej może zająć około 10 do 20 minut w zależności od połączenia internetowego, później zobaczysz nową pozycję na liście. Następnie możesz wybrać to repozytorium zamiast podczas skalowania lub wdrażania nowego klastra, bez potrzeby, aby hosty bazy danych miały jakiekolwiek połączenie z Internetem (zwróć uwagę, że repozytorium offline systemu operacyjnego również powinno być na miejscu).

Zarządzanie użytkownikami MySQL

System uprawnień MySQL zapewnia, że ​​wszyscy użytkownicy mogą wykonywać tylko te operacje, do których są uprawnieni. Przyznawanie ma kluczowe znaczenie, ponieważ nie chcesz dawać wszystkim użytkownikom pełnego dostępu do Twojej bazy danych, ale potrzebujesz, aby użytkownicy mieli niezbędne uprawnienia do uruchamiania zapytań i wykonywania codziennych zadań.

ClusterControl zapewnia interaktywny interfejs użytkownika do zarządzania schematami i uprawnieniami bazy danych. Ujednolica konta na wszystkich serwerach MySQL w klastrze i upraszcza proces przyznawania. Możesz łatwo wizualizować użytkowników bazy danych, dzięki czemu unikniesz błędów.

Jak widać na powyższym zrzucie ekranu, ClusterControl wyszarzał niepotrzebne uprawnienia, jeśli chcesz tylko przydzielić użytkownika do bazy danych (shopdb). „Wymagać SSL?” jest włączone tylko wtedy, gdy szyfrowanie SSL klient/serwer jest włączone, podczas gdy pola wyboru uprawnień administratora są całkowicie wyłączone, jeśli zdefiniowana jest konkretna baza danych. Możesz również sprawdzić wygenerowaną instrukcję GRANT na dole kreatora, aby zobaczyć instrukcję, którą wykona ClusterControl w celu utworzenia tego użytkownika. Ten pomocnik wygląda na dość prosty, ale tworzenie użytkowników i nadawanie uprawnień może być podatne na błędy.

ClusterControl udostępnia również listę nieaktywnych użytkowników dla wszystkich węzłów bazy danych w klastrze, pokazując konta, które nie były używane od ostatniego restartu serwera:

To ostrzega administratora o niepotrzebnych kontach, które istnieją i które mogą potencjalnie uszkodzić serwer. Następnym krokiem jest sprawdzenie, czy konta nie są już aktywne i możesz po prostu użyć opcji „Upuść wybranego użytkownika”, aby je usunąć. Upewnij się, że masz wystarczającą aktywność bazy danych, aby upewnić się, że lista generowana przez ClusterControl jest dokładna. Im dłuższy czas pracy serwera, tym lepiej.

Zawsze bądź na bieżąco

Do użytku produkcyjnego zdecydowanie zaleca się zainstalowanie pakietów związanych z bazą danych z repozytorium dostawcy. Nie polegaj na domyślnym repozytorium systemu operacyjnego, w którym pakiety są zwykle nieaktualne. Jeśli pracujesz w środowisku klastrowym, takim jak Galera Cluster lub nawet MySQL Replication, zawsze masz możliwość załatania systemu przy minimalnym przestoju.

ClusterControl obsługuje automatyczne kroczące uaktualnianie mniejszych wersji dla MySQL/MariaDB za pomocą jednego kliknięcia. Po prostu przejdź do Zarządzaj -> Uaktualnienia -> Uaktualnij i wybierz odpowiednią wersję główną dla działającego klastra. ClusterControl wykona uaktualnienie w jednym węźle na raz. Węzeł zostanie zatrzymany, następnie oprogramowanie zostanie zaktualizowane, a następnie węzeł zostanie ponownie uruchomiony. Jeśli węzeł nie zostanie uaktualniony, proces uaktualnienia zostanie przerwany, a administrator zostanie powiadomiony. Aktualizacje powinny być wykonywane tylko wtedy, gdy ruch w klastrze jest jak najmniejszy.

Aktualizacje głównych wersji (np. z MySQL 5.6 do MySQL 5.7) celowo nie są zautomatyzowane. Duże aktualizacje zwykle wymagają odinstalowania istniejących pakietów, co jest ryzykownym zadaniem do zautomatyzowania. W przypadku tego rodzaju aktualizacji konieczne jest staranne planowanie i testowanie.

Bezpieczeństwo bazy danych jest ważnym aspektem uruchamiania bazy danych w środowisku produkcyjnym. Ze wszystkich incydentów, o których często czytamy w wiadomościach (a prawdopodobnie jest wiele innych, które nie są publikowane), jasno widać, że są tam grupy zajęte złymi intencjami. Upewnij się więc, że Twoje bazy danych są dobrze chronione.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dynamiczne połączenie bazy danych z mongodb lub mongoose z nodejs

  2. MongoDB db.collection.count()

  3. Jak skopiować bazę danych z jednego serwera MongoDB na inny?

  4. Mongodb unika zduplikowanych wpisów

  5. MongoDB nie tworzy bazy danych w powłoce