Fintech mikroszolgáltatás-architektúrával
Egy pénzügyi alkalmazás minden belső hívást mTLS-en keresztül bonyolít, hogy egy kompromittált konténer se tudjon jogosulatlanul más szolgáltatásokat elérni a klaszteren belül.
Az mTLS és a Zero Trust azt a feltevést váltja fel, hogy a belső hálózaton lévő gép automatikusan megbízható. Minden szolgáltatás saját tanúsítvánnyal azonosítja magát a másiknak, a belső hitelesítésszolgáltató rövid élettartamú, automatikusan rotálódó tanúsítványokat ad ki, a titkok pedig titkosítva kerülnek a gitbe vagy egy trezorba. Ezt építjük fel és üzemeltetjük, a havi órák terhére.
Kiépítünk egy belső hitelesítésszolgáltatót, cert-managerrel vagy step-cával, amely minden szolgáltatásnak saját, rövid élettartamú tanúsítványt ad ki. A szolgáltatások a hívásoknál kölcsönösen igazolják magukat: nemcsak a kliens ellenőrzi a szervert, hanem fordítva is. Ez azt jelenti, hogy egy belső hálózaton belülre jutó támadó sem tud egyszerűen egy szolgáltatás nevében fellépni, mert a tanúsítvány nélkül a hívást a másik oldal elutasítja. Ezt a modellt fokozatosan vezetjük be, hogy a meglévő szolgáltatásaid ne álljanak le a bekötés közben.
A Zero Trust lényege, hogy a belső hálózaton belüli hely önmagában nem jelent bizalmat. Ezt a szemléletet minden bevezetésnél ugyanazokkal a lépésekkel alkalmazzuk, és a dokumentációdban is rögzítjük, a tanúsítvány-rotáció ütemezésével együtt. Egy klasszikus, hálózati zónákra épülő bizalmi modell egyetlen kompromittált gépből az egész belső hálózatot elérhetővé teszi, míg az identitás-alapú modellben minden egyes hívást külön kell igazolni. Ez a különbség dönti el, mekkora kárt okozhat egyetlen sérült konténer a rendszer egészében.
Egy teljes service mesh, mint a Linkerd vagy az Istio, automatikusan bevezeti az mTLS-t minden szolgáltatás között, és mérőszámokat, forgalomirányítást is ad hozzá, de egy külön futásidejű réteget és plusz erőforrást jelent. Kisebb rendszereknél gyakran sidecar nélküli megoldást javaslunk: a szolgáltatások könyvtárszinten kezelik az mTLS-t, egyszerűbb üzemeltetéssel. A választás a szolgáltatások számától és a csapatod tapasztalatától függ, ezt közösen mérjük fel.
A belső hitelesítésszolgáltató kiépítése, az első szolgáltatások bekötése és a titokkezelés beállítása a havi órák terhére történik: 1–8 óra a VPS-terveken, csomagtól függően 5–10 óra a dedikált és 10 óra a GPU szervereken. Az ügyfélpanel DevOps szolgáltatások menüpontjából kéred, javasolt határidővel. Mivel a teljes szolgáltatás-állomány bekötése több hónapig is eltarthat, jellemzően szolgáltatás-csoportonként haladunk, a kritikusabbakkal kezdve, és minden szakasz végén tesztelt állapotot adunk át. A kereten felüli munkát külön, óradíj alapján számlázzuk.
Minden előfizetés havi DevOps, Kiberbiztonsági és Programozási órákat tartalmaz: 1 óra a cPanel Advanced csomagtól felfelé, 1–8 óra VPS esetén, dedikált szervereken csomagtól függően 5–10 óra, GPU szervereken pedig 10 óra. Az órákat az ügyfélpanelből lehet kérni, nem vihetők át a következő hónapra, és ami a keretet meghaladja, azt elfogadjuk és külön számlázzuk.
Elmondod, hány szolgáltatásod van, és melyik kommunikál egymással bizalmasnak számító adatokkal, majd javasolsz egy határidőt a panelből.
Feltérképezzük a szolgáltatások közötti hívásokat, kiválasztjuk a hitelesítésszolgáltatót és a rotációs ütemet, és meghatározzuk a bevezetés sorrendjét.
Kiépítjük a hitelesítésszolgáltatót, bekötjük a szolgáltatásokat, teszteljük a kölcsönös hitelesítést, majd ellenőrizzük, hogy tanúsítvány nélkül a hívás elutasításra kerül.
Megkapod a hitelesítésszolgáltató konfigurációját, a rotációs ütemet, az új szolgáltatások bekötésének lépéseit és a titokkezelési eljárást.
Egy pénzügyi alkalmazás minden belső hívást mTLS-en keresztül bonyolít, hogy egy kompromittált konténer se tudjon jogosulatlanul más szolgáltatásokat elérni a klaszteren belül.
Egy SaaS-szolgáltató ügyfelenként elkülönített szolgáltatás-identitásokat vezet be, hogy egy ügyfél adataihoz tartozó szolgáltatás ne tudjon hozzáférni egy másik ügyfél erőforrásaihoz.
Egy betegadatokat kezelő rendszer minden belső API-hívást kölcsönösen hitelesít, a rövid élettartamú tanúsítványokkal csökkentve egy esetleges kompromittálódás időablakát.
A sima TLS-nél csak a kliens ellenőrzi a szerver tanúsítványát. Az mTLS-nél a szerver is ellenőrzi a kliens tanúsítványát, tehát mindkét fél igazolja magát. Szolgáltatások közötti kommunikációnál ez azt jelenti, hogy egyik oldal sem fogadhat el hívást ismeretlen vagy nem hitelesített féltől.
A Zero Trust abból indul ki, hogy a belső hálózaton belüli hely önmagában nem bizonyíték a megbízhatóságra. Egy tűzfal a hálózat szélét védi, de egy már bejutott támadó szabadon mozoghat belül. A Zero Trust minden egyes hívást külön igazoltat, függetlenül attól, honnan érkezik.
Egy néhány órás vagy napos érvényességű tanúsítvány automatikusan lejár, ha valamiért nem rotálódik újra, ami korlátozza egy ellopott kulcs kárát. Egy évekre kiadott tanúsítvány visszavonása gyakran elmarad, és sokáig felhasználható marad egy incidens után is.
Kevesebb, tíznél kevesebb szolgáltatásnál a sidecar nélküli, könyvtárszintű mTLS jellemzően elegendő és egyszerűbb üzemeltetni. Egy service mesh akkor éri meg, ha sok szolgáltatásod van, és a forgalomirányítást, a mérőszámokat is a hálózati rétegben szeretnéd kezelni, nem az alkalmazáskódban.
Vagy titkosítva a gitben, SOPS-szal, ahol a titkosított fájl bátran verziózható, vagy egy külön titokkezelő szolgáltatásban, mint a Vault, ahonnan futáskor olvassa ki az alkalmazás. Egyik esetben sem kerül sima szövegként titok a kódba vagy a konfigurációs fájlba.
A titkosítás és a tanúsítvány-ellenőrzés mérhető, de jellemzően kis overheadet jelent modern hardveren. A gyakorlatban a nagyobb kihívás nem a teljesítmény, hanem a bevezetés szervezése: a tanúsítvány-kiadás és a rotáció automatizálása, hogy ne kelljen kézzel karbantartani.
Kiépítjük a belső hitelesítésszolgáltatót és a szolgáltatások közötti mTLS-t, a havi órák terhére, dokumentálva a rotációs eljárást.