13 osvědčených postupů pro zabezpečení mikroslužeb

Architektura založená na mikroslužbách přináší značnou míru přizpůsobivosti, škálovatelnosti a umožňuje modifikovat, přidávat či odebírat části softwaru bez dopadu na zbytek aplikace.

Kromě urychlení vývojových cyklů, podpory menších týmů a flexibility v použitých programovacích jazycích, umožňuje také optimalizovat výkon nebo řešit problémy konkrétních funkcí či služeb, aniž by došlo k ovlivnění ostatních prvků systému.

Základním principem mikroslužeb je rozdělení rozsáhlých, monolitických aplikací do samostatných, nezávisle nasaditelných služeb. Nicméně, s tímto rozdělením roste počet komponent, a s tím i složitost a náročnost jejich zabezpečení.

Porovnání monolitické a mikroslužbové architektury: Red Hat

Typické nasazení mikroslužeb se skládá z vrstev hardwaru, služeb či aplikací, komunikační infrastruktury, cloudového prostředí, virtualizace a orchestrace. Každá z těchto vrstev má svá specifika z hlediska bezpečnosti, kontrolních mechanismů a potenciálních problémů.

Bezpečnostní rizika spojená s mikroslužbami

Mikroslužby představují distribuované systémy se složitými přístupovými pravidly, velkým objemem monitorovaného provozu a rozsáhlou útočnou plochou. Navíc, většina mikroslužeb je provozována v cloudových prostředích, které mají vlastní specifické bezpečnostní konfigurace a mechanismy.

Vzhledem k vysokému počtu vystavených API, portů a komponent, tradiční firewall nemusí poskytovat dostatečnou ochranu. Tyto faktory zvyšují zranitelnost nasazení mikroslužeb vůči různým kybernetickým hrozbám, jako jsou útoky typu „man-in-the-middle“, injekční útoky, cross-site scripting, DDoS útoky a další.

Dalším rizikem je zabezpečení sítě, kde identita a správa přístupu dosahují nové úrovně složitosti. Mezi další zranitelnosti patří nezabezpečený kód a chyby v systémech pro vyhledávání služeb.

Přestože zabezpečení mikroslužeb je náročnější než u monolitických aplikací, je možné je efektivně chránit pomocí dobře definované strategie a dodržováním osvědčených postupů.

Ideální přístup vyžaduje distribuovanou strategii, která by pokrývala všechny různé komponenty systému.

Mezi klíčové oblasti pro zabezpečení patří:

  • Ochrana aplikací, mikroslužeb a uživatelů
  • Zabezpečení správy identit a přístupu
  • Ochrana dat
  • Zvýšení bezpečnosti komunikace mezi službami
  • Monitorování mikroslužeb a bezpečnostních systémů

Osvědčené postupy pro zabezpečení mikroslužeb

Jednou z nejlepších strategií je kombinace osvědčených postupů, nástrojů a kontrol, které chrání celý ekosystém. Konkrétní implementace se může lišit v závislosti na typu služeb, aplikací, uživatelů, prostředí a dalších faktorů.

Při implementaci mikroslužeb je klíčové zajistit, že jsou splněny všechny požadavky na zabezpečení služeb, připojení a dat.

Nyní se podíváme na některé efektivní bezpečnostní postupy pro mikroslužby.

#1. Bezpečnost jako součást návrhu 👮

Bezpečnost by měla být nedílnou součástí vývojového cyklu. Ideální je integrovat zabezpečení do vývoje a nasazování mikroslužeb od samého počátku. Tento přístup je jednodušší, efektivnější a nákladově výhodnější než řešení zabezpečení až v pokročilé fázi vývoje.

#2. Aplikujte princip hloubkové obrany

Hloubková obrana (Defense in Depth – DiP) je technika, která zahrnuje aplikaci několika vrstev zabezpečení pro vaše služby a data. Tento přístup ztěžuje útočníkům proniknout přes více vrstev a poskytuje silnější ochranu vašich služeb a dat.

