Container ve Kubernetes Güvenliği: Kapsamlı Test ve Zafiyet Yönetimi Rehberi

Docker imaj güvenliğinden Kubernetes RBAC yapılandırmasına, supply chain güvenliğinden runtime korumasına kadar konteyner ortamlarınızı uçtan uca güvence altına almanın kapsamlı yol haritası.

Container ve Kubernetes güvenlik testleri kapak görseli
Container ve Kubernetes güvenliği: imaj taramasından runtime korumasına kapsamlı zafiyet yönetimi rehberi.

Kısaca

Konteyner teknolojileri ve Kubernetes orkestrasyon platformu, modern yazılım geliştirme ve dağıtım süreçlerinin temel yapı taşları haline gelmiştir. Gartner'ın 2025 raporuna göre, küresel kuruluşların %85'inden fazlası üretim ortamında konteyner kullanmaktadır. Bu yaygınlık, container güvenliğini siber saldırganlar için yüksek değerli bir hedef haline getirmektedir - yanlış yapılandırılmış bir Kubernetes kümesi, tüm altyapının ele geçirilmesine yol açabilir.

Bu rehberde; Docker güvenlik en iyi uygulamalarını, Kubernetes güvenlik temellerini, RBAC ve Network Policy yapılandırmalarını, Pod Security Standards'ı, supply chain güvenliğini, güvenlik tarama araçlarını ve zafiyet yönetimi stratejilerini detaylı biçimde ele alıyoruz. DevSecOps pipeline'larınıza konteyner güvenliğini nasıl entegre edebileceğinizi adım adım açıklıyoruz.

Container Güvenliği Neden Kritik?

Konteyner teknolojilerinin getirdiği hız ve esneklik, beraberinde yeni güvenlik risklerini de taşımaktadır. Geleneksel VM tabanlı altyapılardan farklı olarak, konteynerler çekirdeği paylaştığı için bir konteyner kaçışı (container escape) tüm host sistemi tehlikeye atabilir.

Konteyner Ortamındaki Temel Riskler

  • Geniş Saldırı Yüzeyi: Konteyner imajları, orkestrasyon platformu, container runtime, ağ yapılandırması ve registry hizmetleri - her katman ayrı saldırı vektörleri sunar.
  • İmaj Zafiyetleri: Docker Hub'daki popüler imajların %60'ından fazlasında bilinen güvenlik açıkları bulunmaktadır. Base imajdaki tek bir kritik zafiyet, yüzlerce mikro hizmete yayılabilir.
  • Yapılandırma Hataları: Privileged konteynerler, root kullanıcı, açık portlar ve yetersiz kaynak limitleri en yaygın yapılandırma hatalarıdır.
  • Sır Yönetimi Eksiklikleri: Konteyner imajlarına gömülü API anahtarları, veritabanı parolaları ve sertifikalar; imaj katmanları incelenerek kolayca elde edilebilir.
  • Efemer Yapı: Konteynerlerin kısa ömürlü olması, geleneksel güvenlik izleme araçlarının yetersiz kalmasına neden olabilir.
  • Supply Chain Saldırıları: Kötü niyetli veya arka kapılı base imajlar, CI/CD pipeline'ları aracılığıyla üretime kadar taşınabilir.

2024 yılında gerçekleşen büyük güvenlik olaylarının %35'inde konteyner veya Kubernetes yanlış yapılandırması ana saldırı vektörü olarak raporlanmıştır. Bu durum, container güvenliğinin artık opsiyonel değil zorunlu bir disiplin olduğunu kanıtlamaktadır.

Docker İmaj Güvenliği

Konteyner güvenliğinin temeli, güvenli imajlarla başlar. Bir Docker imajındaki zafiyet, o imajdan oluşturulan tüm konteynerlere miras kalır.

