ProHoster > Blog > administracja > Elastic Locked Up: Włączanie opcji bezpieczeństwa klastra Elasticsearch dla dostępu wewnętrznego i zewnętrznego
Elastic Locked Up: Włączanie opcji bezpieczeństwa klastra Elasticsearch dla dostępu wewnętrznego i zewnętrznego
Elastic Stack to narzędzie dobrze znane na rynku systemów SIEM (a właściwie nie tylko). Może zbierać wiele danych o różnej wielkości, zarówno wrażliwych, jak i niezbyt wrażliwych. Nie jest do końca poprawne, jeśli dostęp do samych elementów Elastic Stack nie jest chroniony. Domyślnie wszystkie gotowe elementy Elastic (kolektory Elasticsearch, Logstash, Kibana i Beats) działają na otwartych protokołach. A w samej Kibanie uwierzytelnianie jest wyłączone. Wszystkie te interakcje można zabezpieczyć, a w tym artykule podpowiemy, jak to zrobić. Dla wygody narrację podzieliliśmy na 3 bloki semantyczne:
Model dostępu do danych oparty na rolach
Bezpieczeństwo danych w klastrze Elasticsearch
Zabezpieczanie danych poza klastrem Elasticsearch
Szczegóły pod rozcięciem.
Model dostępu do danych oparty na rolach
Jeśli zainstalujesz Elasticsearch i nie dostroisz go w żaden sposób, dostęp do wszystkich indeksów będzie otwarty dla wszystkich. Cóż, lub ci, którzy potrafią używać curl. Aby tego uniknąć, Elasticsearch ma wzór do naśladowania, który jest dostępny począwszy od subskrypcji Basic (która jest bezpłatna). Schematycznie wygląda to mniej więcej tak:
Co jest na zdjęciu
Użytkownicy to wszyscy, którzy mogą zalogować się przy użyciu swoich danych uwierzytelniających.
Zasoby to indeksy, dokumenty, pola, użytkownicy i inne jednostki magazynu (w przypadku niektórych zasobów wzór do naśladowania jest dostępny tylko w przypadku płatnych subskrypcji).
Domyślnie Elasticsearch ma użytkownicy skrzynek, do którego są przymocowane role pudełkowe. Po włączeniu ustawień zabezpieczeń możesz od razu zacząć z nich korzystać.
Aby włączyć zabezpieczenia w ustawieniach Elasticsearch należy je dodać do pliku konfiguracyjnego (domyślnie jest to Elasticsearch/config/elasticsearch.yml) Nowa linia:
xpack.security.enabled: true
Po zmianie pliku konfiguracyjnego uruchom lub uruchom ponownie Elasticsearch, aby zmiany zaczęły obowiązywać. Kolejnym krokiem jest przypisanie haseł użytkownikom skrzynek. Zróbmy to interaktywnie, używając poniższego polecenia:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y
Enter password for [elastic]:
Reenter password for [elastic]:
Enter password for [apm_system]:
Reenter password for [apm_system]:
Enter password for [kibana]:
Reenter password for [kibana]:
Enter password for [logstash_system]:
Reenter password for [logstash_system]:
Enter password for [beats_system]:
Reenter password for [beats_system]:
Enter password for [remote_monitoring_user]:
Reenter password for [remote_monitoring_user]:
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
Sprawdzanie:
[elastic@node1 ~]$ curl -u elastic 'node1:9200/_cat/nodes?pretty'
Enter host password for user 'elastic':
192.168.0.2 23 46 14 0.28 0.32 0.18 dim * node1
Można się poklepać po plecach – ustawienia po stronie Elasticsearch zakończone. Teraz czas skonfigurować Kibanę. Jeśli uruchomisz go teraz, pojawią się błędy, dlatego ważne jest utworzenie magazynu kluczy. Odbywa się to za pomocą dwóch poleceń (user Kibana i hasło wprowadzone na etapie tworzenia hasła w Elasticsearch):
Jeśli wszystko się zgadza, Kibana zacznie pytać o login i hasło. Subskrypcja podstawowa zawiera wzór do naśladowania oparty na użytkownikach wewnętrznych. Począwszy od Gold, możesz podłączyć zewnętrzne systemy uwierzytelniania - systemy LDAP, PKI, Active Directory i Single Sign-on.
Prawa dostępu do obiektów w Elasticsearch mogą być również ograniczone. Aby jednak zrobić to samo z dokumentami czy polami, będziesz potrzebować płatnej subskrypcji (ten luksus zaczyna się od poziomu Platinum). Ustawienia te są dostępne w interfejsie Kibana lub poprzez Bezpieczeństwo API. Możesz to sprawdzić w znanym już menu Dev Tools:
Gdy Elasticsearch działa w klastrze (co jest powszechne), ustawienia zabezpieczeń w klastrze stają się ważne. Do bezpiecznej komunikacji między węzłami Elasticsearch wykorzystuje protokół TLS. Aby skonfigurować bezpieczną interakcję między nimi, potrzebujesz certyfikatu. Generujemy certyfikat i klucz prywatny w formacie PEM:
[elastic@node1 ~]$ ./elasticsearch/bin/elasticsearch-certutil ca --pem
Po wykonaniu powyższego polecenia w katalogu /../elasticsearch pojawi się archiwum Elastic-Stack-ca.zip. Wewnątrz znajdziesz certyfikat oraz klucz prywatny z rozszerzeniami crt и klucz odpowiednio. Wskazane jest umieszczenie ich na zasobie współdzielonym, który powinien być dostępny ze wszystkich węzłów w klastrze.
Każdy węzeł potrzebuje teraz własnych certyfikatów i kluczy prywatnych na podstawie tych znajdujących się w katalogu współdzielonym. Podczas wykonywania polecenia zostaniesz poproszony o ustawienie hasła. Możesz dodać dodatkowe opcje -ip i -dns w celu pełnej weryfikacji oddziałujących węzłów.
W wyniku wykonania polecenia otrzymamy certyfikat oraz klucz prywatny w formacie PKCS#12, chroniony hasłem. Pozostaje tylko przenieść wygenerowany plik p12 do katalogu konfiguracyjnego:
Uruchamiamy wszystkie węzły Elasticsearch i wykonujemy curl. Jeżeli wszystko zostało wykonane poprawnie, zwrócona zostanie odpowiedź zawierająca kilka węzłów:
Istnieje jeszcze jedna opcja bezpieczeństwa – filtrowanie adresów IP (dostępne w abonamentach od poziomu Gold). Umożliwia tworzenie białych list adresów IP, z których można uzyskać dostęp do węzłów.
Zabezpieczanie danych poza klastrem Elasticsearch
Poza klastrem oznacza podłączenie zewnętrznych narzędzi: Kibana, Logstash, Beats lub innych zewnętrznych klientów.
Aby skonfigurować obsługę https (zamiast http), dodaj nowe linie do Elasticsearch.yml:
Po dodaniu kluczy węzły Elasticsearch są gotowe do połączenia poprzez https. Teraz można je uruchomić.
Następnym krokiem jest utworzenie klucza umożliwiającego podłączenie Kibany i dodanie go do konfiguracji. Na podstawie certyfikatu, który już znajduje się w udostępnionym katalogu, wygenerujemy certyfikat w formacie PEM (PKCS#12 Kibana, Logstash i Beats jeszcze nie obsługują):
Klucze tam są, więc pozostaje tylko zmienić konfigurację Kibany, aby zaczęła ich używać. W pliku konfiguracyjnym kibana.yml zmień http na https i dodaj linie z ustawieniami połączenia SSL. Ostatnie trzy linie konfigurują bezpieczną komunikację pomiędzy przeglądarką użytkownika a Kibaną.
Tym samym ustawienia są zakończone, a dostęp do danych w klastrze Elasticsearch jest szyfrowany.
Jeśli masz pytania dotyczące możliwości Elastic Stack w zakresie bezpłatnych lub płatnych subskrypcji, zadań monitorowania lub tworzenia systemu SIEM, zostaw zapytanie formularz zwrotny na naszej stronie internetowej.
Więcej naszych artykułów na temat Elastic Stack na Habré: