Proč zabezpečení kontejnerů není jen o Dockeru
Kontejnerizace (Docker, containerd, CRI-O) a orchestrátory (Kubernetes) přinášejí rychlost a škálovatelnost, zároveň však zavádějí nové bezpečnostní vektory: sdílené jádro, dynamickou síťovou topologii, komplexní dodavatelský řetězec softwaru a vysokou míru automatizace. Cílem tohoto článku je formulovat ucelené zásady pro bezpečný návrh, sestavování, nasazování a provoz kontejnerů i celých klastrů. Přístup je založen na principu „defense-in-depth“: od kódu a image přes runtime a síť až po správu a audit.
Model hrozeb v prostředí kontejnerů
- Únik z kontejneru: zneužití capability, zranitelností jádra nebo připojených svazků k úniku na hostitele.
- Malware v image: podvržené či kompromitované základní image, knihovny nebo nástroje používané při sestavování.
- Laterální pohyb: prolomení jednoho podu/služby vede k dalšímu postupu napříč sítí klastru.
- Únik tajemství: únik tajemství z proměnných prostředí, svazků nebo metadat
kubelet. - Útoky na dodavatelský řetězec: zneužití CI/CD pipeline, nedostatečné ověřování artefaktů, typosquatting v registru.
- Chyby v konfiguraci: privilegované pody, veřejně přístupné dashboardy, nesprávně nastavené RBAC, nešifrované etcd.
Bezpečný dodavatelský řetězec: od kódu po image
- Minimální základní image: distroless, ubi-minimal nebo alpine (pozor na kompatibilitu s musl); odstranění kompilátorů, shellů a správců balíčků z runtime prostředí.
- Reprodukovatelné buildy a SBOM: generujte a ukládejte Software Bill of Materials (CycloneDX/SPDX) pro každou image; mapujte závislosti na CVE.
- Podpisy a atestace: podepisujte image a manifesty (Sigstore/cosign), ukládejte informace o původu (SLSA), vynucujte ověřování při stahování (Policy Controller).
- Skener zranitelností: Trivy/Grype/Clair v CI i v registru; selhání buildu při kritických nálezech, avšak s procesem akceptace rizika.
- Deterministická verze: používejte digesty (
@sha256:…) namísto:latest; zapněte neměnnost tagů v registru. - Izolace buildů: BuildKit/Kaniko bez privilegií, oddělené sítě, „build secrets“ prostřednictvím
--secret(nikdy je nekopírujte do image pomocí COPY).
Zásady Dockerfile a zabezpečení runtime
USERne-root: definujte neprivilegovaného uživatele; vyhněte se použití uživatelerootv runtime prostředí.- Souborový systém pouze pro čtení: používejte readOnlyRootFilesystem, zapisujte pouze do výslovně určených svazků.
- Odeberte capabilities: ponechte minimální sadu (obvykle všechny odeberte a přidejte pouze nezbytné); zejména zakažte
NET_RAW,SYS_ADMIN. - Seccomp a LSM: profil seccomp RuntimeDefault, profily AppArmor/SELinux; vyhněte se nastavení
privileged: true. - Umístění tajemství: nikdy je neukládejte do image; načítejte je z tajemných svazků/CSI, nikoli z proměnných prostředí.
- Healthcheck: definujte
HEALTHCHECKpro detekci zhoršeného stavu a rychlejší nahrazení podů.
Správa tajemství a klíčů
- Kubernetes Secrets: šifrování v etcd (envelope) pomocí KMS; upřednostňujte připojené svazky s tajemstvími před proměnnými prostředí.
- Rotace a minimální přístup: krátké TTL, automatická rotace, omezení na namespace a službu.
- Externí trezory: HashiCorp Vault/Cloud KMS; počáteční přístup prostřednictvím krátkodobé identity workloadu (OIDC/JWT audiencing).
Síťová bezpečnost a izolace
- NetworkPolicy: omezte ingress/egress
- CNI a eBPF: nástroje jako Cilium podporují politiky L3/L7, audit a přehled s nízkou režijní zátěží.
- mTLS a identity: service mesh (Istio/Linkerd) pro šifrování provozu, ověřování protistrany a autorizaci na úrovni služby.
- Řízení ingress/egress: WAF, omezení rychlosti, ověřování hlaviček; egress gateway se seznamem povolených cílů.
Kubernetes: politika, standardy a „secure by default“
- Pod Security Standards: používejte úroveň restricted (runAsNonRoot, readOnlyFS, zákaz eskalace oprávnění, omezené capabilities).
- Kontrola při přijímání: OPA Gatekeeper/Kyverno pro vynucování politik (zákaz
hostPath,hostNetwork, vyžadovatseccompProfile= RuntimeDefault, limityresources). - RBAC s minimálními nutnými oprávněními: jemně odstupňované Role/RoleBinding; samostatné service accounts pro jednotlivé workloady.
- Namespace a víceuživatelský provoz: oddělte prostředí (dev/test/prod); LimitRange a ResourceQuota jako ochranu před „hlučným sousedem“ a DoS.
- Šifrování uložených dat: etcd pouze přes mTLS, řízení přístupu pomocí firewallu, pravidelná rotace certifikátů.
- Kubelet a API server: auditní logy, vynucené ověřování a autorizace, vypnutí nepoužívaných admission plugins.
Zabezpečení nodů a operačního systému
- Minimální hostitelský OS: neměnné buildy (OSTree/Golden Image), pravidelné opravy jádra, LSM (SELinux enforcing/AppArmor).
- Oddělené runtime prostředí: upřednostňujte aktuální verzi containerd/CRI-O; režim rootless tam, kde dává smysl.
- Sysctl a připojené svazky: zakažte nebezpečné sysctl, nepovolujte
hostPID/hostIPC; připojujte svazky s volbaminoexec,nodev,nosuid. - Přístup k nodům: bez SSH (nebo pouze přes bastion/SSM), přístup řízený pomocí IAM; oddělte nody control plane a worker.
Observabilita, detekce a ochrana za běhu
- Senzory runtime: Falco/Tetragon pro detekci podezřelých systémových volání (např.
execshellů, změny v/proc). - Audit a tracing: auditní logy Kubernetes, logy rotace certifikátů mTLS, OpenTelemetry pro korelaci požadavků.
- Metriky a SLO: prodleva event loopu (u Node.js), latence p95/p99, chybovost, počet restartů, OOMKills; upozorňování na odchylky.
Řízení zranitelností a správa oprav
- Automatizované skenování: každá nová image i běžící workloady; průběžné opakované skenování při zveřejnění nových CVE.
- Rychlá obměna: průběžná aktualizace s krátkou dobou „střední doby do opravy“; staré pody odstraňujte.
- Politika pro základní image: pravidelně je obnovujte z aktuálních základních image, odstraňujte snowflake image.
Správa, soulad s předpisy a dokumentace
- Standardy a benchmarky: CIS Benchmark pro Docker a Kubernetes, interní bezpečnostní standardy.
- Politika přístupu: účty break-glass s časově omezeným přístupem a úplným auditem.
- Evidence a schvalování: změny politik prostřednictvím GitOps, schvalování pull requestů, podpisy commitů.
GitOps a vynucování zabezpečení dodavatelského řetězce
- Git jako jediný zdroj pravdy: Argo CD/Flux; klastry se synchronizují z podepsaných manifestů.
- Politiky jako kód: pravidla Gatekeeper/Kyverno v repozitáři, kontroly a testy; CI ověřuje soulad s politikami.
- ImagePolicyWebhook/Verification: nasazujte pouze podepsané image s požadovanými atestacemi (SBOM, SLSA).
Data a úložiště: bezpečné svazky a CSI
- Ovladače CSI: vyžadujte mTLS a autorizaci; izolujte svazky podle PVC a namespace.
- Šifrování: šifrujte jednotlivé svazky (cloud KMS), klíče spravujte mimo klastr; zálohy ukládejte mimo pracoviště a testujte obnovu.
- Oprávnění souborového systému:
fsGroup, připojení svazků pouze pro čtení, zákazhostPaths výjimkou řízených případů.
Škálování, dostupnost a odolnost
- Limity prostředků: nastavte
requestsalimits; předejdete OOM a DoS uvnitř klastru. - Rozpočty pro narušení dostupnosti: PodDisruptionBudget a topology spread constraints pro vysokou dostupnost.
- Omezení rychlosti a řízení zahlcení: chrání backendy; circuit breaker v service mesh.
Testování a ověřování bezpečnosti
- Testy konfigurace: kube-bench, kubescape, polaris pro statickou analýzu manifestů.
- Penetrační testy: simulace útoku uvnitř podu (podmínky pro únik), laterální pohyb, exfiltrace.
- Testy odolnosti a obnovy po havárii: simulace výpadků nodů, ztráty snapshotu etcd, testování obnovy ze záloh etcd/registru.
Reakce na incidenty a forenzní připravenost
- Forenzní postupy: okamžitý snapshot podu (ephemeral kontejnery), uložení
/proc, síťových spojení a digestů image. - Izolace: izolujte prostřednictvím network policy, omezte počet replik, pozastavte nasazování z CI.
- Post-mortem: bez obviňování; určení kořenové příčiny, aktualizace politik, přidání testů a upozornění.
Metriky a KPI bezpečnosti kontejnerů
- MTTP/MTTR pro CVE: doba detekce a opravy kritických zranitelností v image.
- Míra souladu s politikami: podíl workloadů v režimu restricted, procento podepsaných image, procento podů s readOnlyFS.
- Hygiena tajemství: výskyt tajemství v proměnných prostředí oproti svazkům, průměrné TTL, míra rotace.
- Vystavení sítě: procento namespace s výchozím zákazem provozu, počet povolených cílů egress provozu.
Kontrolní seznam pro bezpečné nasazení
- Image vychází z minimální základní image, je podepsaná a obsahuje SBOM; používá digest, nikoli
:latest. - Manifest odpovídá standardu PSS restricted:
runAsNonRoot,readOnlyRootFilesystem,allowPrivilegeEscalation: false,seccompProfile: RuntimeDefault. - RBAC a ServiceAccount mají pouze potřebná oprávnění;
automountServiceAccountToken: false, pokud není potřeba. - NetworkPolicy s výchozím zákazem provozu a výslovnými povoleními; mTLS mezi službami.
- Tajemství jsou uložena v objektech Secrets šifrovaných pomocí KMS nebo v externím trezoru; žádná tajemství v image ani v logách.
- Prostředky
requests/limitsjsou definované; PDB a kontroly readiness/liveness pro samoopravu. - Auditní logy, metriky a upozornění jsou aktivní; je nasazena detekce anomálií za běhu (Falco).
- Etcd a API server jsou zabezpečené pomocí mTLS, audit je zapnutý; nody jsou zabezpečené a oddělené.
Závěr: bezpečnost jako průběžná schopnost
Bezpečnost kontejnerů není jednorázový kontrolní seznam, ale soubor návyků: spravovaný dodavatelský řetězec, minimální oprávnění, politiky vynucované automatizací, průběžné skenování a observabilita. Kombinací zabezpečení image i runtime, síťových a datových kontrol, robustní správy tajemství a řízení zranitelností dosáhnete prostředí odolného vůči moderním útokům, které zároveň zachovává rychlost a pružnost, kvůli nimž jste zvolili kontejnerizaci.
