Security / DevSecOps

    Container Security

    Od budowania image po runtime w produkcji. Trivy skanuje CVE, Falco wykrywa anomalie, Kyverno egzekwuje polityki — security wbudowane w każdą warstwę.

    Trivy / Grype
    Image scanner
    Falco
    Runtime security
    Kyverno / OPA
    K8s policies
    CIS K8s Benchmark
    Compliance

    6 warstw Container Security

    Container security to defense in depth — każda warstwa od kodu po infrastrukturę wymaga osobnego zabezpieczenia.

    Code

    Bezpieczne kodowanie, dependency scanning, SAST, secret detection przed commitem

    Semgrep, CodeQL, TruffleHog, Dependabot

    Container Image

    Minimalne base image, multi-stage build, non-root user, CVE scanning

    Trivy, Grype, Snyk, Chainguard Images

    Image Registry

    Image signing (Cosign), automated scanning, access control do registry

    Cosign/Sigstore, ECR Inspector, GHCR

    Kubernetes Cluster

    RBAC least privilege, Pod Security Standards, Network Policies, etcd encryption

    OPA Gatekeeper, Kyverno, Falco, kubescape

    Runtime

    Syscall filtering (Seccomp), AppArmor profiles, anomaly detection, container isolation

    Falco, gVisor, Kata Containers, Cilium

    Infrastructure

    Node security patches, cloud IAM, network segmentation, audit logging

    CIS Benchmark, kube-bench, Cloud Security Posture

    Porównanie skanerów obrazów kontenerów

    Każdy skaner ma inne mocne strony — Trivy jest wszechstronny, Grype SBOM-first, Snyk developer-friendly.

    Trivy

    Open-source (Aqua)

    CVE + IaC + Secrets + SBOM

    CI/CD, GitHub, Docker, K8s

    Wszechstronny, szybki, dobry do CI

    Grype

    Open-source (Anchore)

    CVE (SBOM-based)

    CI/CD, Syft pipeline

    SBOM-first, precyzyjny

    Snyk Container

    Komercyjny (free tier)

    CVE + base image rekomendacje

    IDE, CI, Registry, PR remediation

    Developer UX, auto-fix suggestions

    Docker Scout

    Free (część Docker)

    CVE + base image upgrade path

    Docker Hub, Docker Desktop, CI

    Wbudowany w Docker ekosystem

    Często zadawane pytania

    Co to jest bezpieczeństwo kontenerów i jakie są główne zagrożenia?

    Container Security obejmuje zabezpieczenie całego lifecycle kontenera — od budowania image przez uruchamianie do runtime w produkcji. Główne wektory ataków: Vulnerable base images: outdated pakiety z CVE w base image. Złośliwy kod w zależnościach (supply chain). Misconfigured containers: kontener działający jako root (default Docker). Privileged mode — pełny dostęp do hosta. Mounted host directories. Exposed secrets: hardcoded credentials w Dockerfile lub ENV. Secrets w image layers (widoczne przez docker history). Writable writable host mounts. Runtime attacks: container escape — exploit pozwalający wydostać się z kontenera. Lateral movement między kontenerami. Privilege escalation. Insecure registries: brak skanowania obrazów. Public images bez weryfikacji. Podatności w orchestratorze: niezabezpieczone Kubernetes API. Misconfigured RBAC. Etcd bez szyfrowania. Container Security 4C framework: Cloud (infrastruktura), Cluster (K8s), Container (runtime), Code (aplikacja). Każda warstwa wymaga osobnego zabezpieczenia. Kto atakuje: zewnętrzni atakujący przez podatności w aplikacji. Insiders (złośliwi pracownicy). Supply chain attacks (złośliwe npm packages, compromised CI).

    Bezpieczne Docker images — jak minimalizować surface attack?

    Minimalne base images: użyj minimalnych base images zamiast ubuntu:latest. Distroless (Google): brak shell, menedżera pakietów, tylko runtime. Python distroless, Java distroless. Alpine Linux: minimalistyczny (~5MB). Scratch: absolutnie pusty, tylko binary. Chainguard images: hardened, distroless, daily updates CVE. Wolfe images: minimalne z Wolfe Scanner. Multi-stage build: build stage — kompilacja z narzędziami. Runtime stage — tylko wynik budowania, bez tools. Dockerfile: FROM golang:1.22 AS builder → RUN go build → FROM scratch → COPY --from=builder /app. Wynik: 10MB binary zamiast 1GB builder image. Nie uruchamiaj jako root: Dockerfile: USER app (dodaj nonroot user). Kubernetes: securityContext.runAsNonRoot: true. securityContext.runAsUser: 1000. Read-only filesystem: Kubernetes: securityContext.readOnlyRootFilesystem: true. Mountuj tylko potrzebne volumes (tmpdir, logs). Immutable containers: nie modyfikuj running container — replace z nowym image. No-new-privileges: securityContext.allowPrivilegeEscalation: false. Drop capabilities: securityContext.capabilities.drop: [ALL]. Dodaj tylko potrzebne: NET_BIND_SERVICE, CHOWN. Image signing: Cosign — podpisuj każdy image po build. Verify before deploy (Kubernetes admission webhook). Distroless + podpisany + skanowany = solid baseline.

    Skanowanie obrazów kontenerów — Trivy, Grype, Snyk?

    Image scanning wykrywa znane CVE (Common Vulnerabilities and Exposures) w pakietach wewnątrz Docker image. Trivy (Aqua Security): open-source, wszechstronny scanner. Skanuje: Docker images, filesystem, Git repo, Kubernetes cluster, IaC (Terraform, K8s). Typy: CVE w OS packages i bibliotekach. SBOM generowanie. Misconfig detection. Secret detection. Formatty output: JSON, SARIF (GitHub Advanced Security), table. Integracja: GitHub Actions, GitLab CI, Docker build. Grype (Anchore): open-source image scanner + SBOM. Syft generuje SBOM, Grype skanuje SBOM. Snyk Container: komercyjny (free tier). CVE scan + base image recommendations. PR remediation — Snyk sugeruje update base image z mniejszą liczbą CVE. IDE integracja. ECR + Inspector: AWS Inspector automatycznie skanuje obrazy w ECR. Google Artifact Registry: automatyczne skanowanie z Container Analysis. Docker Scout: wbudowany w Docker. Rekomendacje bezpiecznych base images. CI/CD integration: scan w CI po build PRZED push do registry. Fail build jeśli CVE severity: CRITICAL lub HIGH. Przykład GitHub Action: actions/trivy-action. Severity thresholds: CRITICAL — blokuj deploy. HIGH — blokuj lub warn. MEDIUM/LOW — informuj. Zero-day i nieznane: skanery wykrywają tylko znane CVE. Runtime security (Falco) wykrywa anomalie w zachowaniu.

    Kubernetes Security — RBAC, Network Policies, Admission Controllers?

    RBAC (Role-Based Access Control): Kubernetes domyślnie RBAC off (starsze) lub on (nowsze). Role — uprawnienia wewnątrz namespace. ClusterRole — uprawnienia cluster-wide. RoleBinding / ClusterRoleBinding — przypisuje role do ServiceAccount/User. Zasady: least privilege — każdy ServiceAccount tylko potrzebne uprawnienia. Nie używaj cluster-admin dla aplikacji. Audit RBAC: rbac-audit, kubectl auth can-i --list. Pod Security Standards: Baseline — minimalne restrykcje (no privileged, no hostNetwork). Restricted — silne restrykcje (no root, seccomp, drop ALL caps). Namespace level: kubectl label namespace production pod-security.kubernetes.io/enforce=restricted. Admission Controllers: OPA Gatekeeper — polityki jako kod (Rego). Blokuj deploymenty które nie spełniają polityk. Kyverno — polityki w YAML. Łatwiejszy niż OPA dla K8s use cases. Przykład: wymagaj labels, wymagaj resource limits, wymagaj image signing. ValidatingWebhookConfiguration — custom logika walidacji. Network Policies: domyślnie wszystkie Pody mogą się ze sobą komunikować. NetworkPolicy — allow-list dla ingress/egress. Deny-all domyślnie + explicit allows. Cilium Network Policy: L7 aware (HTTP method, path, gRPC service). DNS-based policy. Secrets Management: nie trzymaj secretów w etcd (plaintext lub base64 — nie encrypted). External Secrets Operator — pobieraj sekrety z Vault, AWS SSM, GCP Secret Manager. Vault Agent Injector — inject secrets jako pliki do Pod. etcd encryption at rest. Falco: runtime security — wykrywaj anomalie (shell w kontenerze, nieoczekiwany network call). eBPF-based.

    Runtime security i compliance — Falco, AppArmor, Seccomp?

    Runtime Security: image scanning jest statyczne (przed runtime). Runtime security wykrywa zagrożenia gdy kontener działa. Falco (CNCF): eBPF-based runtime security. Reguły które triggerują alert gdy anomalia. Wykrywaj: shell spawn w kontenerze produkcyjnym. Nieoczekiwane połączenia sieciowe. Zapis do /etc, /bin, /usr. Privilege escalation. Container escape attempt. Falco rules: condition: spawned_process AND container AND proc.name = sh. Alert do Slack, PagerDuty, Elasticsearch. Kernel-level security: AppArmor: Linux Security Module. Profile dla każdego kontenera — co może robić. Kubernetes: securityContext.appArmorProfile.type = RuntimeDefault. Seccomp (Secure Computing Mode): filtruj syscalls dostępne dla kontenera. RuntimeDefault — bezpieczny profil. Localhost — własny profil. Kubernetes: securityContext.seccompProfile.type = RuntimeDefault. gVisor (Google): sandbox dla kontenerów — kernel warstwy między kontenerem a hostem. Silna izolacja. Kata Containers: kontenery w VM — hardware-level isolation. Wolniejsze ale najlepsza izolacja. Compliance i audyt: CIS Docker Benchmark — standard dla konfiguracji Docker. CIS Kubernetes Benchmark — standard dla K8s. Docker Bench for Security — narzędzie skanujące konfigurację Docker. kube-bench — skanuje K8s pod kątem CIS benchmark. kubescape — CNCF narzędzie do security posture management. Continuous compliance: Starboard / Trivy Operator — continuous scanning w K8s. Policy Reporter — raporty z Kyverno/OPA. RBAC audit — automatyczne sprawdzanie over-permissioned accounts.

    Czytaj dalej

    Powiązane artykuły

    Kontakt

    Skontaktuj się z nami

    Porozmawiajmy o Twoim projekcie. Bezpłatna wycena w ciągu 24 godzin.

    Wyślij zapytanie

    Bezpłatna wycena w 24h
    Bez zobowiązań
    Indywidualne podejście
    Ekspresowa realizacja

    Telefon

    +48 790 814 814

    Pon-Pt: 9:00 - 18:00

    Email

    adam@fotz.pl

    Odpowiadamy w ciągu 24h

    Adres

    Plac Wolności 16

    61-739 Poznań

    Godziny pracy

    Pon - Pt9:00 - 18:00
    Sob - NdzZamknięte

    Wolisz porozmawiać?

    Zadzwoń teraz i porozmawiaj z naszym specjalistą o Twoim projekcie.

    Zadzwoń teraz