Blog
Podrobný plán pre multi-tenant izoláciu v Dockeri krok za krokom
Izolujte multi-tenant záťaže v Dockeri a zároveň majte pod kontrolou náklady na hosting. Zistite, ako nakonfigurovať namespaces, cgroups, sieťové pravidlá a zabezpečenie runtime prostredia.
Zhrnutie
Správa zdieľanej infraštruktúry pre viaceré klientske kampane alebo interné webové projekty často vedie k sporom s vedením ohľadom nákladov na hosting a bezpečnosti údajov. Docker kontajnery predstavujú odľahčenú alternatívu k dedikovaným virtuálnym strojom, no predvolené konfigurácie zanechávajú závažné medzery v izolácii. Skutočný multi-tenancy si vyžaduje premyslené hranice na úrovni jadra, procesov, siete a úložiska. Táto príručka prináša praktický päťkrokový rámec na zabezpečenie multi-tenant nasadení v Dockeri pomocou natívnych izolačných prvkov Linuxu. Dozviete sa, ako vynútiť kvóty zdrojov, obmedziť privilégiá procesov, segmentovať siete kontajnerov a vybrať správnu úroveň izolácie. Dodržiavaním tohto plánu ochránite prostredia jednotlivých tenantov a obhájite rozpočty na infraštruktúru pred netechnickými zainteresovanými stranami.
Váš netechnický manažér vstúpi do kancelárie s vytlačenou faktúrou za cloudový hosting za minulý mesiac. Náklady stúpli, no niekoľko prioritných landing pages zaznamenalo počas súbežného uvedenia produktu na trh výrazné nárasty latencie. Žiadajú od vás vysvetlenie, prečo marketingové projekty zdieľajú rovnaké servery, či nie sú vystavené klientske dáta a prečo tím nemôže spustiť drahý dedikovaný virtuálny stroj pre každú jednu kampaň.
Pridelenie vlastného virtuálneho stroja (VM) každému digitálnemu projektu síce eliminuje problém „hlučných susedov“ (noisy neighbors), no rýchlo vyčerpá váš prevádzkový rozpočet. Štandardné nasadenia Dockeru riešia problém s nákladmi spustením viacerých stránok na jednom jadre operačného systému, no predvolené konfigurácie zanechávajú nebezpečné medzery v izolácii. Ak sa v aplikácii jedného tenanta vyskytne nekontrolovateľný skript alebo bezpečnostný incident, ohrozená je každá spoločne hostovaná aplikácia na danom hostiteľovi.
Použite tento podrobný technický plán na konfiguráciu dôslednej multi-tenant izolácie v Dockeri. Implementujte týchto päť prevádzkových krokov, aby ste ochránili stabilitu systému, izolovali dáta tenantov a premenili technické rozhodnutia v infraštruktúre na jasnú obchodnú hodnotu pre vedenie spoločnosti.
1. Vynúťte striktné kvóty zdrojov pomocou Control Groups (cgroups)
Okamžite nastavte explicitné limity pre CPU, pamäť a diskové I/O operácie na každom kontajneri. Keď viacerí tenanti zdieľajú základného hostiteľa, neobmedzené kontajnery medzi sebou súťažia o systémové zdroje. Jeden nekontrolovaný databázový dopyt alebo vysoko navštevovaná kampaň môže vyčerpať celú pamäť hostiteľa, čo spustí Linux Out-Of-Memory (OOM) killer, ktorý začne ukončovať náhodné systémové procesy.
Linuxové riadiace skupiny (cgroups) určujú, koľko výpočtovej kapacity môže ktorýkoľvek kontajner spotrebovať. Aplikujte tieto hranice priamo vo svojich definíciách nasadenia:
services:
tenant_app:
image: nginx:alpine
deploy:
resources:
limits:
cpus: '0.75'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
- Pamäťové limity (
limits.memory): Stanovujú pevný strop. Ak kontajner prekročí 512 megabajtov, jadro ukončí procesy v tomto kontajneri bez toho, aby to ovplyvnilo susedných tenantov. - Rezervácie pamäte (
reservations.memory): Zaručujú základné pridelenie pamäte, vďaka čomu zostanú aplikácie s nízkou návštevnosťou responzívne. - Limity CPU (
limits.cpus): Obmedzujú kontajner na maximálny podiel dostupných jadier CPU, čím zabraňujú vyťaženiu celého procesora jedným tenantom.
Pri obhajobe tejto architektúry pred netechnickým vedením vysvetlite cgroups ako automatizované digitálne podružné merače. Podobne ako nájomníci v kancelárskej budove platia za svoju individuálnu spotrebu elektriny namiesto toho, aby preťažili hlavný istič, cgroups zabezpečujú, že jedna vyťažená landing page nikdy nezhodí portál na získavanie leadov iného klienta. Podrobnejší pohľad na architektonické kompromisy nájdete v našej príručke o návrhu multi-tenant architektúry.
2. Segmentujte procesy tenantov pomocou Namespaces a používateľov bez oprávnení root
Nikdy nespúšťajte procesy v kontajneroch pod predvoleným používateľom root. V štandardných linuxových kontajnerových prostrediach root v kontajneri zodpovedá rootovi na základnom jadre hostiteľa, pokiaľ nie je explicitne premapovaný. Ak útočník prenikne do webovej aplikácie bežiacej pod rootom, získa zvýšené privilégiá nad celým zdieľaným hostiteľom.
Vynúťte izoláciu procesov prostredníctvom používateľských menných priestorov (user namespaces) a explicitného spúšťania bez práv roota:
- Definujte neprivilegovaných používateľov pre beh aplikácie: Vytvorte vyhradených servisných používateľov s nízkymi oprávneniami priamo vo svojich Dockerfiles.
FROM php:8.2-fpm-alpine RUN addgroup -g 10001 tenantgroup && \n adduser -u 10001 -D -G tenantgroup tenantuser USER tenantuser - Povoľte User Namespaces (userns-remap): Nakonfigurujte démona Dockeru (
/etc/docker/daemon.json) tak, aby premapoval ID používateľov kontajnera na rozsah bez privilégií na hostiteľovi.{ "userns-remap": "default" }
Linuxové namespaces rozdeľujú viditeľnosť systému. Menný priestor Process ID (PID) zabezpečuje, že Tenant A nemôže vidieť, posielať signály ani ukončovať procesy patriace Tenantovi B. Menný priestor Mount (MNT) poskytuje každému tenantovi izolovaný pohľad na súborový systém, zatiaľ čo IPC namespaces blokujú neoprávnenú medziprocesovú komunikáciu.
Premapovanie používateľských menných priestorov neutralizuje vektory úniku z kontajnera (container escape): proces, ktorý sa vo vnútri kontajnera považuje za root (UID 0), je na hostiteľskom stroji namapovaný na neprivilegované ID (napríklad UID 165536). Ak exploit obíde bariéry kontajnera, útočník skončí v neprivilegovanom shelli, z ktorého nedokáže upravovať konfigurácie hostiteľa ani pristupovať k adresárom susedných tenantov.
3. Odstráňte privilégiá jadra a vynúťte súborové systémy iba na čítanie
Osekajte dostupné schopnosti Linuxu (Linux capabilities) a nastavte koreňový súborový systém kontajnera pri štarte ako nemenný (read-only). Predvolené runtime prostredia kontajnerov udeľujú približne tucet schopností linuxového jadra, z ktorých webové aplikácie mnohé vôbec nepotrebujú. Nadbytočné schopnosti poskytujú útočníkom nástroje na manipuláciu so smerovaním siete, zmenu systémového času hostiteľa alebo obchádzanie riadenia prístupu k súborom.
Zabezpečte bežiace kontajnery odstránením všetkých predvolených schopností a opätovným pridaním iba nevyhnutných prevádzkových príznakov:
services:
tenant_web:
image: custom-nginx:latest
read_only: true
cap_drop:
- ALL
cap_add:
- NET_BIND_SERVICE
security_opt:
- no-new-privileges:true
- seccomp=default.json
tmpfs:
- /tmp:rw,noexec,nosuid,size=64m
- /var/run:rw,noexec,nosuid,size=16m
cap_drop: - ALL: Odoberie procesu v kontajneri úplne každú schopnosť jadra.cap_add: - NET_BIND_SERVICE: Explicitne povoľuje naviazanie na privilegované porty (ako 80 a 443), pričom blokuje priamu manipuláciu so surovými sieťovými soketmi (raw sockets).read_only: true: Pripojí celý koreňový súborový systém kontajnera iba na čítanie. Útočníci tak nemôžu stiahnuť škodlivé binárne súbory, upravovať PHP skripty ani meniť konfiguračné súbory webového servera.tmpfs: Vyhradí dočasné adresáre v operačnej pamäti pre potrebné pracovné súbory (ako/tmp), pričom zablokuje spúšťanie binárnych súborov (noexec) a eskaláciu privilégií (nosuid).
Aplikujte filtre režimu bezpečného počítania (seccomp) a bezpečnostné moduly ako AppArmor alebo SELinux na zachytávanie a obmedzovanie systémových volaní smerovaných na zdieľané jadro hostiteľa. Ak váš tím spravuje vlastné zostavenia webových aplikácií, postupujte podľa našich štruktúrovaných krokov pre zabezpečenie Docker kontajnerov vo vašich procesoch nasadzovania.
4. Rozdeľte siete medzi prostrediami jednotlivých tenantov
Vypnite predvolenú sieť bridge a vytvorte pre každý stack tenanta vlastné, izolované softvérovo definované siete bridge. V predvolenom nastavení môžu kontajnery umiestnené v štandardnej sieti Docker bridge navzájom komunikovať a vyhľadávať sa prostredníctvom interných IP adries. Zraniteľnosť v marketingovej mikroslužbe jedného tenanta umožňuje laterálny pohyb ku každej ďalšej internej databáze a aplikácii na danom hostiteľovi.
Úplne izolujte sieťovú prevádzku tenantov deklarovaním nezávislých sieťových bridge rozhraní pre každého tenanta:
networks:
tenant_alpha_net:
driver: bridge
internal: true
tenant_beta_net:
driver: bridge
internal: true
public_gateway_net:
driver: bridge
services:
alpha_app:
image: tenant_a_app:latest
networks:
- tenant_alpha_net
- public_gateway_net
alpha_db:
image: mariadb:10.11
networks:
- tenant_alpha_net
beta_app:
image: tenant_b_app:latest
networks:
- tenant_beta_net
- public_gateway_net
beta_db:
image: mariadb:10.11
networks:
- tenant_beta_net
- Izolácia tenanta:
alpha_appaalpha_dbkomunikujú výhradne cez sieťtenant_alpha_net. Aplikáciabeta_appsa kalpha_dbnedostane, ani keby útočník skenoval internú podsieť. - Príznak Internal (
internal: true): Zabraňuje databázovým sieťam smerovať prevádzku priamo do vonkajšieho internetu a obmedzuje prichádzajúci aj odchádzajúci prístup výhradne na aplikačné kontajnery. - Reverzná proxy brána: Iba vstupná (ingress) proxy sa pripája k sieti
public_gateway_net, aby smerovala prichádzajúce HTTP/HTTPS požiadavky na určený kontajner tenanta podľa názvu hostiteľa.
Pre pokročilejšie prostredia zvážte režimy Enhanced Container Isolation (ECI) od Dockeru alebo runtime prostredia ako Sysbox, ktoré automaticky vynucujú prísnejšie hranice používateľských menných priestorov a virtualizované súborové systémy /proc a /sys bez zložitého manuálneho skriptovania sietí.
5. Stanovte objektívnu rozhodovaciu maticu pre multi-tenancy
Odmietnite predpoklad, že všetky digitálne aktíva vyžadujú dedikované virtuálne stroje. Marketingoví lídri často predpokladajú, že izolácia pomocou VM na úrovni hardvéru je jediným obhájiteľným bezpečnostným modelom. V praxi vytvára poskytovanie dedikovaných VM pre jednoduché landing pages alebo krátkodobé kampaňové weby obrovský nárast nákladov a réžiu na prevádzkovú údržbu bez toho, aby sa reálne zvýšila bezpečnosť webovej aplikácie.
Nasledujúcu porovnávaciu maticu použite na vyhodnotenie požiadaviek na pracovné zaťaženie a na predstavenie racionálnej stratégie nasadenia osobám s rozhodovacou právomocou:
| Úroveň izolácie | Základná technológia | Hranica bezpečnosti | Réžia zdrojov | Najvhodnejší prípad použitia |
|---|---|---|---|---|
| Zdieľané kontajnery v stacku | Namespaces a Cgroups na jednom OS | Logická izolácia na úrovni OS | Veľmi nízka | Vysoko navštevované landing pages, interný staging, dočasné kampaňové weby |
| Zabezpečené kontajnery (ECI / Sysbox) | User namespaces, AppArmor, Read-Only root | Pokročilá úroveň OS a virtualizácia | Nízka | Agentúrny hosting pre viacero klientov, autentifikované portály, citlivé marketingové formuláre |
| Dedikované virtuálne stroje (VM) | Hardvérová virtualizácia cez hypervízor | Striktné oddelenie hardvéru/jadra | Vysoká | Spracovanie platieb, regulované dáta HIPAA/PCI, spúšťanie nedôveryhodného vlastného kódu |
| Hybrid (kontajnery v dedikovaných VM) | Zabezpečené kontajnery vnútri špecifických VM tenanta | Viacvrstvové hardvérové a OS hranice | Stredná až vysoká | Prémioví podnikoví klienti vyžadujúci zmluvnú dedikovanú zhodu |
Pred alokáciou rozpočtu na infraštruktúru vyhodnoťte každý projekt podľa prísnych kritérií:
- Citlivosť údajov: Ukladá projekt regulované údaje (napr. záznamy o platobných kartách alebo zdravotné informácie)? Ak áno, nasaďte ho do dedikovaného VM.
- Pôvod kódu: Nasadzujete štandardizovaný kód auditovaný tímom, alebo povoľujete neoverené pluginy tretích strán? Štandardný kód patrí do zabezpečených kontajnerov; neotestovaný kód tretích strán vyžaduje izoláciu na úrovni hypervízora.
- Rozpočet a životnosť: V prípade sezónnych landing pages a hlavných firemných webov poskytuje multi-tenancy v zabezpečených kontajneroch maximálny výkon za vynaložené financie.
Pri prezentovaní infraštruktúrnych plánov vedeniu si prečítajte našu príručku o hodnotení, kedy klienti potrebujú dedikované VM, aby ste svoje odporúčania podložili jasnými argumentmi založenými na jednotlivých úrovniach.
Záver: Prevedenie bezpečnostných kontrol na obchodnú návratnosť investícií (ROI)
Zabezpečenie multi-tenant prostredia v Dockeri si nevyžaduje rozpočet na podnikovú cloudovú architektúru. Vyžaduje si dôslednú a disciplinovanú aplikáciu kontrol na úrovni operačného systému.
Keď hodnotíte infraštruktúru s netechnickým vedením, zasaďte tieto technické konfigurácie do rámca troch manažérskych metrík:
- Nákladová efektívnosť: Multi-tenant kontajnery umožňujú tímu hostovať desiatky marketingových webov na zlomku výpočtovej kapacity, ktorú by vyžadovali samostatné VM.
- Ochrana dostupnosti (uptime): Control groups garantujú, že nárasty návštevnosti v sezónnej kampani nezhoršia výkon hlavných webových stránok značky.
- Obmedzenie dosahu incidentu (Blast Radius): Súborové systémy iba na čítanie, odobraté schopnosti a izolované sieťové mosty zabezpečujú, že exploit na jednej stránke nemôže získať prístup k susedným databázam klientov ani k ovládaniu hostiteľa.
Implementujte tieto mantinely systematicky vo svojich šablónach kontajnerov. Získate tak vysokovýkonnú a nákladovo efektívnu infraštruktúru, ktorá splní technické bezpečnostné štandardy aj rozpočtové limity vedenia.