İmaj Güvenliği Kontrol Listesi

  • Minimal Base İmaj Kullanımı: Alpine Linux, Distroless veya Scratch imajlarını tercih edin. Tam özellikli Ubuntu veya Debian imajları gereksiz paketler ve dolayısıyla gereksiz saldırı yüzeyi içerir.
  • İmaj Taraması: Her build sürecinde otomatik zafiyet taraması yapın. Trivy, Grype veya Snyk Container gibi araçlarla kritik ve yüksek seviye zafiyetler tespit edildiğinde build'i durdurun.
  • İmaj İmzalama: Docker Content Trust (DCT) veya Cosign ile imajlarınızı imzalayın. Yalnızca imzalanmış imajların cluster'a deploy edilmesine izin verin.
  • Katman Optimizasyonu: Multi-stage build kullanarak gereksiz build araçlarını ve bağımlılıklarını final imajdan çıkarın.
  • Sabit Etiketler: latest etiketi yerine belirli sürüm etiketleri veya SHA256 digest değerleri kullanın.
  • Sır Tespit Taraması: GitLeaks, TruffleHog veya docker history komutuyla imaj katmanlarında gizli bilgi olup olmadığını kontrol edin.

Dockerfile En İyi Uygulamalar

Güvenli bir Dockerfile yazmak, konteyner güvenliğinin ilk ve en önemli adımıdır. Aşağıdaki kurallar, imaj seviyesinde saldırı yüzeyini önemli ölçüde azaltır.

Güvenli Dockerfile Kuralları

  1. Non-root Kullanıcı: USER direktifi ile uygulamayı root dışı bir kullanıcıyla çalıştırın. Root olarak çalışan konteynerler, container escape riskini dramatik biçimde artırır.
  2. Multi-stage Build: Build aşamasındaki araçları (gcc, make, npm devDependencies) final imaja taşımayın. Bu hem imaj boyutunu küçültür hem de saldırı yüzeyini daraltır.
  3. COPY vs ADD: ADD yerine COPY kullanın. ADD uzak URL'lerden dosya indirebilir ve tar arşivlerini otomatik açabilir - bu beklenmeyen güvenlik riskleri oluşturabilir.
  4. Paket Güncelleme: Base imajdaki paketleri güncelleyin ve gereksiz paketleri kaldırın. Paket yöneticisi önbelleğini temizleyin.
  5. Healthcheck: HEALTHCHECK direktifi ile konteyner sağlık durumunu izleyin. Sağlıksız konteynerler otomatik olarak yeniden başlatılabilir.
  6. .dockerignore: .git, .env, node_modules ve diğer hassas dizinleri .dockerignore dosyasıyla build context dışında tutun.
  7. Sabit Base İmaj Versiyonu: FROM node:20.11-alpine3.19 gibi tam sürüm numarası kullanın. Minor güncelleme bile güvenlik değişiklikleri içerebilir.

Kubernetes Güvenlik Temelleri

Kubernetes güvenlik modeli "4C" yaklaşımıyla katmanlı güvenlik sunar: Cloud (Altyapı), Cluster (Küme), Container (Konteyner) ve Code (Kod). Her katmandaki güvenlik kontrolü, bir üst katmanın zafiyetlerini telafi edemez ancak toplam güvenlik duruşunu güçlendirir.

Kubernetes API Sunucusu Güvenliği

  • API sunucusuna erişimi yalnızca güvenilir ağlarla sınırlandırın.
  • Anonim kimlik doğrulamayı devre dışı bırakın (--anonymous-auth=false).
  • TLS 1.2+ zorunlu kılın ve güçlü cipher suite kullanın.
  • Audit logging'i etkinleştirin ve SIEM'e yönlendirin.
  • Admission Controller'ları (OPA/Gatekeeper, Kyverno) yapılandırın.

etcd Güvenliği

  • etcd verilerini rest'te şifreleyin (encryption at rest).
  • etcd erişimini yalnızca API sunucusuyla sınırlandırın.
  • Düzenli etcd yedeklemesi yapın ve yedekleri şifreleyin.
  • etcd iletişiminde mTLS kullanın.

