DockerDevSecOpsContainerBulut Güvenliği

Docker Güvenliği: Production için 15 Kritik Kontrol

17 Nisan 202612 dk okumaVefaSec Editör
Docker Güvenliği: Production için 15 Kritik Kontrol

Docker production'da güvensiz varsayılanlarla çalışıyor. Container escape, privileged mod ve public registry imajları gerçek saldırı vektörleri. İşte container altyapınızı sertleştiren 15 kritik kontrol.

Image Güvenliği (1-5)

1) Resmi base image kullanın (docker.io/library/node değil alpine gibi minimal varyant). 2) Image tarama — Trivy veya Grype ile her build'de CVE kontrolü. 3) Imageları imzalayın (Cosign) ve deploy öncesi doğrulayın. 4) Image tag'lerini sabitleyin (`node:20` değil `node:20.11.1-alpine3.19`).

5) Multi-stage build kullanın — build dependencies final image'a girmesin. Typical Node.js image'i 1GB'tan 200MB'a düşer, saldırı yüzeyi paralel olarak azalır.

Runtime Koruması (6-10)

6) Container root ile çalışmasın — Dockerfile'da USER 1000:1000 veya docker run --user. 7) --read-only filesystem (yazmaya ihtiyaç varsa specific tmpfs mount). 8) --cap-drop=ALL sonra ihtiyaç olanları tek tek ekleyin (genelde hiçbiri gerekli değil).

9) --security-opt=no-new-privileges. 10) Privileged mod asla kullanılmasın (--privileged). Bunu gerektiren servisler mimari olarak sorunlu.

Secret Yönetimi (11-12)

11) Secret'ları image'a gömmeyin — Dockerfile'da ENV veya COPY ile secret alırsanız image layer'larda kalır, git history gibi. Kullanın: Docker Secrets, HashiCorp Vault, AWS Secrets Manager, veya K8s Secrets + encryption at rest.

12) Build time secret (private repo SSH key gibi) için `--secret` flag (Docker BuildKit). Runtime'da environment variable olarak secret geçmeyin — /proc/<pid>/environ'dan okunabilir. Dosya üzerinden mount edilmeli.

Ağ İzolasyonu (13-14)

13) Docker default network kullanmayın. Her uygulama için custom network oluşturun ve sadece iletişim kuracak servisleri aynı networke alın. Mikroservisler arası ağ segmentasyonu kritik.

14) Inbound ports'u minimize edin. docker run -p 3000:3000 yerine reverse proxy (nginx, Traefik) arkasına alın. Sadece proxy'nin dış bağlantısı olsun, servisler internal network'te kalsın.

İzleme ve Audit (15)

15) Container davranışını izleyin — Falco (open-source runtime security), Sysdig, Aqua. Anormal syscall pattern'leri (örn: container içinde /etc/shadow okuma denemesi) alarm versin. Docker daemon log'unu ELK'e pompalayın.

Logları container-ephemeral olduğu için external'a göndermelisiniz. Fluentd, Vector veya Filebeat ile centralize edin. Kubernetes kullanıyorsanız sidecar pattern ile her pod'dan log çekin.

Kubernetes'te Ekstra Kontroller

Pod Security Standards (PSS) uygulayın — 'baseline' minimum, 'restricted' ideal. Network Policy ile pod-to-pod trafiği whitelist'leyin. OPA Gatekeeper veya Kyverno ile policy-as-code kurun (örn: 'privileged pod deploy edilemez', 'latest tag yasak').

ImagePolicyWebhook ile cluster'a sadece imzalanmış imajlar girsin. Secret'ları KMS ile encrypt edin (etcd encryption at rest). Service account'lar least-privilege ile yapılandırılsın.

Projeniz veya denetim ihtiyacınız için VefaSec'le konuşun.

Diyarbakır merkezli ekibimiz; kurumsal müşterilere uçtan uca yazılım geliştirme, sızma testi ve siber güvenlik danışmanlığı hizmetleri sunar. Keşif görüşmesi ücretsiz, bağlayıcı değil.

İlgili Yazılar