Blog
Detaljan vodič za višezakupničku Docker izolaciju korak po korak
Izolirajte višezakupnička radna opterećenja u Dockeru uz kontrolu troškova hostinga. Saznajte kako konfigurirati imenske prostore, cgroups, mrežna pravila i očvrsnuti runtime.
Sažetak
Upravljanje dijeljenom infrastrukturom za više klijentskih kampanja ili internih web sjedišta često stvara nesuglasice s upravom oko troškova hostinga i sigurnosti podataka. Docker kontejneri pružaju laganu alternativu namjenskim virtualnim strojevima, no zadane postavke ostavljaju ozbiljne sigurnosne propuste u izolaciji. Prava višezakupnička arhitektura (multi-tenancy) zahtijeva promišljene granice na razini kernela, procesa, mreže i pohrane. Ovaj vodič donosi praktičan okvir u pet koraka za osiguravanje višezakupničkih Docker implementacija pomoću izvornih mehanizama izolacije u Linuxu. Naučit ćete kako nametnuti kvote resursa, ograničiti privilegije procesa, segmentirati mreže kontejnera i odabrati pravu razinu izolacije. Slijedeći ovaj plan, možete zaštititi okruženja zakupaca i opravdati infrastrukturni budžet netehničkim dionicima.
Vaš netehnički menadžer ulazi u ured s ispisanim računom za hosting u oblaku za prošli mjesec. Troškovi su porasli, a nekoliko odredišnih stranica visokog prioriteta zabilježilo je skokove u latenciji tijekom istovremenog lansiranja proizvoda. Od vas se traži objašnjenje zašto marketinški resursi dijele poslužitelje, jesu li podaci klijenata izloženi i zašto tim ne može podići skupi namjenski virtualni stroj za svaku pojedinu kampanju.
Dodjeljivanje zasebnog virtualnog stroja (VM) svakom digitalnom resursu eliminira problem „bučnih susjeda” (noisy neighbors), ali brzo troši vaš operativni budžet. Standardne Docker implementacije rješavaju problem troškova pokretanjem više stranica na jednoj jezgri (kernelu) operativnog sustava, ali zadane konfiguracije ostavljaju opasne sigurnosne propuste. Ako aplikacija jednog zakupca naiđe na nekontroliranu skriptu ili pretrpi sigurnosni proboj, sve ostale aplikacije na tom poslužitelju postaju ugrožene.
Iskoristite ovaj detaljni tehnički plan za konfiguriranje stroge višezakupničke izolacije u Dockeru. Primijenite ovih pet operativnih koraka kako biste zaštitili stabilnost sustava, izolirali podatke zakupaca i pretočili tehničke infrastrukturne odluke u jasnu poslovnu vrijednost za upravu.
1. Nametnite stroge kvote resursa pomoću kontrolnih grupa (cgroups)
Odmah postavite eksplicitna ograničenja za procesor (CPU), radnu memoriju i I/O operacije diska na svakom kontejneru. Kada više zakupaca dijeli isti temeljni poslužitelj, neograničeni kontejneri natječu se za sistemske resurse. Jedan nekontrolirani upit bazi podataka ili kampanja s velikim prometom može potrošiti cjelokupnu memoriju poslužitelja, što potiče Linux Out-Of-Memory (OOM) mehanizam da nasumično gasi sistemske procese.
Linux kontrolne grupe (cgroups) upravljaju time koliko računalnog kapaciteta pojedini kontejner može potrošiti. Primijenite ove granice izravno u konfiguraciji svoje implementacije:
services:
tenant_app:
image: nginx:alpine
deploy:
resources:
limits:
cpus: '0.75'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
- Memorijska ograničenja (
limits.memory): Postavlja čvrsti gornji limit. Ako kontejner premaši 512 megabajta, kernel gasi procese unutar tog kontejnera bez narušavanja rada susjednih zakupaca. - Rezervacije memorije (
reservations.memory): Jamči osnovnu alokaciju memorije kako bi aplikacije s manjim prometom ostale responzivne. - Ograničenja procesora (
limits.cpus): Ograničava kontejner na maksimalni udio dostupnih procesorskih jezgri, sprječavajući da jedan zakupac preoptereti procesor.
Kada ovu arhitekturu opravdavate netehničkom vodstvu, objasnite cgroups kao automatizirana digitalna podbrojila. Baš kao što zakupci u poslovnoj zgradi plaćaju vlastitu potrošnju električne energije umjesto da preopterete glavni osigurač, cgroups osiguravaju da odredišna stranica s velikim prometom nikada ne sruši portal za prikupljanje kontakata drugog klijenta. Za detaljniji uvid u arhitektonske kompromise, pročitajte naš vodič o dizajniranju višezakupničke arhitekture.
2. Segmentirajte procese zakupaca pomoću imenskih prostora i ne-root korisnika
Nikada nemojte pokretati procese u kontejneru kao zadani root korisnik. U standardnim Linux kontejnerskim okruženjima, root unutar kontejnera odgovara root korisniku na temeljnom kernelu poslužitelja, osim ako nije izričito drugačije mapirano. Ako napadač kompromitira web aplikaciju koja se izvodi kao root, stječe povišene privilegije nad cijelim dijeljenim poslužiteljem.
Nametnite izolaciju procesa putem korisničkih imenskih prostora i izričitog pokretanja bez root ovlasti:
- Definirajte neprivilegirane korisnike za izvođenje: Stvorite namjenske servisne korisnike s niskim ovlastima unutar svojih Dockerfile datoteka.
FROM php:8.2-fpm-alpine RUN addgroup -g 10001 tenantgroup && \n adduser -u 10001 -D -G tenantgroup tenantuser USER tenantuser - Omogućite korisničke imenske prostore (userns-remap): Konfigurirajte Docker servis (
/etc/docker/daemon.json) za remapiranje ID-jeva korisnika kontejnera u neprivilegirani raspon na poslužitelju.{ "userns-remap": "default" }
Linux imenski prostori (namespaces) dijele vidljivost sustava. Imenski prostor ID-jeva procesa (PID) osigurava da Zakupac A ne može vidjeti, slati signale ili gasiti procese koji pripadaju Zakupcu B. Imenski prostor točaka montiranja (MNT) svakom zakupcu pruža izoliran pogled na datotečni sustav, dok IPC imenski prostori blokiraju neovlaštenu komunikaciju među procesima.
Remapiranje korisničkih imenskih prostora neutralizira mogućnost bijega iz kontejnera (container escape): proces koji unutar kontejnera funkcionira kao root (UID 0) na poslužitelju se mapira na neprivilegirani ID (kao što je UID 165536). Ako sigurnosni propust zaobiđe barijere kontejnera, napadač dobiva neprivilegiranu ljusku koja ne može mijenjati konfiguraciju poslužitelja niti pristupati direktorijima susjednih zakupaca.
3. Uklonite privilegije kernela i nametnite datotečni sustav samo za čitanje
Smanjite dostupne mogućnosti Linux kernela (capabilities) i učinite korijenski datotečni sustav kontejnera nepromjenjivim pri pokretanju. Zadana kontejnerska okruženja dodjeljuju desetak mogućnosti Linux kernela, od kojih većina web aplikacijama nikada nije potrebna. Prekomjerne ovlasti napadačima pružaju alate za manipulaciju mrežnim usmjeravanjem, promjenu sata poslužitelja ili zaobilaženje kontrola pristupa datotekama.
Osigurajte kontejnere uklanjanjem svih zadanih ovlasti i vraćanjem samo onih koje su nužne za rad:
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: Uklanja sve ovlasti kernela s procesa u kontejneru.cap_add: - NET_BIND_SERVICE: Izričito dopušta vezanje na privilegirane priključke (poput 80 i 443), dok blokira izravnu manipulaciju sirovim mrežnim utičnicama (raw sockets).read_only: true: Montira cijeli korijenski datotečni sustav kontejnera u načinu samo za čitanje (read-only). Napadači ne mogu preuzeti zlonamjerne binarne datoteke, mijenjati PHP skripte ili prepravljati konfiguracijske datoteke web poslužitelja.tmpfs: Dodjeljuje privremene direktorije u radnoj memoriji za nužne prolazne datoteke (poput/tmp), uz blokiranje izvršavanja binarnih datoteka (noexec) i eskalacije privilegija (nosuid).
Primijenite filtre načina sigurnog računanja (seccomp) i sigurnosne module poput AppArmora ili SELinuxa kako biste presreli i ograničili sistemske pozive upućene dijeljenom kernelu poslužitelja. Ako vaš tim izrađuje prilagođene web aplikacije, slijedite naše strukturirane korake za očvršćivanje Docker kontejnera u vašim procesima isporuke.
4. Particionirajte mreže između okruženja zakupaca
Onemogućite zadanu premošćenu mrežu (bridge) i uspostavite prilagođene, izolirane softverski definirane bridge mreže za stog svakog zakupca. Prema zadanim postavkama, kontejneri postavljeni na standardnu Docker bridge mrežu mogu se međusobno otkrivati i komunicirati putem internih IP adresa. Sigurnosni propust u marketinškom mikroservisu jednog zakupca omogućuje bočno kretanje (lateral movement) prema svakoj drugoj internoj bazi podataka i aplikaciji na tom poslužitelju.
Potpuno izolirajte promet zakupaca definiranjem neovisnih mrežnih mostova po zakupcu:
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
- Izolacija zakupaca:
alpha_appialpha_dbkomuniciraju isključivo putemtenant_alpha_net.beta_appne može pristupitialpha_db, čak i ako napadač skenira internu podmrežu. - Interna oznaka (
internal: true): Sprječava mreže baza podataka u usmjeravanju prometa izravno na vanjski internet, ograničavajući ulazni i izlazni pristup isključivo na aplikacijske kontejnere. - Ulazni poslužitelj (Reverse Proxy): Samo se ulazni proxy povezuje na
public_gateway_netkako bi usmjerio dolazne HTTP/HTTPS zahtjeve prema odgovarajućem kontejneru zakupca na temelju naziva hosta.
Za naprednija okruženja razmotrite Dockerove načine rada s poboljšanom izolacijom kontejnera (ECI) ili runtime okruženja poput Sysboxa, koja automatski nameću strože granice korisničkih imenskih prostora te virtualizirane /proc i /sys datotečne sustave bez složenog ručnog pisanja mrežnih skripti.
5. Uspostavite objektivnu matricu odlučivanja za višezakupničku arhitekturu
Odbacite pretpostavku da svi digitalni resursi zahtijevaju namjenske virtualne strojeve. Marketinški voditelji često pretpostavljaju da je izolacija na razini hardvera putem VM-ova jedini siguran model. U praksi, dodjela namjenskih VM-ova za jednostavne odredišne stranice ili kratkotrajna sjedišta kampanja stvara ogroman rast troškova i operativnog održavanja, bez stvarnog poboljšanja sigurnosti web aplikacija.
Upotrijebite sljedeću matricu usporedbe za procjenu zahtjeva radnog opterećenja i predstavljanje racionalne strategije implementacije donositeljima odluka:
| Razina izolacije | Temeljna tehnologija | Sigurnosna granica | Utrošak resursa | Najbolji slučaj upotrebe |
|---|---|---|---|---|
| Kontejneri na dijeljenom stogu | Imenski prostori i cgroups na jednom OS-u | Logička izolacija na razini OS-a | Vrlo nizak | Odredišne stranice s velikim prometom, interna razvojna okruženja, privremena sjedišta kampanja |
| Očvrsnuti kontejneri (ECI / Sysbox) | Korisnički imenski prostori, AppArmor, Read-Only root | Napredna razina OS-a i virtualizacija | Nizak | Agencijski hosting za više klijenata, autentificirani portali, osjetljivi marketinški obrasci |
| Namjenski virtualni strojevi (VM-ovi) | Hardverska virtualizacija putem hipervizora | Strogo odvajanje na razini hardvera i kernela | Visok | Obrada plaćanja, regulirani HIPAA/PCI podaci, izvođenje nepouzdanog prilagođenog koda |
| Hibridni model (Kontejneri u namjenskim VM-ovima) | Očvrsnuti kontejneri unutar VM-ova specifičnih za zakupca | Višeslojne hardverske granice i granice OS-a | Umjeren do visok | Korisnici visoke razine (enterprise) koji zahtijevaju strogu ugovornu usklađenost |
Procijenite svaki projekt prema strogim kriterijima prije dodjele infrastrukturnog budžeta:
- Osjetljivost podataka: Pohranjuje li projekt regulatorno zaštićene podatke (npr. podatke o kreditnim karticama ili zdravstvene podatke)? Ako da, implementirajte ga na namjenski VM.
- Porijeklo koda: Implementirate li standardizirani kod koji je revidirao vaš tim ili dopuštate neprovjerene dodatke trećih strana? Standardni kod pripada u očvrsnute kontejnere; neprovjereni kod trećih strana zahtijeva izolaciju hipervizorom.
- Budžet i životni vijek: Za sezonske odredišne stranice i primarna web sjedišta tvrtke, višezakupništvo s očvrsnutim kontejnerima pruža maksimalne performanse po uloženom novcu.
Kada prezentirate planove infrastrukture upravi, konzultirajte naš vodič o procjeni kada klijenti trebaju namjenske VM-ove kako biste svoje preporuke potkrijepili jasnim argumentima temeljenim na razinama izolacije.
Zaključak: Povezivanje sigurnosnih kontrola s poslovnim povratom ulaganja (ROI)
Osiguravanje višezakupničkog Docker okruženja ne zahtijeva proračun za složenu korporativnu infrastrukturu u oblaku. Zahtijeva dosljednu i discipliniranu primjenu kontrola operativnog sustava.
Kada s netehničkim vodstvom pregledavate infrastrukturu, ove tehničke konfiguracije prikažite kroz tri ključna poslovna mjerila:
- Isplativost: Višezakupnički kontejneri omogućuju timu hosting desetaka marketinških stranica uz djelić računalnih resursa koje bi zahtijevali pojedinačni VM-ovi.
- Zaštita dostupnosti sustava (Uptime): Kontrolne grupe jamče da skokovi prometa na sezonskoj kampanji neće narušiti rad glavnih web sjedišta brenda.
- Ograničavanje dometa štete (Blast Radius): Datotečni sustavi samo za čitanje, uklonjene ovlasti i izolirani mrežni mostovi osiguravaju da sigurnosni propust na jednoj stranici ne može ugroziti baze podataka susjednih klijenata ili kontrole poslužitelja.
Sustavno primijenite ove sigurnosne postavke na predloške svojih kontejnera. Time ćete isporučiti infrastrukturu visokih performansi i pristupačne cijene koja zadovoljava i inženjerske sigurnosne standarde i proračunska ograničenja uprave.