Secrets Yönetimi

  • Kubernetes Secrets'ı etcd'de şifrelenmiş olarak saklayın.
  • Harici sır yönetimi araçları (HashiCorp Vault, AWS Secrets Manager) tercih edin.
  • Sırları environment variable yerine volume mount olarak bağlayın.
  • RBAC ile sırlara erişimi en az yetki prensibine göre sınırlandırın.

RBAC ve Network Policy

Role-Based Access Control (RBAC) ve Network Policy, Kubernetes güvenliğinin iki temel direğidir. RBAC "kim ne yapabilir" sorusunu, Network Policy ise "hangi pod hangi pod'la konuşabilir" sorusunu yanıtlar.

RBAC En İyi Uygulamalar

  • En Az Yetki Prensibi: Kullanıcılara ve servis hesaplarına yalnızca görevlerini yerine getirmek için gereken minimum yetkileri atayın.
  • ClusterRole vs Role: Namespace seviyesinde yetki yeterliyse Role kullanın. ClusterRole yalnızca cluster-wide kaynaklar için gereklidir.
  • Wildcard Kullanımından Kaçının: resources: ["*"] veya verbs: ["*"] kullanmak, gereksiz aşırı yetkilendirmeye yol açar.
  • Servis Hesapı Denetimi: Default servis hesabını kullanmayın; her uygulama için özel servis hesabı oluşturun.
  • Düzenli RBAC Denetimi: kubectl auth can-i --list ve RBAC analiz araçlarıyla (KubiScan, rbac-lookup) yetkileri düzenli denetleyin.

