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

Lista kontrolna bezpieczeństwa dla wdrożeń produkcyjnych MongoDB

Gdy aplikacja wymaga dużego obszaru geograficznego do działania, organizacja jest często zmuszona do przechowywania swoich danych w chmurze. Aplikacje zbudowane na MongoDB nie są wyjątkiem od tej koncepcji. Brak ochrony poufnych danych może spowodować poważne komplikacje w firmie, w tym zrujnowaną reputację, niespójność danych, straty finansowe, a czasem całkowitą utratę danych.

Dane przechowywane w chmurze mogą być przedmiotem zainteresowania elementów przestępczych. Osoby o złych zamiarach mogą łatwiej uzyskać dostęp, gdy nie zostały opracowane żadne standardowe procedury zapewniające bezpieczeństwo bazy danych. Niektóre z tych niespełniających norm procedur obejmują...

  • Słabe zarządzanie hasłami:niektórzy programiści kończą na twardym kodowaniu haseł w plikach źródłowych projektu, dlatego jeśli haker dekompiluje aplikację, może łatwo odzyskać zawartość.
  • Niechęć lub brak aktualizacji bazy danych i dodatkowych wtyczek. Nowsze wersje baz danych mają nowe funkcje, które mogą dotyczyć bezpieczeństwa lub raczej mają pewne funkcje naprawione w porównaniu z poprzednikami.
  • Niestandardowe konfiguracje baz danych, na przykład nieużywające zaszyfrowanych kluczy odszyfrowywania lub raczej nieużywające żadnego protokołu bezpieczeństwa.

Atak na bazę danych rośnie z dnia na dzień (i oczekuje się, że trend będzie się utrzymywał), ale możesz nie paść ofiarą, chyba że zastosujesz odpowiednie względy bezpieczeństwa. W tym artykule omówimy niektóre procedury, które można sprawdzić przy instalacji MongoDB w chmurze. Nie musisz stosować ich wszystkich, ale przynajmniej postaraj się wybrać te, których unikanie może postawić Twoje dane w katastrofalnej sytuacji.

Rozważania dotyczące bezpieczeństwa przedprodukcyjnego MongoDB

Są to kwestie, które należy upewnić się, że są dobrze skonfigurowane przed wdrożeniem MongoDB w środowisku produkcyjnym. Obejmują one: 

  1. Włączanie i wymuszanie uwierzytelniania dla kontroli dostępu
  2. Konfiguruj kontrolę dostępu opartą na rolach
  3. Ogranicz ekspozycję sieci
  4. Szyfruj komunikację
  5. Zaszyfruj dane
  6. Działania systemu kontroli 
  7. Użyj dedykowanego użytkownika do uruchamiania MongoDB
  8. Wykorzystaj oficjalne i zaktualizowane pakiety MongoDB
  9. Wyłącz wykonywanie Javascript, jeśli nie jest potrzebne
  10. Bądź na bieżąco z poprawkami bezpieczeństwa MongoDB

1. Włączanie i wymuszanie uwierzytelniania w celu kontroli dostępu

Kontrola dostępu nie jest domyślnie włączona w MongoDB, ale nie oznacza to, że wdrażasz również bazę danych bez włączonej tej opcji. W rzeczywistości niektóre pakiety baz danych, takie jak Bitnami, będą wymagały ustawienia kontroli dostępu przed użyciem bazy danych. W przeciwnym razie każdy może mieć dostęp do bazy danych, a tym samym narazić się na nawet bardzo wrażliwe dane. Określ jakiś mechanizm uwierzytelniania, taki jak SCRAM, aby klienci, którzy będą połączeni, musieli podać prawidłowe dane uwierzytelniające, zanim będą mogli połączyć się z bazą danych.

Ciąg połączenia powinien wyglądać mniej więcej tak:

mongodb://[username:[email protected]]host[:port1][/[defaultauthdb]and not just

mongodb://host[:port1]/[defaultauthdb]

