Janus. Observability w środowisku wielodostępnym bez wycieków danych poza granice

Rozwiązanie typu open source, stworzone przez nas i dostępne bezpłatnie dla wszystkich.

Każdy użytkownik widzi dokładnie to, co powinien, i nic więcej. Janus to wielodostępny serwer proxy typu open source firmy evoila dla Prometheusa, Loki i Tempo. Zapewnia on kontrolę dostępu opartą na etykietach oraz polityki zapytań między użytkownikami a stosami narzędzi do monitorowania, w sposób przejrzysty na poziomie bramy i bez ingerencji w systemy backendowe.

Wspólne platformy mają luki w zabezpieczeniach. Janus nie ustępuje.

Wspólne platformy obserwowalności są potężnym narzędziem, dopóki programista nie wysyła zapytania o metryki dotyczące zespołu, do którego nie należy, lub dopóki konto usługowe nie ujawnia logów poza granice dzierżawcy. Janus pełni rolę przezroczystego proxy bezpieczeństwa, działając pomiędzy użytkownikami a stosem monitorowania. Sprawdza tożsamość, interpretuje zasady i egzekwuje dostęp na poziomie etykiet, zanim jakiekolwiek zapytanie dotrze do Prometheusa, Loki lub Tempo. Jest to rozwiązanie typu open source, oparte na Spring WebFlux w celu zapewnienia reaktywnej wydajności i zaprojektowane tak, aby można było je wdrożyć w istniejącym środowisku monitorowania bez konieczności przebudowywania całego stosu.

  • 3 serwery zaplecza: Prometheus, Loki i Tempo w jednym serwerze proxy
  • Model „zero trust”: każde zapytanie jest egzekwowane, bez wyjątków
  • Oprogramowanie open source: GNU AGPLv3.0, tworzone przez społeczność

Dogłębna analiza technologii

W jaki sposób Janus kontroluje dostęp przed wykonaniem zapytania

Każde przychodzące żądanie przechodzi przez trzyetapowy proces przetwarzania w systemie Janus. Najpierw odbywa się uwierzytelnianie. Sprawdzana jest poprawność tokenu JWT lub przekazanej głowicy uwierzytelniającej, a następnie ustalana jest tożsamość podmiotu wysyłającego żądanie. Następnie następuje rozpoznawanie zasad. Ładowane są reguły dostępu dla danej tożsamości, w tym informacje o tym, które wartości etykiet podmiot wysyłający żądanie ma prawo odczytywać. Trzecim etapem jest egzekwowanie zapytania. Żądanie jest analizowane, wstawiane lub weryfikowane są wymagane selektory etykiet, a przepisane żądanie jest wysyłane do odpowiedniego serwisu zaplecza. Odpowiedź jest następnie przekazywana z powrotem w sposób przezroczysty. Dla narzędzia wywołującego Janus pozostaje niewidoczny.

Model działania jest reaktywny i nieblokujący, ponieważ Janus opiera się na bibliotece Spring WebFlux. Oznacza to, że żadne wątki nie pozostają bezczynne w trakcie oczekiwania na odpowiedź serwerów zaplecza, skalowanie przebiega w prosty sposób, a serwer proxy zachowuje niezależność od stanu nawet pod obciążeniem. Zasady dostępu są ładowane ze źródła konfiguracyjnego podczas uruchamiania i można je ponownie załadować bez przestoju.

Poznaj Janus na GitHubie


Kontrola dostępu wbudowana w każdą warstwę żądania

JWT i uwierzytelnianie za pomocą nagłówków

Tożsamość wywołującego jest ustalana na podstawie oświadczeń JWT lub przekazanych nagłówków uwierzytelniających. Rozwiązanie to wpisuje się w istniejące konfiguracje uwierzytelniania oparte na OAuth2 i nie wymaga stosowania odrębnego modelu uwierzytelniania.

Zasady dostępu oparte na etykietach

Zasady określają, jakie wartości etykiet może odczytać podmiot wywołujący, na przykład przestrzeń nazw, usługa, pod, zespół lub dowolna etykieta niestandardowa już używana w stosie.

Automatyczne przepisywanie zapytań

Wymagane selektory etykiet są wstawiane do zapytań PromQL, LogQL i TraceQL przed ich przekazaniem. Egzekwowanie tych zasad nie zależy od dyscypliny po stronie klienta.

