Blog
Zabezpečení Docker kontejnerů pro multi-tenant hosting: Průvodce izolací krok za krokem
Naučte se, jak zabezpečit Docker kontejnery pro multi-tenant prostředí pomocí praktických bezpečnostních opatření, jako jsou neroot uživatelé, odebrané schopnosti, systémy souborů pouze pro čtení a izolace sítě.

Shrnutí
Provoz multi-tenant Docker hostingové platformy vyžaduje vzduchotěsnou izolaci kontejnerů, aby se zabránilo vzájemnému rušení tenantů nebo úniku na hostitele. Tento průvodce poskytuje konkrétní, krok za krokem postup zabezpečení, který můžete použít dnes. Naučíte se konfigurovat neroot uživatele, odebírat nepotřebné Linuxové schopnosti, připojovat souborové systémy jako pouze pro čtení, vynucovat omezení zdrojů pomocí cgroups, segmentovat sítě a používat profily seccomp nebo AppArmor. Také se budeme zabývat tím, kdy doplnit kontejnery virtuálními stroji pro maximální bezpečnost. Na konci budete mít kontrolní seznam pro systematické odstranění běžných vektorů úniku z kontejnerů a udržení vaší multi-tenant infrastruktury skutečně izolované.
Skutečný problém s multi-tenant kontejnery
Docker kontejnery sdílejí jádro hostitele a pokud je izolace špatně nakonfigurována, jeden tenant teoreticky může přistupovat k datům jiného, spotřebovat veškerý CPU nebo dokonce uniknout na hostitele. Jako poskytovatel hostingu potřebujete vzduchotěsné hranice bez obětování výkonnostních výhod kontejnerů. Mnoho týmů začíná s výchozím nastavením Dockeru, které je navrženo pro vývoj, ne pro produkční multi-tenancy. Dobrá zpráva: s systematickým kontrolním seznamem zabezpečení můžete uzamknout každý kontejner na úroveň izolace blízkou VM, přičemž si zachováte rychlost Dockeru.
Tento článek vás provede každým krokem zabezpečení s praktickými příklady a upozorněními. Na konci budete mít opakovatelný proces pro nasazení bezpečných multi-tenant kontejnerů.
Krok 1: Spouštějte kontejnery jako neroot uživatel
Ve výchozím nastavení Docker kontejnery běží jako root. Pokud je kontejner napaden, útočník získá root oprávnění uvnitř kontejneru a může se pokusit o únik z kontejneru. Nejprve vytvořte vyhrazeného uživatele v Dockerfile a přepněte na něj:
FROM ubuntu:22.04
RUN useradd -m appuser
USER appuser
Upozornění: Některé procesy (např. vazba na porty < 1024) vyžadují root. V těchto případech použijte příznak --cap-add pro udělení pouze potřebné schopnosti, jako --cap-add=NET_BIND_SERVICE, a proces stále spouštějte pod neroot uživatelem.
Pro více informací o základní izolaci si přečtěte našeho průvodce o dosažení skutečné multi-tenant izolace v Dockeru.
Krok 2: Odeberte všechny Linuxové schopnosti a přidejte zpět pouze to, co potřebujete
Linuxové schopnosti rozdělují root oprávnění na malé jednotky. Docker kontejnery přicházejí s výchozí sadou schopností, které jsou pro multi-tenant hosting příliš benevolentní. Odeberte všechny a přidejte zpět jen to, co vaše aplikace vyžaduje:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE my-app
Běžné schopnosti, kterým se vyhnout: SYS_ADMIN (únik z kontejneru), NET_RAW (odposlouchávání paketů), SYS_PTRACE (ladění procesů). Použijte docker run s --security-opt no-new-privileges pro zabránění eskalaci oprávnění pomocí setuid binárek.
Krok 3: Připojte kořenový souborový systém jako pouze pro čtení
Útočníci často zapisují škodlivé skripty do souborového systému kontejneru. Tím, že nastavíte kořenový souborový systém jako pouze pro čtení, tomu zabráníte:
docker run --read-only --tmpfs /tmp:rw,noexec,nosuid,size=64m my-app
--tmpfs vytváří dočasný zapisovatelný mount pro adresáře jako /tmp a /var/run. Příznak noexec zabraňuje spouštění z tohoto mountu. Tento přístup nutí útočníky k přechodu přes zapisovatelné adresáře, které můžete monitorovat.
Krok 4: Vynucujte omezení zdrojů pomocí cgroups
Neomezené kontejnery mohou provádět útoky denial-of-service vyčerpáním paměti nebo CPU hostitele. Použijte runtime omezení Dockeru:
docker run --memory=512m --memory-swap=512m --cpus=0.5 --pids-limit=100 my-app
--memorya--memory-swapnastavují pevné limity (bez swapu).--cpusomezuje CPU.--pids-limitzabraňuje fork bombám omezením počtu procesů.
Upozornění: Omezení zdrojů jsou vynucována cgroups, ale nezabraňují úniku dat přes síť. Zkombinujte s izolací sítě (další krok).
Krok 5: Segmentujte sítě pomocí vlastních sítí Dockeru
Ve výchozím nastavení Docker kontejnery sdílejí bridge síť. V multi-tenant nastavení musíte izolovat síťový stack každého tenanta. Vytvořte vyhrazenou síť pro každého tenanta:
docker network create tenant-alpha --internal
docker run --network tenant-alpha my-app
Použijte příznak --internal pro blokování odchozího přístupu k internetu a poté vystavte pouze nezbytné porty přes -p. Pro pokročilejší segmentaci sítě zvažte zabezpečení webových aplikací pomocí Docker izolace.
Upozornění: Interní sítě zabraňují přímé komunikaci mezi kontejnery napříč tenanty, ale k únikům DNS může stále dojít, pokud používáte host networking. Držte se bridge nebo overlay sítí.
Krok 6: Použijte profily Seccomp a AppArmor
Seccomp filtruje systémová volání a AppArmor (nebo SELinux) vynucuje povinné řízení přístupu. Docker poskytuje výchozí seccomp profil, který blokuje nebezpečná syscalla jako clone s určitými příznaky. Pro přísnější izolaci vytvořte vlastní profil:
docker run --security-opt seccomp=./custom.json --security-opt apparmor=docker-default my-app
Základní profil můžete vygenerovat pomocí docker run --rm -it --security-opt seccomp=unconfined my-app strace -c -S time a poté zúžit. Upozornění: Příliš restriktivní profily mohou narušit legitimní funkčnost. Důkladně testujte ve stagingu.
Krok 7: Zvažte hybridní izolaci s virtuálními stroji
Pokud vaši tenanti vyžadují absolutní izolaci (např. regulované odvětví), spouštějte kontejnery uvnitř lehkého VM. Nástroje jako Sysbox nebo Kata Containers poskytují oddělení na úrovni hardwaru bez obětování rychlosti kontejnerů. Toto je přístup používaný Docker Enhanced Container Isolation (ECI). I když je režie vyšší než u holých kontejnerů, je mnohem nižší než u plných VM na jednu zátěž.
Pro více informací o výběru správné úrovně izolace si přečtěte navrhování multi-tenant Docker architektury.
Shrnutí: Kontrolní seznam zabezpečení
- Sestavte kontejnery s neroot uživatelem.
- Odeberte všechny schopnosti, přidejte pouze potřebné.
- Připojte souborový systém jako pouze pro čtení s dočasnými zapisovatelnými mounty.
- Nastavte limity paměti, CPU a PID.
- Vytvořte izolované Docker sítě na tenanta.
- Použijte vlastní profily seccomp a AppArmor.
- Zvažte hybridní VM kontejnery pro vysoké bezpečnostní potřeby.
Závěr
Zabezpečení kontejnerů není jednorázový úkol – je to neustálá disciplína. Výše uvedené kroky tvoří bezpečnostní základ pro multi-tenant hosting. Pamatujte, že žádné jednotlivé opatření nezaručuje bezpečnost; klíčová je obrana do hloubky. Začněte se základy: neroot uživatelé a odebrané schopnosti. Poté přidejte omezení zdrojů a segmentaci sítě. Pro nejcitlivější zátěže zkombinujte kontejnery s VM. S tímto průvodcem můžete s jistotou nasadit multi-tenant Docker prostředí, která jsou jak efektivní, tak bezpečná.