2. Skonfiguruj kontrolę dostępu opartą na rolach

Po dodaniu użytkowników z uprawnieniami administracyjnymi ogranicz role przypisane tym użytkownikom za pomocą kontroli dostępu opartej na rolach (RBAC). Role, które może mieć użytkownik, obejmują:odczyt, zapis lub obie w określonych lub wszystkich kolekcjach. W związku z tym użytkownik nie może wykonywać roli, która nie jest mu przypisana, lub może wykonywać operacje tylko na przypisanych kolekcjach.

Najpierw tworzony jest administrator użytkowników, a następnie dodatkowi użytkownicy. Jeśli użytkownik ma uprawnienia w różnych bazach danych, możesz utworzyć jednego użytkownika z rolami, które przyznają odpowiednie uprawnienia do bazy danych, zamiast tworzyć użytkownika wiele razy w różnych bazach danych.

Wskazane jest, aby niewielka liczba użytkowników miała dostęp do bazy danych, przy czym użytkownikami mogą być osoby lub aplikacje klienckie.

Aby utworzyć i przyznać uprawnienia użytkownika dla określonych ról w MongoDB, możesz użyć tego przykładu w powłoce mongo

use finance

db.createUser(

  {

    user: "manager",

    pwd: passwordPrompt(),  // or cleartext password

    roles: [

       { role: "read", db: "loans" },

       { role: "read", db: "interests" },

       { role: "read", db: "useraccounts" },

       { role: "readWrite", db: "wages" }

    ]

  }

)

 Wybierz także opcje uwierzytelniania zewnętrznego, takie jak LDAP i Kerberos.

3. Ogranicz ekspozycję w sieci

Topologia sieci, w której znajduje się baza danych, musi być szeroko zabezpieczona i co najważniejsze, nasłuchiwać tylko interfejsu hosta lokalnego. Ma to na celu uniknięcie narażenia na zewnętrzne połączenia, tak jak miało to miejsce w przypadku starszych wersji MongoDB. Upewnij się, że MongoDB działa w zaufanym środowisku sieciowym z włączoną zaporą sieciową. Kontroluj ruch przychodzący i wychodzący za pomocą grup zabezpieczeń, których nie można używać z innymi wystąpieniami. Użyj białej listy adresów IP, aby zezwolić na dostęp z zaufanych adresów IP, a zatem zezwalaj na połączenia z instancjami MongoDB z interfejsami sieciowymi i portami tylko od zaufanych klientów.

Poza tym wyłącz bezpośredni dostęp do roota SSH.

4. Szyfruj komunikację

Konfiguracja MongoDB powinna ograniczać połączenia przychodzące i wychodzące tylko do TLS/SSL. TLS/SSL szyfruje komunikację między komponentami mongod i mongos wdrożenia MongoDB i wszystkimi podłączonymi do niego aplikacjami.

W środowisku produkcyjnym wdrożenie MongoDB powinno używać ważnych certyfikatów wygenerowanych i podpisanych przez jeden urząd certyfikacji.

5. Zaszyfruj dane

Dane bazy danych mają dwie formy:dane w spoczynku i w trakcie przesyłania. Przesyłane dane można zabezpieczyć za pomocą szyfrowania na poziomie pola po stronie klienta, ale jest ono dostępne tylko w wersji 4.2. Szyfrowanie TLS/SSL dba również o przesyłane dane.

Silnik pamięci masowej WiredTiger z wersji 3.2 Enterprise zapewnia dane w szyfrowaniu warstwy pamięci masowej. Potwierdza to, że tylko uwierzytelnieni użytkownicy z kluczami odszyfrowywania mogą uzyskać dostęp do danych. Jeśli nie używasz szyfrowania WiredTiger w spoczynku, użyj szyfrowania File-System. Szyfrowanie danych w spoczynku zniechęca do uzyskania dostępu do zawartości bazy danych, jeśli uzyska dostęp do fizycznego serwera, stąd kluczowa część w zabezpieczaniu MongoDB.