Network Policy Uygulaması

  • Default Deny: Tüm namespace'lerde varsayılan olarak tüm ingress ve egress trafiği reddedin, ardından yalnızca gerekli trafiği açık biçimde izin verin.
  • Mikro-segmentasyon: Her mikro hizmet için ayrı Network Policy tanımlayarak yalnızca iletişim kurması gereken pod'larla erişime izin verin.
  • Egress Kontrolü: Pod'ların yalnızca gerekli harici servislere erişmesine izin verin. Kötü amaçlı yazılım C2 iletişimini engellemeye yardımcı olur.
  • DNS Politik Edilmesi: Egress kurallarında DNS çözümleme (kube-dns/coredns pod'larına erişim) için açık izin eklemeyi unutmayın.

Pod Security Standards

Kubernetes Pod Security Standards (PSS), pod'ların güvenlik yapılandırmasını üç seviyede tanımlar. Kubernetes 1.25'ten itibaren Pod Security Admission (PSA) varsayılan olarak etkindir.

PSS Seviyeleri

  • Privileged: Herhangi bir kısıtlama uygulanmaz. Yalnızca system-level ve infrastructure pod'ları için uygundur. Üretim iş yükleri için kullanılmamalıdır.
  • Baseline: Bilinen yetki yükseltme vektörlerini engeller. Privileged konteynerler, host ağ/PID/IPC namespace kullanımı ve tehlikeli volume türleri yasaklanır.
  • Restricted: En katı güvenlik politikası. Baseline kısıtlamalarına ek olarak root kullanıcı, yetki yükseltme (allowPrivilegeEscalation), tüm Linux capabilities düşürme ve salt-okunur root dosya sistemi zorunluluğu getirir.

Uygulama Önerileri

  1. Yeni namespace'lerde doğrudan restricted seviyesiyle başlayın.
  2. Mevcut iş yüklerini warn modunda değerlendirip uyumluluğu kontrol edin.
  3. Uyumluluk sağlandıktan sonra enforce moduna geçin.
  4. İstisna gerektiren pod'lar için ayrı namespace kullanın.

SecurityContext Örnek Yapılandırma

  • runAsNonRoot: true - Root kullanıcı zorunlu olarak engellenir.
  • readOnlyRootFilesystem: true - Dosya sistemi salt-okunur yapılır.
  • allowPrivilegeEscalation: false - Yetki yükseltme engellenir.
  • capabilities.drop: ["ALL"] - Tüm Linux capabilities düşürülür.
  • seccompProfile.type: RuntimeDefault - Seccomp profili uygulanır.

Container Runtime Güvenliği

Container runtime, konteyner imajlarını çalıştıran temel yazılım katmanıdır. Runtime güvenliği, çalışma zamanında konteyner davranışlarının izlenmesi ve kötü niyetli aktivitelerin tespit edilmesini kapsar.

Runtime Güvenlik Araçları

  • Falco: CNCF projesi olan Falco, çekirdek düzeyinde sistem çağrılarını izleyerek anormal konteyner davranışlarını gerçek zamanlı tespit eder. Shell yürütme, dosya erişimi, ağ bağlantıları gibi olayları kurallarla izler.
  • Sysdig Secure: Runtime tehdit algılama, imaj tarama ve uyumluluk kontrolü sunan kapsamlı konteyner güvenlik platformu.
  • Tetragon: eBPF tabanlı güvenlik gözlemlenebilirlik aracı. Sistem çağrılarını düşük performans etkisiyle izler ve güvenlik politikalarını uygular.
  • AppArmor / SELinux: Konteyner süreçlerinin erişebileceği dosyaları, ağ kaynaklarını ve sistem çağrılarını zorunlu erişim kontrolü (MAC) ile kısıtlar.

Runtime İzleme Kuralları

  • Konteyner içinde shell çalıştırılması (/bin/sh, /bin/bash) uyarısı.
  • Hassas dosya erişimi (/etc/shadow, /etc/passwd) tespit edilmesi.
  • Beklenmeyen ağ bağlantılarının (outbound C2 trafiği) izlenmesi.
  • İmaj dışı yeni ikili dosyaların çalıştırılmasının algılanması.
  • Volume mount değişikliklerinin izlenmesi.

Registry ve Supply Chain Güvenliği

Konteyner supply chain güvenliği, imajın oluşturulmasından dağıtılmasına kadar tüm aşamaları kapsar. Bir supply chain saldırısı, güvenilir görünen bir imaj üzerinden tüm altyapıya yayılabilir.

Registry Güvenliği

  • Özel Registry Kullanımı: Üretim ortamı için özel (private) container registry kullanın. Harbor, GitLab Container Registry veya cloud-native çözümler uygundur.
  • Erişim Kontrolü: Registry'ye erişimi RBAC ile sınırlandırın. Push yetkisini yalnızca CI/CD pipeline'larına verin.
  • İmaj İmzalama: Cosign veya Notary ile tüm üretim imajlarını imzalayın. Kubernetes tarafında imza doğrulaması için Connaisseur veya Kyverno kullanın.
  • Otomatik Zafiyet Taraması: Registry'e push edilen her imajı otomatik olarak tarayın ve kritik zafiyet içeren imajların deploy edilmesini engelleyin.
  • İmaj Yaşam Döngüsü: Kullanılmayan ve eski imajları düzenli olarak temizleyin. İmaj saklama politikası belirleyin.

SBOM (Software Bill of Materials)

Her konteyner imajı için SBOM oluşturun. SBOM, imajdaki tüm yazılım bileşenlerini ve bağımlılıklarını listeler. Yeni bir zafiyet açıklandığında SBOM sayesinde etkilenen imajları anında tespit edebilirsiniz.

  • Syft veya Trivy ile SBOM oluşturun (SPDX veya CycloneDX formatı).
  • SBOM'ları merkezi bir veritabanında saklayın.
  • Yeni CVE yayınlandığında SBOM'ları otomatik tarayın.
  • SBOM'ı CI/CD pipeline'ına entegre ederek her build ile güncel tutun.

Güvenlik Tarama Araçları

Konteyner ve Kubernetes ortamları için kullanılabilecek açık kaynak ve ticari güvenlik tarama araçları ekosistemi oldukça zengindir.

İmaj Tarama Araçları

  • Trivy: Aqua Security tarafından geliştirilen açık kaynak araç. Konteyner imajları, dosya sistemleri, Git repository ve Kubernetes yapılandırmalarını tarar. CVE, gizli bilgi (secret) ve yapılandırma hataları tespit eder.
  • Grype: Anchore tarafından geliştirilen hızlı ve hafif zafiyet tarama aracı. SBOM tabanlı çalışır ve CI/CD pipeline'larına kolayca entegre olur.
  • Snyk Container: Ticari araç. İmaj zafiyetleri, base imaj önerileri ve düzeltme rehberliği sunar. IDE ve CI/CD entegrasyonları mevcuttur.

Kubernetes Yapılandırma Tarama

  • kube-bench: CIS Kubernetes Benchmark'larına göre cluster yapılandırmasını denetler. Master ve worker node güvenlik kontrollerini içerir.
  • kubeaudit: Kubernetes manifest dosyalarını güvenlik açısından tarar. Non-root kullanıcı, kaynak limitleri, read-only dosya sistemi gibi kontrolleri denetler.
  • Checkov: IaC (Infrastructure as Code) tarama aracı. Terraform, Helm chart ve Kubernetes YAML dosyalarındaki güvenlik yanlış yapılandırmalarını tespit eder.

Runtime Güvenlik

  • Falco: Kernel düzeyinde sistem çağrı izleme ile runtime anomali tespiti. Özelleştirilebilir kurallar ve SIEM entegrasyonu.
  • KubeHunter: Kubernetes cluster'ını sızma testi perspektifinden tarayan açık kaynak araç. Uzaktan keşif ve cluster içi tarama modları.
  • Kubescape: MITRE ATT&CK, NSA-CISA ve CIS Benchmark framework'leriyle Kubernetes güvenlik değerlendirmesi.

SİTEY ile Container Zafiyet Yönetimi

SİTEY platformu, konteyner ve Kubernetes ortamlarınızdaki zafiyetleri merkezi olarak yönetmenizi sağlar. Platform, DevSecOps pipeline'ınıza sorunsuz entegre olarak güvenliği geliştirme sürecinin her aşamasına taşır.

  • Çoklu Tarama Entegrasyonu: Trivy, Grype, Snyk ve diğer konteyner tarama araçlarının çıktılarını merkezi platformda toplayın ve tekil bir görünümde yönetin.
  • CI/CD Pipeline Entegrasyonu: GitHub Actions, GitLab CI, Jenkins ve ArgoCD ile entegrasyon. Build aşamasında güvenlik kapısı (quality gate) oluşturun.
  • İmaj Yaşam Döngüsü Takibi: Base imaj güncellemeleri, yeni CVE yayınları ve patch durumlarını otomatik izleyin.
  • Kubernetes Cluster Görünürlüğü: Çalışan pod'lar, deployment'lar ve namespace'ler düzeyinde zafiyet envanteri.
  • Risk Tabanlı Önceliklendirme: İmaj zafiyet sayısı, pod sayısı, internet erişimi ve hassas veri içeriğine göre çok boyutlu risk puanlaması.
  • SBOM Yönetimi: Tüm konteyner imajlarının SBOM'larını merkezi olarak saklayın ve yeni CVE'lere karşı sürekli tarayın.
  • Uyumluluk Raporlama: CIS Benchmark, PCI DSS, SOC 2 ve ISO 27001 gereksinimlerine uygun otomatik raporlama.

Sık Yapılan Hatalar

Konteyner ve Kubernetes güvenliğinde en sık karşılaşılan hatalar ve bunlardan kaçınma yolları:

  • Root Olarak Çalışma: Konteynerlerin root kullanıcıyla çalışması, container escape riskini dramatik biçimde artırır. Tüm iş yüklerini non-root kullanıcılarla çalıştırın.
  • Latest Tag Kullanımı: latest etiketi belirli bir sürümü garanti etmez. Deployment'lar arası tutarsızlıklara ve güvenlik açıklarına yol açabilir.
  • Network Policy Yokluğu: Network Policy tanımlanmayan namespace'lerde tüm pod'lar birbirleriyle serbestçe iletişim kurabilir. Default deny politikasıyla başlayın.
  • Sır Yönetimi İhmali: Kubernetes Secrets'ın base64 kodlaması şifreleme değildir. etcd encryption at rest ve harici sır yönetimi araçları kullanın.
  • Kaynak Limiti Eksikliği: CPU/Memory limiti tanımlanmamış konteynerler, DoS saldırılarına veya noisy-neighbor sorunlarına yol açabilir.
  • Admission Controller Eksikliği: OPA/Gatekeeper veya Kyverno olmadan güvenlik politikalarının uygulanması garanti edilemez.
  • İmaj Taraması Yapmama: Yalnızca build aşamasında tarama yetmez; registry'deki ve çalışan ortamdaki imajlar da düzenli taranmalıdır.
  • Log ve İzleme Eksikliği: Kubernetes audit log'ları ve runtime güvenlik izleme olmadan güvenlik olaylarını tespit etmek mümkün değildir.

Sıkça Sorulan Sorular (SSS)

Docker ve Kubernetes güvenlik testleri ne sıklıkla yapılmalıdır?

İmaj taraması her CI/CD build'inde otomatik olarak yapılmalıdır. Kubernetes cluster yapılandırma denetimi en az aylık olarak gerçekleştirilmelidir. Runtime güvenlik izleme kesintisiz (7/24) çalışmalıdır. Kapsamlı sızma testi ise yılda en az iki kez veya majör altyapı değişikliklerinden sonra tekrarlanmalıdır.

Hangi container runtime daha güvenlidir?

containerd ve CRI-O, Docker daemon'a kıyasla daha küçük saldırı yüzeyine sahiptir. gVisor ve Kata Containers ise sandbox izolasyonu sunarak güvenliği bir adım öteye taşır. Ancak en güvenli runtime, doğru yapılandırılmış ve düzenli güncellenen runtime'dır. Seçim, güvenlik gereksinimleri ve performans ihtiyaçlarına göre yapılmalıdır.

Kubernetes cluster'ımda kaç tane güvenlik aracı kullanmalıyım?

Minimum olarak şu dört kategoride birer araç önerilir: imaj tarama (Trivy), yapılandırma denetimi (kube-bench), runtime güvenlik (Falco) ve policy enforcement (Kyverno/OPA). Bu araçların çıktılarını merkezi bir zafiyet yönetimi platformunda (SİTEY gibi) toplayarak tek noktadan yönetmek en verimli yaklaşımdır.

Container güvenliğinde shift-left yaklaşımı nasıl uygulanır?

Shift-left, güvenliği geliştirme sürecinin en erken aşamalarına taşımak anlamına gelir. IDE düzeyinde Dockerfile linting (hadolint), pre-commit hook'larıyla sır taraması, CI pipeline'ında imaj zafiyet taraması ve pull request aşamasında Kubernetes manifest denetimi ile uygulanır. Bu sayede zafiyetler üretime ulaşmadan tespit edilir ve düzeltme maliyeti düşer.

Konteyner ortamında zero-day zafiyetlerine karşı nasıl korunulur?

Zero-day zafiyetlerine karşı tam koruma mümkün olmasa da, katmanlı savunma riski önemli ölçüde azaltır: minimal base imajlar (saldırı yüzeyini daraltır), runtime güvenlik izleme (anomali tespiti), Network Policy (yanal hareketi engeller), read-only dosya sistemi (kalıcılığı zorlaştırır) ve düzenli SBOM taraması (etkilenen imajların hızlı tespiti). Falco gibi runtime araçları, exploit davranışlarını imza olmadan davranışsal olarak tespit edebilir.

İlgili Yazılar

SİTEY ile bu süreçleri tek platformda otomatikleştirin.

Sınırsız Demo İndir Platformu İnceleyin