Bezpečnostní zásady izolace v kontejnerovém prostředí

Prečo bezpečnosť kontejnerov nie je len o Dockeri

Kontejnerizácia prostredníctvom nástrojov ako Docker, containerd či CRI-O a orchestrátory ako Kubernetes prinášajú výrazný nárast rýchlosti vývoja a škálovateľnosti aplikácií. Avšak zároveň otvárajú nové vektory útokov, ktoré vyžadujú dôkladný bezpečnostný prístup. Medzi hlavné výzvy patrí zdieľaný kernel hostiteľského operačného systému, dynamická sieťová topológia, komplexný dodávateľský reťazec softvéru a vysoká miera automatizácie. Tento článok predstavuje systematické zásady pre bezpečný návrh, tvorbu, nasadenie a prevádzku kontajnerov a ich klastrov s prístupom „defense-in-depth“, ktorý pokrýva všetky vrstvy od zdrojového kódu a image cez runtime a sieť až po governance a auditnú kontrolu.

Model hrozieb v kontajnerovom prostredí

  • Únik z kontajnera: využitie zraniteľností kernelu, nesprávnych oprávnení či nesprávne nastavených mountov umožňujúcich prekročenie izolácie kontajnera a prístup k hostiteľskému systému.
  • Malvér v image: kompromitované alebo podvrhnuté základné image, knižnice a nástroje použité pri build procese môžu zaviesť škodlivý kód už na začiatku.
  • Laterálny pohyb: prelomenie jedného podu alebo služby umožňuje útočníkovi šíriť sa naprieč sieťou klastru a kompromitovať ďalšie komponenty.
  • Exfiltrácia citlivých údajov: únik tajomstiev (secrets) z premenných prostredia, nevhodne zabezpečených zväzkov alebo údajov typu kubelet metadata.
  • Útoky na dodávateľský reťazec: zneužitie CI/CD pipeline, nedostatočná overiteľnosť artefaktov alebo typoitové útoky v registroch image.
  • Konfiguračné chyby: nadmerné oprávnenia podov, otvorené dashboardy, nesprávne nastavené RBAC, nešifrované atďd. úložiská (etcd).

Bezpečný dodávateľský reťazec od kódu po image

  • Minimálne základné image: preferujte distroless, ubi-minimal alebo alpine s ohľadom na kompatibilitu s musl; eliminujte kompilátory, shelly a správcov balíkov z runtime prostredia, aby ste minimalizovali možný útokový povrch.
  • Reproducibilné buildy a SBOM: generujte a ukladajte Software Bill of Materials (napr. CycloneDX, SPDX) pre každý image a mapujte jeho závislosti na známe bezpečnostné riziká (CVE).
  • Podpisy a atestácie: zabezpečte podpisovanie image a manifestov pomocou nástrojov ako Sigstore alebo cosign, ukladajte dôkazy o pôvode (provenance) podľa štandardov SLSA a vynucujte overovanie podpisov počas pullu pomocou nástrojov ako Policy Controller.
  • Skener zraniteľností: integrujte nástroje ako Trivy, Grype alebo Clair do CI procesu i registra, aby sa pri kritických zraniteľnostiach automaticky zablokovalo vytvorenie image s možnosťou riadeného akceptovania rizika.
  • Deterministické verzie: namiesto označenia :latest používajte pevné digesty (@sha256:…) a aktivujte funkciu neaktuálnosti tagov (tag immutability) v registry.
  • Izolované buildy: používajte nerootovaný BuildKit alebo Kaniko s oddelenými sieťami a so spracovaním build tajomstiev (build secrets) prostredníctvom mechanizmu --secret, nikdy necopyujte tajomstvá priamo do image.

Zásady pre Dockerfile a runtime hardening

  • USER ne-root: vždy definujte neprivilegovaného používateľa a vyhnite sa spúšťaniu kontajnerov pod rootom v runtime.
  • Read-only filesystem: využívajte parametre ako readOnlyRootFilesystem a zapisujte iba do explicitne určených zväzkov.
  • Drop capabilities: zredukujte schopnosti kontajnera na nevyhnutný minimálny set, typicky všetko vyhodiť a pridať iba potrebné, pričom zakážte kritické capability ako NET_RAW alebo SYS_ADMIN.
  • Seccomp a LSM: aplikujte profil seccomp RuntimeDefault a využívajte bezpečnostné moduly AppArmor alebo SELinux, vyhýbajte sa nastavovaniu kontajnerov do režimu privileged: true.
  • Umiestnenie tajomstiev: nikdy neukladajte citlivé informácie priamo do image, načítavajte ich dynamicky zo šifrovaných sväzkov alebo CSI, vyhýbajte sa environmentálnym premenným.
  • Healthcheck: definujte inštrukcie HEALTHCHECK pre monitorovanie zdravotného stavu kontajnerov a umožnite tak rýchlu náhradu nefunkčných podov.

Správa tajomstiev a kľúčov

  • Kubernetes Secrets: zabezpečte šifrovanie údajov v etcd (envelope encryption) s využitím KMS, uprednostňujte montovanie tajomstiev pred použitím env premenných.
  • Rotácia a najmenší potrebný prístup: nastavte krátky TTL, automatickú rotáciu a prierezové obmedzenia prístupov v rámci namespace a služieb.
  • Externé trezory: integrujte systémy ako HashiCorp Vault alebo cloudové KMS, prístup uskutočňujte cez krátkodobé identifikácie workloadov (workload identity) s OIDC či JWT audienciou.

