Bezpečnost kontejnerizace a orkestrace

Proč bezpečnost 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í hrozby: sdílené jádro systému, dynamickou síťovou topologii, složitý dodavatelský řetězec softwaru a vysokou míru automatizace. Cílem tohoto článku je formulovat komplexní zásady pro bezpečný návrh, sestavení, nasazení 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 řízení a audit.

Model hrozeb v prostředí kontejnerů

  • Únik z kontejneru: zneužití capability, zranitelností jádra nebo mountovacích bodů k úniku na hostitelský systém.
  • Malware v image: podvržené či kompromitované základní image, knihovny nebo nástroje v procesu sestavení.
  • Laterální pohyb: prolomení jednoho podu/služby vede k pivotaci napříč sítí klastru.
  • Exfiltrace tajemství: únik secrets z proměnných prostředí, svazků nebo metadat kubelet.
  • Útoky v dodavatelském řetězci: zneužití CI/CD pipeline, nedostatečná verifikace artefaktů, typosquatting v registru.
  • Konfigurační chyby: privilegované pody, otevřené dashboardy, nesprávné RBAC, nešifrované etcd.

Bezpečný dodavatelský řetězec: od kódu po image

  • Minimální základní image: distroless, ubi-minimal nebo alpine (dávejte pozor na kompatibilitu s musl); odstranění kompilátorů, shellů a správců balíčků v runtime.
  • 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), uchovávejte provenance (SLSA), vynucujte verifikaci při stahování (Policy Controller).
  • Skener zranitelností: Trivy/Grype/Clair v CI i v registru; přerušení build procesu při kritických nálezech, avšak s workflow pro přijetí rizika (risk acceptance).
  • Deterministická verze: používejte digesty (@sha256:…) místo :latest; zapněte tag immutability v registru.
  • Izolace buildů: BuildKit/Kaniko bez privilegií, izolované sítě, „build secrets“ předávané přes --secret (nikdy nekopírovat do image).

Zásady Dockerfile a runtime hardening

  • USER ne-root: definujte neprivilegovaného uživatele; vyhněte se spouštění procesů jako root za běhu.
  • Read-only filesystem: používejte readOnlyRootFilesystem, zapisujte pouze do explicitně definovaných svazků.
  • Drop capabilities: ponechte minimální množinu capability (obvykle všechny odebrat a přidat jen nezbytné); zejména zakázat NET_RAW, SYS_ADMIN.
  • Seccomp a LSM: použijte výchozí seccomp profil RuntimeDefault, aplikujte AppArmor/SELinux profily; vyhněte se privileged: true.
  • Umístění tajemství: nikdy je neukládejte do image; načítejte z tajných svazků/CSI, ne z proměnných prostředí.
  • Healthcheck: definujte HEALTHCHECK pro detekci degradace služby a rychlejší náhradu podů.

Správa tajemství a klíčů

  • Kubernetes Secrets: šifrování v etcd (envelope encryption) s podporou KMS; preferujte mountování tajemství před proměnné prostředí.
  • Rotace a princip nejmenších práv: krátké časové platnosti (TTL), automatická rotace, omezení přístupu na konkrétní namespace a službu.
  • Externí trezory: HashiCorp Vault, Cloud KMS; první přístup přes krátkodobé identity workloads (OIDC/JWT audiencing).

Síťová bezpečnost a izolace

  • NetworkPolicy: omezte ingress a egress na úrovni podu nebo namespace; implementujte výchozí zamítnutí (default-deny) a výslovné povolení.
  • CNI a eBPF: nástroje jako Cilium podporují L3/L7 politiky, audit a viditelnost s nízkou režijní zátěží.
  • mTLS a identity: service mesh (Istio, Linkerd) zajišťuje šifrování provozu, vzájemnou autentizaci peerů a autorizaci na úrovni služby.
  • Řízení Ingress/Egress: WAF, rate limit, validace hlaviček; egress gateway s allowlistem povolených cílů.

Kubernetes: politika, standardy a princip „secure by default“

  • Pod Security Standards: používejte úroveň restricted (runAsNonRoot, readOnlyFS, zákaz privilege escalation, omezené capability).
  • Admission kontrola: OPA Gatekeeper, Kyverno pro vynucování politik (zákaz hostPath, hostNetwork, vyžadování seccompProfile = RuntimeDefault, limity prostředků).
  • RBAC s minimálními právy: jemnozrnná Role/RoleBinding; oddělené service accounty pro jednotlivé workloady.
  • Namespace a tenancy: oddělení prostředí (dev/test/prod); LimitRange a ResourceQuota pro prevenci „noisy neighbor“ a DoS útoků.
  • Šifrování „at-rest“: etcd komunikuje pouze přes mTLS, firewall s omezeným přístupem, pravidelná rotace certifikátů.
  • Kubelet a API server: auditní logy, vynucená autentizace a autorizace, vypnutí nepotřebných admission plugins.

Hardening nodů a operačního systému

  • Minimální hostitelský OS: imutabilní buildy (OSTree, Golden Image), pravidelné aktualizace jádra, LSM (SELinux enforcing, AppArmor).
  • Oddělené runtime: preferujte containerd/CRI-O s aktuální verzí; použití režimu rootless tam, kde je vhodné.
  • Sysctl a mounty: zakázat nebezpečné sysctl parametry, nepovolovat hostPID/hostIPC; mounty s příznaky noexec, nodev, nosuid.
  • Přístup k nodům: bez přímého SSH (nebo pouze přes bastion/SSM), přístup řízen IAM; oddělení control plane a worker nodů.

