Bezpečnostní zásady v prostředí kontejnerů: izolace

Bezpečnostní zásady v prostředí kontejnerů: Izolace

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

  • USER ne-root: definujte neprivilegovaného uživatele; vyhněte se použití uživatele root v 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 HEALTHCHECK pro 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žadovat seccompProfile = RuntimeDefault, limity resources).
  • 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 volbami noexec, 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ř. exec shellů, 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ákaz hostPath s výjimkou řízených případů.

Škálování, dostupnost a odolnost

  • Limity prostředků: nastavte requests a limits; 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/limits jsou 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.