13 najlepszych praktyk w zakresie zabezpieczania mikrousług

Architektura mikrousług zapewnia elastyczność, skalowalność oraz możliwość modyfikowania, dodawania lub usuwania składników oprogramowania bez wpływu na inne części aplikacji.

Oprócz krótszych cykli tworzenia oprogramowania, mniejszych zespołów i elastycznych opcji języka programowania umożliwia skalowanie lub rozwiązywanie problemów z niektórymi funkcjami lub usługami bez ingerencji w inne komponenty.

Ogólnie rzecz biorąc, mikrousługi umożliwiają rozbijanie dużych monogamicznych aplikacji na niezależnie wdrażane odrębne usługi. Jednak te mniejsze niezależne usługi zwiększają liczbę komponentów, stąd złożoność i trudność w ich zabezpieczeniu.

Obraz architektury monolitycznej i mikrousług Czerwony kapelusz

Zwykle typowe wdrożenie mikrousług obejmuje warstwy sprzętu, usługi lub aplikacji, komunikacji, chmury, wirtualizacji i aranżacji. Każdy z nich ma określone wymagania dotyczące bezpieczeństwa, kontrole i wyzwania.

Wyzwania bezpieczeństwa związane z mikrousługami

Mikrousługi to zazwyczaj szeroko rozpowszechnione systemy ze złożonymi regułami dostępu, większym ruchem do monitorowania i większą powierzchnią ataku. Ponadto większość chmury mikrousług działa w środowiskach chmurowych, które również mają różne konfiguracje zabezpieczeń i kontroli.

Ze względu na dużą liczbę odsłoniętych interfejsów API, portów i komponentów tradycyjne zapory ogniowe mogą nie zapewniać odpowiedniego bezpieczeństwa. Te problemy sprawiają, że wdrożenia mikrousług są bardziej podatne na różne cyberzagrożenia, takie jak man-in-middle, ataki polegające na wstrzykiwaniu, skrypty krzyżowe, DDoS i inne.

Bezpieczeństwo sieci to kolejne wyzwanie związane z mikrousługami. W szczególności kontrola tożsamości i dostępu zakłada nowy poziom złożoności. Inne luki obejmują niezabezpieczony kod i luki w systemach wykrywania usług.

Chociaż zabezpieczanie mikroserwisów jest trudniejsze niż w przypadku aplikacji monolitycznych, można je skutecznie chronić, opracowując dobrą strategię i przestrzegając najlepszych praktyk.

W idealnym przypadku architektura wymaga podejścia rozproszonego, które powinno obejmować wszystkie różne komponenty.

Typowe obszary, którymi należy się zająć, to m.in

  • Ochrona aplikacji, mikrousług i użytkowników
  • Zabezpieczanie zarządzania tożsamością i dostępem
  • Ochrona danych
  • Zwiększ bezpieczeństwo komunikacji między usługami
  • Monitorowanie mikroserwisów i systemów bezpieczeństwa

Najlepsze praktyki zabezpieczania mikrousług

Jedną z najlepszych strategii jest zastosowanie kombinacji najlepszych praktyk, narzędzi i kontroli w celu ochrony całego ekosystemu. Rzeczywiste podejście może się różnić w zależności od rodzaju usług, aplikacji, użytkowników, czynników środowiskowych i innych.

Decydując się na korzystanie z mikrousług, musisz upewnić się, że spełniasz wszystkie wymagania dotyczące bezpieczeństwa usług, połączeń i danych.

Przyjrzyjmy się teraz niektórym skutecznym praktykom bezpieczeństwa mikrousług.

# 1. Buduj bezpieczeństwo od podstaw 👮

Uczyń bezpieczeństwo częścią cyklu rozwoju. Najlepiej zintegrować zabezpieczenia z rozwojem i wdrażaniem mikrousług od samego początku. Zajęcie się bezpieczeństwem w ten sposób jest łatwym, skutecznym i tańszym podejściem niż czekanie z dodaniem go, gdy rozwój oprogramowania zbliża się do końca.

#2. Użyj mechanizmu obrony w głębi

Głęboka obrona (DiP) to technika, w której stosujesz kilka warstw zabezpieczeń swoich usług i danych. Ta praktyka utrudnia atakującym przeniknięcie przez wiele warstw, zapewniając w ten sposób silne bezpieczeństwo usług i danych.

