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
kubeletmetadata. - Ú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
:latestpouží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
USERne-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_RAWaleboSYS_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
HEALTHCHECKpre 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,hostNetworka 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
hostPIDahostIPCa používajte bezpečnostné mount príznaky akonoexec,nodevanosuid. - 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.