Na rozdíl od perimetrického zabezpečení, jako jsou firewally, se koncept hloubkové obrany spoléhá na kombinaci nástrojů, jako jsou antiviry, firewally, správa oprav, antispam a další. Tyto nástroje vytvářejí více vrstev zabezpečení, které jsou distribuovány v celém systému.

Vícevrstvé zabezpečení hloubkové obrany: Imperva

V tomto přístupu je nutné nejprve identifikovat citlivé služby a následně kolem nich aplikovat odpovídající vrstvy zabezpečení.

#3. Zabezpečte kontejnery 📦

Mikroslužby často využívají kontejnerovou technologii. Zabezpečení kontejnerů, interní i externí, je klíčové pro snížení útočné plochy a rizik. Osvědčeným postupem je zaměření se na princip nejmenších oprávnění, což vyžaduje kombinaci následujících strategií:

  • Omezení oprávnění na nezbytné minimum
  • Zabránění spouštění služeb a dalších procesů pod účtem root nebo s privilegovanými právy
  • Omezení či kontrola přístupu k dostupným prostředkům. Například omezení přístupu kontejnerů k systémovým zdrojům pomáhá zabránit krádeži dat nebo kompromitaci.
  • Neukládání tajných klíčů na disku kontejneru.
  • Použití vhodných pravidel pro izolaci přístupu ke zdrojům.

Důležité je také zajistit, aby obrazy kontejnerů neobsahovaly žádné bezpečnostní chyby či problémy. Pravidelná kontrola zabezpečení a zranitelností kontejnerů pomáhá identifikovat potenciální rizika.

Mezi běžné nástroje pro skenování obrazů patří Clair, Anchore a další.

#4. Implementujte vícefaktorové ověřování 🔒

Aktivace vícefaktorové autentizace (MFA) zvyšuje zabezpečení frontendu.

Uživatelé, kteří se snaží přihlásit, musí kromě uživatelského jména a hesla poskytnout další způsob ověření, například kód zaslaný na jejich telefon nebo e-mailovou adresu. Tato technika ztěžuje útočníkům s odcizenými nebo kompromitovanými přihlašovacími údaji přístup k mikroslužbám, protože nebudou moci poskytnout druhé ověření.

#5. Používejte tokeny identity a přístupu uživatele

V implementaci mikroslužeb velký počet aplikací a služeb vyžaduje bezpečné autorizační a přístupové mechanismy. Autorizační rámce jako OAuth 2.0 a OpenID vám umožní bezpečně zpracovat tokeny a chránit vaše mikroslužby. To následně umožňuje aplikacím třetích stran přistupovat k dalším službám nebo datům od uživatelů.

V typickém nasazení hlavní aplikace požádá uživatele o autorizaci pro službu třetí strany. Po udělení souhlasu aplikace vygeneruje přístupový token pro danou relaci.

OAuth je jednou z nejúčinnějších strategií pro řízení identity uživatele a přístupu. Ačkoli existuje několik dalších autorizačních protokolů a můžete si vytvořit vlastní, je nejlepší používat OAuth, protože je standardizovaný, stabilnější a široce akceptovaný.

#6. Vytvořte API bránu

Mikroslužby se obecně skládají z více komponent distribuovaných v různých sítích a dostupných z široké škály systémů a klientů. Vystavení mikroslužeb zvyšuje zranitelnost a bezpečnostní rizika. Jedním ze způsobů, jak je chránit, je vytvořit jediný, bezpečný vstupní bod, který centralizuje veškerý přístup z externích systémů a klientů.