W przeciwieństwie do rozwiązań ochrony obwodowej, takich jak zapory ogniowe, koncepcja obrony w głąb jest inna. Opiera się na kombinacji narzędzi, takich jak program antywirusowy, zapora ogniowa, zarządzanie poprawkami, oprogramowanie antyspamowe i inne, aby zapewnić wiele warstw bezpieczeństwa rozproszonych w całym systemie.

Zaawansowana wielowarstwowa ochrona Obraz: Imperva

Przy takim podejściu należy najpierw zidentyfikować wrażliwe usługi, a następnie zastosować wokół nich odpowiednie warstwy bezpieczeństwa.

#3. Wdróż zabezpieczenia na poziomie kontenera 📦

Najczęściej mikroserwisy opierają się na technologii kontenerowej. W związku z tym zabezpieczenie kontenerów, zarówno wewnętrzne, jak i zewnętrzne, jest jednym ze sposobów zmniejszenia powierzchni ataku i ryzyka. Idealnie, dążenie do zasady bezpieczeństwa najmniejszych uprawnień jest dobrą praktyką i wymaga kombinacji strategii, w tym między innymi;

  • Ograniczenie uprawnień do wymaganego minimum
  • Unikaj uruchamiania usług i czegokolwiek innego przy użyciu sudo lub kont uprzywilejowanych.
  • Ogranicz lub kontroluj dostęp i zużycie dostępnych zasobów. Na przykład ograniczenie dostępu do zasobów systemu operacyjnego przez kontenery pomaga zapobiegać kradzieży lub naruszeniu bezpieczeństwa danych.
  • Nie przechowuj wpisów tajnych na dysku kontenera.
  • Użyj odpowiednich reguł, aby odizolować dostęp do zasobów.

Istotne jest również, aby obrazy kontenerów nie miały żadnych luk w zabezpieczeniach ani problemów z bezpieczeństwem. Regularne skanowanie kontenerów pod kątem bezpieczeństwa i luk w zabezpieczeniach pomoże zidentyfikować zagrożenia.

Typowe narzędzia do skanowania obrazu obejmują Klara, Kotwicai więcej.

#4. Wdróż uwierzytelnianie wieloskładnikowe 🔒

Włączenie uwierzytelniania wieloskładnikowego zwiększa bezpieczeństwo interfejsu użytkownika.

Użytkownicy uzyskujący dostęp będą musieli podać swoją nazwę użytkownika i hasło oprócz innej formy weryfikacji, takiej jak kod wysłany na ich telefon lub określony adres e-mail. Technika ta utrudnia atakującym, którzy mogą używać skradzionych lub zhakowanych poświadczeń, dostęp do mikrousług, ponieważ nie będą mieli możliwości zapewnienia drugiego uwierzytelnienia.

#5. Używaj tokenów tożsamości użytkownika i dostępu

Przy wdrażaniu mikrousług duża liczba aplikacji i usług będzie wymagać bezpiecznej autoryzacji i kontroli dostępu. Struktura autoryzacji, taka jak OAuth 2.0 i OpenID, umożliwia bezpieczne przetwarzanie tokenów, a tym samym ochronę mikrousług. W rezultacie umożliwia to aplikacjom stron trzecich dostęp do innych usług lub danych użytkowników.

W typowym wdrożeniu główna aplikacja poprosi użytkownika o autoryzację usługi strony trzeciej. Po zaakceptowaniu tego aplikacja generuje token dostępu dla sesji.

W szczególności OAuth jest jedną z najskuteczniejszych strategii kontroli tożsamości użytkownika i dostępu. Chociaż istnieje kilka innych protokołów autoryzacji i można również tworzyć własne, najlepszą praktyką jest korzystanie z Uwierzytelnianie OA ponieważ jest bardziej standardowy, stabilny i powszechnie akceptowany.

#6. Utwórz bramę interfejsu API

Ogólnie rzecz biorąc, mikrousługi składają się z kilku komponentów rozproszonych w różnych sieciach i dostępnych z szerokiej gamy systemów i klientów. Ujawnienie mikrousług zwiększa luki w zabezpieczeniach i zagrożenia bezpieczeństwa. Jednym ze sposobów ich ochrony jest utworzenie pojedynczego i bezpiecznego punktu wejścia, który pomaga scentralizować cały dostęp z zewnętrznych systemów i klientów.

Aby to osiągnąć, wdróż bramę interfejsu API, aby sprawdzać wszystkie przychodzące żądania pod kątem problemów z bezpieczeństwem przed skierowaniem ich do odpowiednich mikrousług. Brama interfejsu API znajduje się między aplikacjami klienckimi a mikrousługami. Następnie ogranicza ujawnianie mikrousług, zapewniając jednocześnie dodatkowe funkcje zarządzania żądaniami, takie jak uwierzytelnianie, zakończenie SSL, translacja protokołów, monitorowanie, kierowanie żądań, buforowanie i inne.