Sieťová bezpečnosť a izolácia

  • NetworkPolicy: obmedzte prichádzajúcu (ingress) a odchádzajúcu (egress) komunikáciu na úroveň podov a namespace s pravidlom default-deny a explicitným povolením prenosu.
  • CNI a eBPF: využívajte pokročilé CNI pluginy ako Cilium, ktoré umožňujú vrstvené L3/L7 politiky, detailný audit a vysokú viditeľnosť so zanedbateľnou záťažou.
  • mTLS a identity: implementujte service mesh (napr. Istio alebo Linkerd) pre šifrovanie komunikácie, autentifikáciu peerov a autorizáciu podľa identity služby.
  • Riadenie Ingress/Egress: nasadzujte WAF, rate limiting a validáciu HTTP hlavičiek; pre odchádzajúcu komunikáciu používať egress gateway so zoznamom povolených cieľov.

Kubernetes: politika, štandardy a princíp bezpečnosti podľa predvolených nastavení

  • Pod security standards: implementujte úroveň restricted, zahŕňajúcu nastavenia ako runAsNonRoot, readOnly root filesystem, zákaz eskalácie oprávnení a obmedzené capabilities.
  • Admission kontrola: používanie OPA Gatekeeper alebo Kyverno na vynucovanie politik zakazujúcich hostPath, hostNetwork a vyžadujúcich bezpečnostné profily seccomp a limitované zdroje.
  • RBAC s minimálnymi právami: jemnozrnná správa rolí a viazaní rolí, oddelenie service accounts pre jednotlivé workloady.
  • Namespace a tenancy: izolácia prostredí (vývoj, test, produkcia) pomocou limitácií LimitRange a ResourceQuota na elimináciu efektu „noisy neighbor“ a ochranu pred DoS útokmi.
  • Šifrovanie dát v pokoji: zabezpečenie at-rest šifrovania etcd s využitím mTLS, firewalling prístupov a pravidelná rotácia certifikátov.
  • Kubelet a API server: aktivácia audit logov, prísna autentizácia a autorizácia a vypnutie nepotrebných admission pluginov.

Hardening nodov a operačného systému

  • Minimal host OS: používajte imutabilné systémové image (napr. OSTree, golden image), pravidelné aktualizácie jadra a aktívne bezpečnostné moduly ako SELinux v režime enforcing alebo AppArmor.
  • Oddelené runtime: preferujte aktuálne verzie containerd alebo CRI-O, využívajte rootless režim všade, kde je to možné.
  • Sysctl a mounty: zakážte nebezpečné sysctl nastavenia, zabránte používania hostPID a hostIPC a používajte bezpečnostné mount príznaky ako noexec, nodev a nosuid.
  • Prístup k nodom: minimalizujte SSH prístup, prípadne umožnite len cez bastion alebo správu cez SSM; prístup zabezpečujte cez IAM a oddelenie control plane od worker nodov.

Observabilita, detekcia a runtime ochrana

  • Runtime senzory: integrujte riešenia ako Falco alebo Tetragon na detekciu podozrivých systémových volaní (napr. spustenie shellu, modifikácia /proc).
  • Audit a tracing: kombinujte Kubernetes audit logy, sledovanie rotácie certifikátov a OpenTelemetry pre koreláciu a analýzu požiadaviek v reálnom čase.
  • Metriky a SLO: monitorujte kritické ukazovatele ako latency p95/p99, počet chýb, výskyty reštartov a OOM kills; nastavte alerty na významné odchýlky od normálu.

Riadenie zraniteľností a správa záplat

  • Automatizované skeny: realizujte kontinuálne kontroly každej novej image a existujúcich workloadov, opakované skenovanie pri objavení nových CVE s pravidelným reportingom.
  • Rýchla obmena: zabezpečte nasadzovanie aktualizácií (rolling update) s minimálnym časom do aplikácie záplat a pravidelným odstraňovaním starých podov a image.
  • Politika na základné image: pravidelne obnovujte základné image z najnovších bezpečnostných verzií, vyhýbajte sa individuálnym odchýlkam (snowflake image) bez verifikácie.

Governance, compliance a dokumentácia

  • Dodržiavanie štandardov: implementujte a pravidelne kontrolujte súlad s relevantnými normami ako CIS Kubernetes Benchmark, GDPR alebo ISO/IEC 27001.
  • Dokumentácia procesov: zabezpečte podrobnú evidenciu bezpečnostných opatrení, konfigurácií a incidentov pre potreby auditu a zlepšovania bezpečnostných postupov.
  • Vzdelávanie tímov: pravidelne školte vývojárov a administrátorov o najlepších bezpečnostných praktikách a novinkách v oblasti kontajnerovej bezpečnosti.

Dodržiavaním komplexných bezpečnostných zásad v kontejnerovom prostredí možno výrazne znížiť riziko útokov, eliminovať potenciálne incidenty a zabezpečiť stabilitu a dôvernosť prevádzky. Bezpečnosť by mala byť integrálnou súčasťou celého životného cyklu aplikácií i infraštruktúry, a preto je nevyhnutné udržiavať neustále povedomie a ochotu adaptovať sa na meniace sa hrozby a technológie.