Pro dosažení tohoto cíle implementujte API bránu, která prověří všechny příchozí požadavky z hlediska bezpečnostních problémů před jejich směrováním do příslušných mikroslužeb. API brána je umístěna mezi klientskými aplikacemi a mikroslužbami. Omezuje vystavení mikroslužeb a současně poskytuje další funkce správy požadavků, jako je autentizace, ukončení SSL, překlad protokolů, monitorování, směrování požadavků, ukládání do mezipaměti a další.

Díky tomuto přístupu API brána směruje všechny externí služby do mikroslužeb a současně podporuje princip hloubkové obrany.

Schéma API brány pro mikroslužby: Livebook

Mezi běžné API brány patří NGINX, Kong, Tyk, Ambassador, AWS API Gateway a další.

Pro další informace o zabezpečení API se podívejte na náš průvodce Proč a jak zabezpečit koncový bod API.

#7. Zónově založené API profily

Implementujte omezení založená na rolích, abyste zajistili, že uživatelé mají přístup pouze k těm API a službám, které potřebují. Vzhledem k tomu, že většina škodlivého softwaru často zpřístupňuje službu širšímu okruhu uživatelů, omezení přístupu pouze pro autorizované uživatele snižuje rizika. Jednou z technik je označování API na základě uživatelů, kteří by k nim měli mít přístup. Obecně lze API rozdělit na:

  • Ethernet API – pro služby vystavené mimo datové centrum.
  • Corporate Zone API – pro interní, privátní provoz
  • DMZ API – pro zpracování provozu z internetu
  • Hybrid Zone API – pro implementace v datových centrech

#8. Zabezpečte komunikaci mezi službami

Efektivní postupy zahrnují ověřování a autorizaci požadavků, když spolu komunikují dvě mikroslužby.

Obecně existují tři základní techniky, které lze použít pro zabezpečení komunikace mezi službami: Důvěra v síť, JSON Web Token (JWT) a Vzájemné ověřování transportní vrstvy (mTLS, Mutual TLS).

Zabezpečení komunikace mezi službami pomocí JWT Livebook

Nejoblíbenější z těchto tří technik je mTLS. V tomto přístupu má každá mikroslužba vlastní pár veřejného a soukromého klíče. Klientská mikroslužba poté používá tento pár klíčů k ověření se u cílové mikroslužby pomocí mTLS.

Během ověřování každá mikroslužba generuje certifikát. Následně každá mikroslužba používá certifikát od druhé k ověření.

Zatímco TLS zajišťuje integritu a důvěrnost přenášených dat, umožňuje klientovi identifikovat mikroslužbu. Klientská mikroslužba obvykle zná cílovou mikroslužbu. Avšak, jelikož TLS je jednosměrné, cílová mikroslužba nemůže ověřit klientskou mikroslužbu – a toho mohou útočníci zneužít. Na druhou stranu, mTLS poskytuje prostředek, kde každá z mikroslužeb může identifikovat druhou.

#9. Omezte rychlost 🚏 klientského provozu

Omezení externího provozu zabrání problémům, jako jsou DoS (Denial of Service) útoky, a také situacím, kdy někteří klienti spotřebovávají většinu šířky pásma aplikace. Jednou z možností je použití různých pravidel, která mohou monitorovat a řídit rychlost provozu odesílaného nebo přijímaného od klienta na základě IP adresy, času a dalších faktorů.

Nakonfigurujte vaše služby tak, aby se zpomalily, pokud detekují několik neúspěšných pokusů o přihlášení k vašim API nebo jinou podezřelou aktivitu.

Zpomalení systému odradí útočníky a pravděpodobně se vzdají pokusů o přístup ke službám. Hodnotit limity můžete pomocí API brány, kódu nebo jiné techniky. Většina SaaS prostředí obvykle má omezení rychlosti API, aby se minimalizovalo zneužití ze strany uživatelů a také útoky.

#10. Použijte správce orchestrace

