Pionas wspomniał w jednym z poprzednich wpisów, że w cyklu brakuje mu artykułu na temat zabezpieczenia naszego Elasticsearcha przed działaniami osób nieuprawnionych.
Długo podchodziłem do tego tematu, a okazał się on banalnie prosty – Elasticsearch, w darmowej wersji, nie dostarcza żadnych funkcjonalności pomagających zabezpieczyć go przed nieuprawnionym dostępem.
Dziękuję.
Do widzenia.
Koniec.
Jak żyć?
Ale jak to? Nic? Zero? Nada? Null?
Zgadza się. W darmowej wersji nie ma niczego, co pomogłoby nam zabezpieczyć naszą instancję Elasticsearcha.
Co więc oferuje firma Elastic ze swojej strony?
Security Feature (dawniej X-Pack)
Nie jest tak, że Elastic nie daje nic. Firma dostarcza jedyny i rekomendowany (jakże mogłoby być inaczej) sposób zabezpieczenia naszego Elasticsearcha w postaci czegoś, co nazywa się Security Feature.
Do niedawna Feature’y były znane pod nazwą X-Pack, jednak tak jak i inne elementy przeszły mały rebranding.
Niestety, tak jak wspomniałem, funkcjonalność jest dostępna jedynie po wykupieniu płatnej subskrypcji w wersji gold lub platinum (wcześniej możemy wszystko przetestować korzystając z 30-dniowej wersji próbnej):
Jak widać na załączonym obrazku subskrypcja musi kosztować solidne pieniądze (albo być uzależniona od wielu czynników) jeżeli na stronie brakuje choćby ceny wyjściowej.
Co otrzymujemy?
Naprawdę sporo. Od autoryzacja i uwierzytelniania, poprzez szyfrowanie i log dokonywanych zmian, aż po ustawienia dostępu do poszczególnych indeksów, dokumentów, czy nawet pól. Nie ma na co narzekać. No może poza ceną jaką musimy za to zapłacić.
Alternatywy
Jak to zwykle w świecie oprogramowania bywa – na każdy „płatny problem” znajdzie się kilka darmowych (przynajmniej częściowo) alternatyw. Nie inaczej jest i w tym przypadku. Szczególnie, że Elasticsearch, poprzez system wtyczek, bardzo ułatwia takie działania.
Po chwili poszukiwań znalazłem dwa solidnie wyglądające zamienniki, a także jeden nieco bardziej „amatorski” (przynajmniej marketingowo), ale również intensywnie rozwijany.
Pierwszą z alternatyw jest Search Guard. W chwili pisania tego wpisu udostępnia trzy wersje, z czego dwie są płatne, a jedna bezpłatna z otwartym kodem.
Analogicznie do Search Guard wygląda ReadonlyREST. Podobnie jak ten pierwszy posiada trzy podstawowe warianty, z czego jeden jest bezpłatny. W odróżnieniu do oprogramowania Search Guard, kod ReadonlyREST nie został otwarty.
Patrząc po listach dostępnych opcji obydwu rozwiązań wydaje się, że darmowe wersje spełnią oczekiwania naszych „domowych” projektów, a być może przeżyją również na produkcji 😉
Minusem może być nienadążanie za kolejnymi wersjami Elasticsearcha, brak kompatybilności lub słabe wsparcie społeczności w „cięższych” przypadkach. Zaznaczam jednak, że sam nie testowałem ich na tyle, żeby stwierdzić rzeczywiste pojawienie się którejś z tych wad.
Ostatnim, nieco „uboższym” projektem, który zwrócił moją uwagę jest ProxES stworzony przez EagerELK. Nie dostarcza on tak szerokiej gamy funkcjonalności jak dwa powyższe, ale mimo tego może okazać się dla Ciebie przydatny.
Podsumowanie
Przyznam szczerze, że nie przetestowałem wystarczająco wszystkich wymienionych przeze mnie rozwiązań, żeby dzielić się tutaj detalami konfiguracyjnymi i przykładami możliwości. IMHO zawarcie wszystkiego w jednym artykule rozciągnęłoby go w nieskończoność.
Stwierdziłem, że jeżeli będzie zainteresowanie (wyrażone w komentarzach poniżej), to postaram się przygotować odrębne artykuły na temat każdego z wymienionych narzędzi. W ten sposób będą lżejsze do strawienia na raz 😉
Na koniec mam do Ciebie ogromną prośbę. Jeżeli udało Ci się przetestować któreś z powyższych rozwiązań „produkcyjnie” i masz większe doświadczenie na jego temat, to podziel się nim proszę w komentarzu poniżej. Na pewno skorzystają na tym inni czytelnicy. Jeśli znasz inne, godne polecenia alternatywy zabezpieczenia Elasticsearcha, to również śmiało o nich napisz. Chętnie się czegoś nauczę 🙂
Bądź na bieżąco!
Podobają Ci się treści publikowane na moim blogu? Nie chcesz niczego pominąć? Zachęcam Cię do subskrybowania kanału RSS, polubienia fanpage na Facebooku, zapisania się na listę mailingową:
lub śledzenia mnie na Twitterze. Generalnie polecam wykonanie wszystkich tych czynności, bo często zdarza się tak, że daną treść wrzucam tylko w jedno miejsce. Zawsze możesz zrobić to na próbę, a jeśli Ci się nie spodoba – zrezygnować
Dołącz do grup na Facebooku
Chcesz więcej? W takim razie zapraszam Cię do dołączenia do powiązanych grup na Facebooku, gdzie znajdziesz dodatkowe informacje na poruszane tutaj tematy, możesz podzielić się własnymi doświadczeniami i przemyśleniami, a przede wszystkim poznasz ludzi interesujących się tą samą tematyką co Ty.
W grupie Programista Na Swoim znajdziesz wiele doświadczonych osób chętnych do porozmawiania na tematy krążące wokół samozatrudnienia i prowadzenia programistycznej działalności gospodarczej. Vademecum Juniora przeznaczone jest zaś do wymiany wiedzy i doświadczeń na temat życia, kariery i problemów (niekoniecznie młodego) programisty.
Wesprzyj mnie
Jeżeli znalezione tutaj treści sprawiły, że masz ochotę wesprzeć moją działalność online, to zobacz na ile różnych sposobów możesz to zrobić. Niezależnie od tego co wybierzesz, będę Ci za to ogromnie wdzięczny.
Na wsparciu możesz także samemu zyskać. Wystarczy, że rzucisz okiem na listę różnych narzędzi, które używam i polecam. Decydując się na skorzystanie z któregokolwiek linku referencyjnego otrzymasz bonus również dla siebie.
Picture Credits
21 maja 2019 at 22:31
Ludzie! Zobaczcie jaką moc ma blogowanie!
Niespełna dwa miesiące temu pisałem o tym, że firma Elastic nie dostarcza darmowego rozwiązania do zabezpieczenia Elasticsearcha.
Okazało się, że naciski wywarte zasięgiem jaki uzyskał powyższy wpis nakłoniły firmę Elastic do bezwarunkowej kapitulacji i udostępnienia podstawowych narzędzi zabezpieczających zupełnie za darmo:
https://www.elastic.co/blog/security-for-elasticsearch-is-now-free
Jest moc! 😀
19 kwietnia 2019 at 20:38
Z ReadonlyRESTem nie jest do końca tak jak napisałeś. Kod plugina jest otwarty: https://github.com/sscarduzio/elasticsearch-readonlyrest-plugin (wtyczka do Kibany do RORa jest zamknięta), wspiera starsze wersje ESa (nawet dla nowo pojawiajacych sie ficzerow) i ciągle się rozwija nadążając za zmianami. Wszystko, co oferuje plugin jest darmowe – np. taka integracja z LDAPem. Z powodzeniem wdrożyliśmy go w jednego z największych operatorow telco w PL, gdzie dziala na klastrze >30 nodow, ok 200TB danych.
21 kwietnia 2019 at 09:52
Faktycznie, masz rację! Jakoś tego niedopatrzyłem 🙁 Poprawię artykuł jak znajdę chwilę.
BTW. Dzięki za podzielenie się doświadczeniem z wdrożenia.
16 kwietnia 2019 at 01:53
Ja mogę bardzo polecić Search Guarda(testowałem też ReadonlyREST, X-PACK).
SG, zresztą jak i inne rozwiązania pozwala zabezpieczyć cały Elastic Stack. Poczynając od Beatsów, aż do Kibany.
Dlaczego Search Guard:
– open source,
– dobra dokumentacja,
– elastyczna konfiguracja + pomocne narzędzia, np. do generacji certyfikatów itd.,
– wersja Community Editon(darmowa) bije konkurencje, jeżeli chodzi o funkcjonalności,
– wiele więcej rzeczy …
Co do Amazona https://opendistro.github.io/for-elasticsearch-docs/docs/security/, z tego co teraz pobieżnie widzę, to jest dokładnie to samo co SG odnośnie konfiguracji, tylko zamiast, np.
opendistro_security.audit.type: internal_elasticsearch
w SG jest
searchguard.audit.type: internal_elasticsearch
W tym rozwiązaniu Amazona mamy dodatkowo za darmo audit logging, kerberos, Active Directory i LDAP, JSON web token authentication, OpenID – te rzeczy w Search Guardzie nie są dostępne w wersji Community Edition.
16 kwietnia 2019 at 07:03
Dzięki za podzielenie się swoją opinią. Sam niedługo będę musiał wdrożyć któreś z rozwiązań, więc zacznę od Search Guarda.
4 kwietnia 2019 at 07:15
Zostawiam do poczytania:
Thousands of Unprotected Kibana Instances Exposing Elasticsearch Databases
Jak widać zabezpieczenie samego Elasticsearch nie zawsze jest wystarczające. Trzeba jeszcze pamiętać o zabezpieczeniu narzędzi (w tym przypadku Kibany), które z niego korzystają.
3 kwietnia 2019 at 14:13
Niedawno i Amazon coś jeszcze zmajstrował
https://opendistro.github.io/for-elasticsearch-docs/docs/security/
3 kwietnia 2019 at 21:53
Faktycznie. Dzięki za podesłanie – wcześniej tego nie widziałem. Miałeś okazję już testować?
11 kwietnia 2019 at 15:15
Póki co, nie. Jednak to kwestia czasu. 😉
15 kwietnia 2019 at 10:03
Odezwij się jak już będziesz miał jakieś „pierwsze wrażenia” 🙂