Dzięki takiemu podejściu brama interfejsu API kieruje wszystkie usługi zewnętrzne do mikrousług, jednocześnie obsługując zasadę ochrony w głąb.

Obraz bramy interfejsu API mikrousług Książka na żywo

Typowe bramy API obejmują NGINX, Kong, Tyk, Ambasador, Brama API AWSi więcej.

Aby dowiedzieć się więcej o bezpieczeństwie API, zapoznaj się z naszym przewodnikiem Dlaczego i jak zabezpieczyć punkt końcowy API.

#7. Interfejsy API profili oparte na strefie wdrażania

Wdrażaj ograniczenia oparte na rolach, zapewniając użytkownikom dostęp tylko do interfejsów API i usług, których potrzebują. Ponieważ większość złośliwego oprogramowania często udostępnia usługę większej liczbie osób, ograniczenie dostępu tylko do autoryzowanych użytkowników zmniejsza ryzyko. Jedną z technik zmniejszania narażenia jest etykietowanie interfejsów API na podstawie użytkowników, którzy powinni mieć do nich dostęp. Zasadniczo interfejsy API mogą być;

  • Interfejsy API Ethernet — dla usług wystawionych na działanie świata zewnętrznego poza centrum danych.
  • API strefy korporacyjnej – przeznaczone są do wewnętrznego ruchu prywatnego
  • API DMZ – do obsługi ruchu pochodzącego z internetu
  • Interfejsy API strefy hybrydowej — do wdrożeń w centrach danych

#8. Zabezpiecz komunikację między usługami

Skuteczne praktyki obejmują uwierzytelnianie i autoryzację żądań, gdy komunikują się dwie mikrousługi.

Zasadniczo istnieją trzy główne techniki, których można użyć do zabezpieczenia komunikacji między usługami. Są to Trust the network, JSON Web Token (JWT) i Mutual Transport Layer Security (mTLS lub Mutual TLS).

Zabezpieczanie komunikacji między usługami za pomocą JWT Image Książka na żywo

Spośród tych trzech najbardziej popularny jest mTLS. W tym podejściu każda mikrousługa musi mieć parę kluczy publiczny/prywatny. Następnie mikrousługa klienta używa pary kluczy do uwierzytelnienia się w mikrousłudze odbierającej za pośrednictwem protokołu mTLS.

Podczas uwierzytelniania każda mikrousługa generuje certyfikat. Następnie każda mikrousługa użyje certyfikatu innej usługi do uwierzytelnienia.

Chociaż protokół TLS zapewnia integralność i poufność przesyłanych danych, umożliwia również klientowi identyfikację mikrousługi. Mikrousługa klienta zwykle zna inną mikrousługę. Ponieważ jednak protokół TLS jest jednokierunkowy, mikrousługa odbierająca nie może zweryfikować mikrousługi klienta, a atakujący mogą wykorzystać tę lukę. Z drugiej strony mTLS zapewnia środki, w których każda z mikrousług może identyfikować drugą.

#9. Limit stawek 🚏 ruchu klientów

Ograniczenie ruchu zewnętrznego zapobiega problemom, takim jak ataki typu „odmowa usługi” (DoS), a także przypadkom, w których niektórzy klienci zużywają większość przepustowości aplikacji. Jednym ze sposobów jest zastosowanie różnych reguł, które mogą monitorować i kontrolować szybkość ruchu wysyłanego lub odbieranego od klienta na podstawie adresu IP, czasu itp.

Skonfiguruj swoje usługi tak, aby zwalniały, jeśli wykryją kilka nieudanych prób logowania do interfejsów API lub jakąkolwiek inną podejrzaną aktywność.

Powolny system zniechęciłby atakujących i prawdopodobnie zrezygnowałby z próby uzyskania dostępu do usług. Możesz ocenić limit za pomocą bramy API, kodu lub dowolnej innej techniki. Zwykle większość środowisk SaaS ma ograniczenie szybkości API, aby zminimalizować nadużycia ze strony użytkowników, a także ataki.

#10. Użyj menedżerów aranżacji