Správci orchestrace, kromě zvýšení zabezpečení, umožňují automatizovat konfiguraci, koordinaci a další úlohy správy mikroslužeb. Tyto nástroje vám obvykle umožňují spravovat více kontejnerů, omezovat přístup k metadatům, izolovat pracovní zátěže, shromažďovat protokoly a další.

Některé nástroje pro orchestraci mají další funkce, které umožňují vývojářům ukládat a sdílet citlivé informace, jako jsou SSL certifikáty, šifrovací klíče, hesla a tokeny identity.

Dvě běžně používané metody pro efektivní orchestraci mikroslužeb jsou:

  • Kódování orchestrace jako mikroslužby.
  • Použití API bran pro zajištění vrstvy orchestrace.

Orchestrace přes API bránu se nedoporučuje z důvodu problémů, které mohou nastat při škálování služeb.

Vrstva orchestrace mikroslužeb – GlobalLogic

Mezi typické nástroje pro správu orchestrace patří Kubernetes, Istio, Azure Kubernetes Service (AKS) a další.

Pro další informace prozkoumejte Orchestraci kontejnerů pro DeOps.

#11. Monitorujte všechny své systémy a služby

Jelikož mikroslužby spoléhají na distribuované systémy, musíte mít spolehlivou a efektivní strategii monitorování pro všechny jednotlivé komponenty.

Implementace nepřetržitého monitorování umožňuje včas odhalovat a řešit bezpečnostní rizika. K tomuto účelu existuje široká škála řešení pro monitorování mikroslužeb, včetně Prometheus, Statsd, InfluxDB, Logstash a dalších.

Monitorování uvnitř architektury mikroslužeb

Používejte vhodné nástroje k monitorování interních systémů a služeb. Některé osvědčené postupy zahrnují:

  • Povolte protokolování na aplikační vrstvě. Můžete použít Splunk, Grafana, ELK stack a další nástroje, které shromažďují protokoly na úrovni aplikace, kontejneru, sítě a infrastruktury.
  • Sledujte metriky využití
  • Použijte trendy v metrikách jako CPU, paměť, odezva, chyby, upozornění atd. k odhalení neobvyklých aktivit, které by mohly signalizovat potenciální útok.
  • Auditujte protokoly z oblastí jako příchozí klientské požadavky, databázové záznamy, kontejnery a další, abyste odhalili nesrovnalosti nebo neobvyklé aktivity.

#12. Automatizujte bezpečnostní úkoly

Automatizujte procesy zabezpečení, jako je zavádění aktualizací, skenování zranitelností, monitorování, vynucování zásad a další aktivity. Zkontrolujte také aktualizace, abyste se ujistili, že jsou bezpečné a nezavádějí nové chyby zabezpečení.

Po aktualizacích by měl bezpečnostní software provést testy na všech kontejnerech a mikroslužbách, aby zkontroloval, zda se nemohly objevit žádné dříve neznámé zranitelnosti nebo bezpečnostní problémy.

#13. Chraňte 🛡️ data za všech okolností

Chraňte data jak během přenosu, tak i v klidu. V ideálním případě vynucujte používání HTTPS pro veškerou komunikaci, abyste zajistili zabezpečení dat při přenosu, a šifrujte všechna citlivá data, která jsou uložena v klidu. Vyhněte se přenosu a ukládání hesel, klíčů, přihlašovacích údajů a citlivých dat jako prostý text, a to i v kódu.

Nejlepší strategií je šifrovat všechna citlivá data co nejdříve pomocí standardních technologií. Také dešifrujte data co nejpozději, abyste minimalizovali vystavení.

Závěr

Mikroslužby se spoléhají na distribuované komponenty, které přinášejí výhody jako vyšší flexibilitu a možnosti nasazení. Při používání mikroslužeb však musí organizace přizpůsobit své interní bezpečnostní politiky a strategie směrem k nativnímu, distribuovanému přístupu.

Ideální je zaměřit se na snížení útočné plochy, ochranu prostředí mikroslužeb, API, aplikací a dat.