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

Architektura dla bezpieczeństwa:przewodnik po MongoDB

Powszechność naruszeń danych nie jest już zaskakująca. Zgodnie z opublikowanym właśnie raportem FBI dotyczącym cyberprzestępczości, ofiary cyberprzestępczości łącznie straciły 4,2 miliarda dolarów w 2020 roku, czyli o 700 milionów dolarów więcej niż zgłoszone straty w 2019 roku. W szczególności niezabezpieczone bazy danych MongoDB były częścią problemu prowadzącego do poważnych naruszeń . W lutym 2019 r. firma świadcząca usługi weryfikacji poczty e-mail naruszyła swoją bazę danych MongoDB i ujawniła 763 miliony rekordów, w tym adresy e-mail, numery telefonów, adresy IP i daty urodzenia. Powodem jest publiczna instancja MongoDB bez hasła.

Brak uwierzytelnienia, brak ograniczeń portów na zaporze lub niezabezpieczenie danych podczas transmisji może prowadzić do naruszenia bezpieczeństwa danych. W tym blogu omówimy, jak przygotować i zabezpieczyć bazę danych MongoDB w środowisku produkcyjnym.

Uwierzytelnianie i autoryzacja

Uwierzytelnianie i autoryzacja to dwie różne rzeczy, ale są one skorelowane. Uwierzytelnianie oznacza, że ​​użytkownik ma dostęp do bazy danych MongoDB, podczas gdy autoryzacja umożliwia użytkownikowi dostęp do zasobu w bazie danych.

Domyślna instalacja uwierzytelniania w MongoDB jest wyłączona. MongoDB obsługuje wiele uwierzytelnień, np.:SCRAM, uwierzytelnianie certyfikatem x.509. Domyślny w MongoDB to SCRAM (Salted Challenge Response Authentication Mechanism), który weryfikuje dostęp do dostarczonych poświadczeń za pomocą nazwy użytkownika, hasła i bazy danych uwierzytelniania.

Przed włączeniem uwierzytelniania utwórz superużytkownika w MongoDB z rolą userAdminAnyDatabase. Po zakończeniu wystarczy otworzyć plik /etc/mongod.conf i znaleźć sekcję dotyczącą bezpieczeństwa. Domyślnie jest wyłączone, wystarczy włączyć.

security:
    authorization: "disabled"

Uruchom ponownie usługę MongoDB, aby zastosować zmiany w konfiguracji. Możemy również skonfigurować RBAC (Role Based Access Control) wewnątrz bazy danych MongoDB dla lepszego bezpieczeństwa związanego z użytkownikiem. Dlatego segregujemy dostęp do bazy danych na podstawie użytkownika i uprawnień.

Segmentacja sieci

Segmentacja sieci jest ważnym aspektem przy projektowaniu architektury baz danych, dotyczy wszystkich baz danych, nie tylko MongoDB. Dobrą praktyką jest segregowanie sieci dla bazy danych. Serwer bazy danych konfigurujemy w sieci prywatnej, gdzie nie ma do niego dostępu z internetu.

Komunikacja z bazą danych odbywa się w sieci prywatnej, a gdy użytkownik chce uzyskać dostęp do bazy danych, może użyć VPN lub jumphost. Oprócz segmentacji sieci, ograniczenie portu odgrywa również kluczową rolę, otwieramy port bazy danych specyficzny dla segmentowanej sieci, aby kontrolować przychodzący i wychodzący ruch sieciowy. Wiemy więc, że ruch przychodzący pochodzi z zaufanego adresu źródłowego.

Szyfrowanie danych

Kolejnym obszarem, któremu musimy się przyjrzeć, jest szyfrowanie danych. Szyfrowanie danych to metoda, w której informacje są kodowane w innej formie podczas transmisji i przechowywane w bazie danych.

Szyfrowanie danych obejmuje:

  • Dane w trakcie przesyłania:dane w stanie transmisji

  • Dane w spoczynku:dane przechowywane na dysku. Istnieją różne rodzaje szyfrowania danych w spoczynku, możemy użyć szyfrowania na poziomie bazy danych lub możemy użyć szyfrowania w warstwie przechowywania.

Włączenie SSL/TLS z klientów i serwera MongoDB oraz między węzłami MongoDB (w architekturze zestawu replik i klastra podzielonego na fragmenty) zabezpieczy przesyłane dane. Transfer danych nie będzie w postaci zwykłego tekstu.

Istnieją na przykład różne narzędzia i funkcje szyfrowania danych podczas szyfrowania spoczynkowego; AWS zapewnia szyfrowanie dysku EBS w połączeniu z usługą zarządzania kluczami KMS (Key Management Service) w pamięci masowej, podczas gdy w warstwie bazy danych wersja Enterprise MongoDB zapewnia szyfrowanie bazy danych w stanie spoczynku.

Kontrola bazy danych

Wdrożenie bazy danych audytu dla MongoDB daje wgląd w to, co działa w bazie danych; np.:od jakiego użytkownika i jakie polecenie zostało wykonane oraz źródło adresu IP. Możemy łączyć te logi i tworzyć reguły w oparciu o uprawnienia dostępu. Możemy wykryć, czy jakiś niezamierzony użytkownik uruchamia jakiś skrypt w MongoDB. Widzimy sekcję AuditLog.

auditLog:
   destination: syslog

Możemy wysłać dziennik audytu MongoDB do plików syslog i przesłać je do Log Management. Chcesz uzyskać więcej wskazówek na temat zabezpieczania MongoDB? Obejrzyj ten film, aby lepiej zrozumieć najlepsze praktyki zabezpieczania bazy danych MongoDB

Wnioski

Wdrożenie standardów bezpieczeństwa dla MongoDB jest koniecznością, zwłaszcza w środowisku produkcyjnym. Nie możemy zaakceptować każdej utraty i naruszenia danych przechowywanych w bazie danych.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak powiedzieć Mongo, aby posortował kolekcję przed ograniczeniem wyników?

  2. Jak przekazać ObjectId z MongoDB w MVC.net?

  3. Funkcje MongoDB w ClusterControl 1.4

  4. Jak przechowywać/wyświetlać akapity za pomocą mongodb?

  5. MongoDB $tydzień