6. Działania systemu audytu

Jest to opcja dla przedsiębiorstw, która umożliwia śledzenie wszystkich zmian w konfiguracji danych i baz danych. Zdarzenia są zapisywane w połączeniu syslog lub w jakimś pliku dziennika. Dzienniki mogą zawierać próby uwierzytelnienia bazy danych, w tym źródłowe adresy IP, a informacje mogą pomóc w ustaleniu, które hosty powinny być blokowane przez zaporę sieciową przed dostępem do bazy danych. Poza tym można określić, które zdarzenia mają być rejestrowane.

Dzienniki audytu w ogólności pomogą administratorowi przeprowadzić analizę kryminalistyczną, a tym samym ustawić standardowe kontrole bezpieczeństwa.

7. Użyj dedykowanego użytkownika do uruchomienia MongoDB

Procesy MongoDB powinny być uruchamiane z dedykowanym kontem użytkownika systemu operacyjnego, które powinno mieć włączone uprawnienia dostępu.

8. Wykorzystaj oficjalne i zaktualizowane pakiety MongoDB

Przejdź sprawdzanie autentyczności swoich pakietów, aby upewnić się, że są oficjalnymi pakietami MongoDB. Korzystanie z najnowszych sterowników MongoDB i najnowszej wersji samej bazy danych zapewnia większą stabilność zabezpieczeń niż poprzednicy. Na przykład wersja 4.2 oferuje szyfrowanie na poziomie pola po stronie klienta. Upewnij się zatem, że migrujesz do najnowszej wersji MongoDB.

 9. Wyłącz wykonywanie skryptów JavaScript, jeśli nie są potrzebne

mapReduce i  $where to niektóre z wykonywalnych kodów JavaScript w MongoDB i jeśli nie są dobrze zarządzane, mogą powodować niechcianą niespójność danych lub umożliwić pośredni dostęp do danych i wprowadzenie pewnych zmian, jeśli chcą .

Ogólnie rzecz biorąc, ten kod JavaScript umożliwia zewnętrzne wstrzykiwanie, a tym samym dostanie się do bazy danych niesprawdzonych danych. Możesz także zdecydować się na użycie pakietów, takich jak mangusta, w celu sprawdzenia poprawności i połączenia z bazą danych. Użyj operatorów MongoDB zamiast wyrażeń JavaScript.

10. Bądź na bieżąco z poprawkami bezpieczeństwa MongoDB

Protokoły bezpieczeństwa mogą z czasem zostać złamane przez atakujących, dlatego konieczne jest włączenie zaawansowanych procedur. Bycie na bieżąco z najlepszymi aktualizacjami bezpieczeństwa i poprawkami błędów z informacji o wydaniu MongoDB jest bardzo ważne. Strona alertów MongoDB została zasadniczo stworzona w tym celu.

Poproś o przewodnik po implementacji technicznej zabezpieczeń, jeśli to możliwe, i upewnij się, że wdrożenie jest zgodne ze standardami bezpieczeństwa.

Wnioski

Produkcyjne bazy danych są podatne na ataki bezpieczeństwa, dlatego trzeba dużo inwestować w ochronę danych wrażliwych. Procedury bezpieczeństwa obejmują przesyłanie danych, dane w spoczynku i połączone aplikacje klienckie. Oprócz wspomnianych powyżej praktyk, przedsięwzięcia wzmacniające serwer zapewnią kolejną warstwę ochrony danych.

Ważne jest, aby korzystać z najnowszych wersji MongoDB i wtyczek, oprócz nadążania za najnowszymi zabezpieczeniami i poprawkami błędów związanych z twoją wersją.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $concatArrays

  2. Zapobiegaj podwójnemu logowaniu za pomocą FOSUserBundle

  3. Wiele operacji grupowych przy użyciu platformy agregacji Mongo

  4. Jak sprawdzić typ danych kolumny w SQL?

  5. Pobierz wartości jako tablicę elementów po $lookup