Reaktywny, nieblokujący rdzeń

Spring WebFlux stanowi podstawę bezstanowego, skalowalnego horyzontalnie serwera proxy, który powoduje opóźnienie rzędu ułamków milisekundy w ścieżkach zapytań przy obciążeniu produkcyjnym.

Obsługiwane backendy: jeden serwer proxy, pełna obsługa stosu technologicznego

Janus egzekwuje zasady dostępu w systemach Prometheus, Loki i Tempo w ramach jednego wdrożenia. Nie ma potrzeby stosowania oddzielnego serwera proxy dla każdego backendu, oddzielnych modeli zasad dla poszczególnych narzędzi ani różnej logiki egzekwowania w odniesieniu do metryk, logów i śladów. Wystarczy jedna brama dla całego stosu.

Co to oznacza dla Twojej platformy

Praktyczne skutki w całej organizacji

Jedna platforma, wiele zespołów

Wystarczy uruchomić jedną instancję Prometheusa, Lokiego i Tempo dla całej organizacji. Janus zapewnia izolację dzierżawców bez konieczności tworzenia oddzielnych środowisk dla poszczególnych zespołów.

Kontrola dostępu dostosowana do wymogów audytowych

Każde zrealizowane i odrzucone zapytanie można przypisać do konkretnego podmiotu. Naruszenia zasad dostępu są rejestrowane wraz z pełnym kontekstem, dokładnie tak, jak wymagają tego audyty zgodności.

Nie są wymagane żadne zmiany w zapleczu

Janus wdraża się przed istniejącą infrastrukturą. Nie wymaga żadnych zmian w konfiguracji scrapingu ani przeróbek potoku logów. Wystarczy go dodać do swojego środowiska i skonfigurować zasady.

Oprogramowanie open source – zawsze

Licencja MIT bez poziomu korporacyjnego i bez ograniczeń dostępu do funkcji. Zapraszamy do wnoszenia wkładu – drzwi są otwarte.

Want to talk about Janus in your stack?

Niezależnie od tego, czy chcesz dowiedzieć się, jak Janus wpisuje się w Twoją platformę obserwowalności, omówić kwestię kontroli dostępu w modelu wielodostępnym, czy też zapoznać się z rzeczywistym scenariuszem wdrożenia – skontaktuj się z nami. Skierujemy Cię do odpowiedniego eksperta.

Marco Di Martino

Marco Di Martino

Business Unit Lead – Cloud Native

Najczęściej zadawane pytania

Najczęściej zadawane pytania dotyczące Janusa

Nie. Janus działa jako przezroczysty serwer proxy przed istniejącymi serwerami zaplecza. Nie trzeba wprowadzać żadnych zmian w konfiguracji scrapingu, przebudowywać potoku logów ani modyfikować Prometheusa, Loki ani Tempo. Wystarczy skonfigurować zasady, skierować klientów do Janusa, a egzekwowanie zasad rozpocznie się natychmiast.

Zasady są definiowane w źródle konfiguracji i ładowane podczas uruchamiania. Określają one, jakie wartości etykiet może odczytywać każda tożsamość wywołującego — według przestrzeni nazw, usługi, poda, zespołu lub dowolnej etykiety niestandardowej w Twoim stosie. Zasady można ponownie załadować bez przestoju ani konieczności ponownego uruchamiania serwera proxy.

Janus jest udostępniany na licencji GNU AGPLv3.0. Nie ma wersji dla przedsiębiorstw ani ograniczeń dostępu do funkcji. Pełny kod źródłowy jest dostępny na GitHubie w repozytorium evoila/janus.

Jeśli zapytanie można bezpiecznie przeredagować, Janus dodaje do niego wymagane selektory etykiet przed przekazaniem go do zaplecza. Jeśli zapytania nie da się bezpiecznie przeredagować, zostaje ono odrzucone. Każda operacja przeredagowania lub odrzucenia jest rejestrowana wraz z kontekstem tożsamości.

Tak. Janus ładuje zasady z źródła konfiguracyjnego podczas uruchamiania i obsługuje aktualizacje na żywo. Zmiany w zasadach wchodzą w życie bez konieczności ponownego uruchamiania serwera proxy i bez przerywania aktywnych ścieżek zapytań.