Container Security — Bezpečnosť kontajnerov
Kontajnery priniesli revolúciu v nasadzovaní aplikácií, ale aj nové bezpečnostné výzvy. Zdieľajú jadro hostiteľského systému, čo znamená, že zle nakonfigurovaný kontajner môže ohroziť celý server. Bezpečnosť kontajnerov vyžaduje viacvrstvový prístup.
Čo je Container Security?
Container security zahŕňa celý životný cyklus kontajnera — od výberu base image, cez build, distribúciu, až po runtime. Kľúčové oblasti sú: vulnerability scanning, minimalizácia oprávnení, izolácia procesov a ochrana filesystému.
Ako funguje scanning a ochrana
Vulnerability Scanning (Trivy) — Trivy od Aqua Security je najrozšírenejší open-source scanner. Analyzuje images na známe zraniteľnosti (CVE), nesprávnu konfiguráciu a vystavené secrets:
# Scan Docker image
trivy image myapp:latest
# Scan s konkrétnou severity
trivy image --severity HIGH,CRITICAL myapp:latest
# Scan Dockerfile
trivy config Dockerfile
# Integrácia do CI — fail pri CRITICAL
trivy image --exit-code 1 --severity CRITICAL myapp:latest
Rootless kontajnery — spúšťanie kontajnerov pod neprivilegovaným používateľom výrazne znižuje riziko privilege escalation:
FROM node:20-alpine
RUN addgroup -S app && adduser -S app -G app
USER app
WORKDIR /home/app
COPY --chown=app:app . .
CMD ["node", "index.js"]
Seccomp profily — obmedzujú systémové volania, ktoré kontajner môže vykonať. Docker má defaultný profil, ktorý blokuje ~44 nebezpečných syscalls (napr. reboot, mount, ptrace):
docker run --security-opt seccomp=custom-profile.json myapp
Read-only filesystem — zabraňuje kontajneru zapisovať na disk, čo blokuje mnoho typov útokov:
docker run --read-only --tmpfs /tmp myapp
Pre zápis dočasných súborov sa používa tmpfs mount.
Praktické použitie
Kompletný bezpečnostný pipeline:
- Build — multi-stage build, distroless/Alpine base image, non-root USER
- Scan — Trivy v CI/CD pipeline, blokujúci build pri kritických CVE
- Registry — Harbor s automatickým scanningom, image signing cez Cosign
- Runtime — read-only FS, seccomp, dropped capabilities, resource limits
Obmedzenie Linux capabilities:
docker run --cap-drop ALL --cap-add NET_BIND_SERVICE myapp
Toto odstráni všetky capabilities a pridá len to, čo aplikácia skutočne potrebuje.
Best Practices
- Skenujte images v každom CI builde — zraniteľnosti sa objavujú denne
- Používajte minimálne base images (Alpine, distroless, scratch)
- Vždy definujte
USERv Dockerfile — nikdy nebežte ako root - Aktivujte
--read-onlya explicitne povolte len nevyhnutné zapisovateľné cesty - Dropnite všetky capabilities a pridávajte len potrebné (
--cap-drop ALL) - Nastavte resource limits (CPU, RAM) aby kompromitovaný kontajner nemohol vyčerpať hostiteľa
- Pravidelne aktualizujte base images — staré images akumulujú zraniteľnosti
- Používajte network policies na obmedzenie komunikácie medzi kontajnermi
Container security nie je jednorazová úloha, ale kontinuálny proces. Defense in depth — kombinácia viacerých vrstiev ochrany — je jediný spoľahlivý prístup.