Observabilita, detekce a runtime ochrana

  • Runtime senzory: Falco, Tetragon pro detekci podezřelých systémových volání (např. exec shellů, modifikace /proc).
  • Audit a tracing: Kubernetes auditní logy, certifikační rotace mTLS, OpenTelemetry pro korelaci požadavků.
  • Metriky a SLO: zpoždění event-loop (u Node.js), latence p95/p99, chybovost, počet restartů, OOMKills; alerty na odchylky.

Řízení zranitelností a patch management

  • Automatizované skenování: každá nová image i běžící workloady; kontinuální re-skany při objevování nových CVE.
  • Rychlá obměna: rolling update s krátkou průměrnou dobou opravy (MTTP); odstranění zastaralých podů.
  • Politika základních image: pravidelná obnova ze čerstvých základních vrstev, eliminace „snowflake“ image.

Governance, compliance a dokumentace

  • Standardy a benchmarky: CIS Benchmark pro Docker a Kubernetes, interní bezpečnostní standardy.
  • Politika přístupu: break-glass účty s časově omezeným přístupem a plným auditem.
  • Evidence a schvalování: změny politik přes GitOps, schvalování přes pull requesty, podepisování commitů.

GitOps a vynucení bezpečnosti v dodavatelském řetězci

  • Git jako jediný zdroj pravdy: Argo CD, Flux; klastry se synchronizují z podepsaných manifestů.
  • Policy as Code: pravidla Gatekeeper/Kyverno v repozitáři, review a testy; CI validuje dodržování politik.
  • ImagePolicyWebhook/Verifikace: nasazovat pouze podepsané image s požadovanými atestacemi (SBOM, SLSA).

Data a úložiště: bezpečné svazky a CSI

  • CSI ovladače: vyžadujte mTLS a autorizaci; izolace svazků na úrovni PVC a namespace.
  • Šifrování: šifrujte per-volume (cloud KMS), správa klíčů mimo klastr; zálohy mimo lokalitu a pravidelné testování obnovy.
  • FS oprávnění: fsGroup, připojení jako readOnly, zákaz hostPath s výjimkou řízených případů.

Škálování, dostupnost a odolnost

  • Resource limity: definujte requests a limits; předejdete OOM a DoS útokům v rámci klastru.
  • Disrupční rozpočty: PodDisruptionBudget a topology spread constraints pro vysokou dostupnost (HA).
  • Rate limiting a zpětný tlak: chrání backendy; circuit breaker ve service meshi.

Testování a validace bezpečnosti

  • Konfigurační testy: kube-bench, kubescape, polaris pro statickou analýzu manifestů.
  • Penetrační testy: simulace útoků uvnitř podu (testování útěku z kontejneru), laterální pohyb, exfiltrace dat.
  • Chaos a DR cvičení: simulace výpadků nodů, ztráty snapshotů etcd, testy obnovy z backupů etcd/registry.

Incident response a forenzní připravenost

  • Forenzní postupy: okamžitý snapshot podu (ephemeral kontejnery), ukládání dat z /proc, síťových spojení a digestů image.
  • Izolace: aplikace network policy pro izolaci, omezení replik, pozastavení rolloutů CI.
  • Post-mortem: provádějte bez hledání viníka; identifikace příčiny, aktualizace politik, doplnění testů a alertů.

Metriky a KPI bezpečnosti kontejnerů

  • MTTP/MTTR pro CVE: doba detekce a opravy kritických zranitelností v image.
  • Míra dodržování politik: podíl workloadů v režimu restricted, procento podepsaných image, podíl podů s readOnlyFS.
  • Hygiena tajemství: výskyt tajemství v env vs. volume, průměrná doba životnosti (TTL), míra rotace tajemství.
  • Síťová expozice: procento namespace s default-deny politikou, počet povolených egress cílů.

Kontrolní seznam pro bezpečné nasazení

  • Image vychází z minimální základní vrstvy, je podepsaná a doplněná o SBOM; používá digest, nikoli :latest.
  • Manifest odpovídá restricted PSS: runAsNonRoot, readOnlyRootFilesystem, allowPrivilegeEscalation: false, seccompProfile: RuntimeDefault.
  • RBAC a ServiceAccount mají jen nezbytná oprávnění; automountServiceAccountToken: false tam, kde není potřeba.
  • NetworkPolicy realizuje default-deny a explicitní povolení; mezi službami používá mTLS.
  • Secrets jsou uloženy v KMS-šifrovaných Secrets nebo v externím trezoru; žádná tajemství v image ani v logách.
  • Definovány resource requests/limits; používané PDB a readiness/liveness pro samoopravování.
  • Auditní logy, metriky a alerty aktivní; nasazena runtime detekce anomálií (Falco).
  • Etcd a API server chráněny mTLS, audit zapnut; nody hardenované a oddělené.

Závěr: bezpečnost jako průběžná schopnost

Bezpečnost kontejnerů není jednorázový checklist, ale soubor návyků: kurátorovaný dodavatelský řetězec, princip nejmenších práv, politiky vynucované automatizací, průběžné skenování a pozorovatelnost. Kombinací hardeningu image i runtime, síťových a datových kontrol, robustní správy tajemství a řízení zranitelností vzniká prostředí odolné vůči moderním útokům, které zároveň zachovává rychlost a pružnost, jež vás k použití kontejnerizace vedly.