Menedżerowie aranżacji umożliwiają automatyzację konfiguracji, koordynacji i innych zadań związanych z zarządzaniem mikrousługami, a także zwiększają bezpieczeństwo. Zazwyczaj narzędzia umożliwiają zarządzanie wieloma kontenerami, ograniczanie dostępu do metadanych, segregację obciążeń, zbieranie dzienników i nie tylko.

Niektóre narzędzia orkiestracji mają dodatkowe funkcje, które umożliwiają programistom przechowywanie i udostępnianie poufnych informacji, takich jak certyfikaty SSL, klucze szyfrowania, hasła i tokeny tożsamości.

Dwie powszechnie stosowane metody efektywnej orkiestracji mikrousług to:

  • Kodowanie orkiestracji jako mikrousługi
  • Korzystanie z bram interfejsu API w celu zapewnienia warstwy aranżacji

Orkiestracja za pośrednictwem bramy interfejsu API nie jest zalecana ze względu na wyzwania związane z koniecznością skalowania usług.

Warstwa orkiestracji mikrousług — Obraz Globallogic

Typowe narzędzia do zarządzania orkiestracją obejmują Kubernetesa, Istio, Usługa Azure Kubernetes (AKS)itp.

Aby dowiedzieć się więcej, zapoznaj się z orkiestracją kontenerów dla DeOps.

#11. Monitoruj wszystkie swoje systemy i usługi

Ponieważ mikrousługi opierają się na systemach rozproszonych, potrzebna jest niezawodna i skuteczna strategia monitorowania wszystkich poszczególnych komponentów.

Wdrażanie ciągłego monitorowania umożliwia wykrywanie zagrożeń bezpieczeństwa i eliminowanie ich w odpowiednim czasie. W tym celu istnieje szeroka gama rozwiązań do monitorowania mikroserwisów, w tym Prometeusz, Statsd, InfluxDB, Logstashitp.

Monitorowanie wewnątrz architektury mikroserwisów

Używaj odpowiednich narzędzi do monitorowania wewnętrznych systemów i usług. Niektóre najlepsze praktyki obejmują;

  • Włącz logowanie w warstwie aplikacji. Możesz Splunk, Graphana, Stos ELKoraz inne narzędzia, które zbierają dzienniki na poziomie aplikacji, kontenera, sieci i infrastruktury.
  • Monitoruj metryki użycia
  • Korzystaj z trendów metryk, takich jak procesor, pamięć, czasy odpowiedzi, błędy, powiadomienia i inne, aby wykrywać nietypowe działania wskazujące na istniejący lub potencjalny atak.
  • Audytuj dzienniki w obszarach takich jak przychodzące żądania klientów, rekordy bazy danych, kontenery i inne, aby zidentyfikować niespójności lub nietypowe działania.

#12. Zautomatyzuj działania związane z bezpieczeństwem

Zautomatyzuj procesy bezpieczeństwa, takie jak wdrażanie aktualizacji, skanowanie luk w zabezpieczeniach, monitorowanie, egzekwowanie zasad i inne działania. Dodatkowo sprawdź aktualizacje, aby upewnić się, że są bezpieczne i nie wprowadzają nowych luk w zabezpieczeniach.

Po aktualizacji oprogramowanie zabezpieczające powinno w idealnym przypadku przeprowadzać testy na wszystkich kontenerach i mikrousługach, aby sprawdzić, czy mogły wystąpić jakieś luki w zabezpieczeniach lub problemy z bezpieczeństwem, które miały miejsce wcześniej.

#13. Chroń 🛡️ dane przez cały czas

Chroń dane podczas przesyłania i przechowywania. W idealnym przypadku należy wymusić stosowanie protokołu HTTPS do całej komunikacji, aby zabezpieczyć przesyłane dane i szyfrować wszystkie poufne dane w spoczynku. Unikaj przesyłania i przechowywania haseł, kluczy, poświadczeń i poufnych danych, które znajdują się poza kodem.

Najlepszą strategią jest użycie standardowych technologii do jak najwcześniejszego zaszyfrowania wszystkich wrażliwych danych. Ponadto odszyfruj dane tak późno, jak to możliwe, aby zmniejszyć narażenie.

Wniosek

Mikrousługi opierają się na rozproszonych komponentach, aby zapewnić korzyści, takie jak większa elastyczność i opcje wdrażania. Jednak podczas korzystania z mikrousług organizacje muszą dostosować wewnętrzne zasady i strategie bezpieczeństwa w kierunku podejścia bardziej natywnego dla chmury i rozproszonego.

Najlepiej dążyć do zmniejszenia powierzchni ataku, ochrony środowiska mikrousług, interfejsów API, aplikacji i danych.