format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightDocker Swarm Üzerinde Gelişmiş Konteyner Güvenliği ve İzleme
- arrow_rightDocker Swarm Mimarisi ve Güvenlik Temelleri
- arrow_rightManager Node Koruma Stratejileri
- arrow_rightNode Sertifikası Yönetimi
- arrow_rightKonteyner İzolasyonu ve Namespace Yönetimi
- arrow_rightKullanıcı Namespace İzolasyonu
- arrow_rightKaynak Limitleri ve Cgroups
- arrow_rightAğ Güvenliği ve Segmentasyon
- arrow_rightIngress ve Overlay Ağ Güvenliği
- arrow_rightNetwork Policy Uygulama
- arrow_rightGörüntü (Image) Güvenliği En İyi Uygulamaları
- arrow_rightOfficial ve Verified Image Kullanımı
- arrow_rightMulti-Stage Build Kullanımı
- arrow_rightImage Tarama ve Signed Images
- arrow_rightErişim Kontrolü ve RBAC
- arrow_rightKullanıcı ve Ekip Yönetimi
- arrow_rightDocker Swarm Kullanıcı Oluşturma
- arrow_rightGizli Değerler (Secrets) Yönetimi
- arrow_rightSecret Oluşturma ve Kullanma
- arrow_rightHarici Secret Yönetimi
- arrow_rightİzleme ve Logging Stratejileri
- arrow_rightDocker Logging Sürücüleri
- arrow_rightPrometheus ve Grafana ile İzleme
- arrow_rightUyarı ve Bildirim Sistemleri
- arrow_rightRuntime Güvenliği ve Davranış Analizi
- arrow_rightContainer Sandbox ve Seccomp
- arrow_rightAppArmor ve SELinux Profilleri
- arrow_rightRoot Yetkisinden Kaçınma
- arrow_rightKarşılaştırma: Docker Swarm vs Kubernetes Güvenlik Özellikleri
Docker Swarm Üzerinde Gelişmiş Konteyner Güvenliği ve İzleme
Docker Swarm, Kubernetes'e kıyasla daha basit bir orkestrasyon çözümü sunarken, konteyner güvenliği açısından aynı derecede dikkatli olunması gereken bir platformdur. Gartner'a göre, 2025 yılına kadar container tabanlı uygulamalarda yaşanan güvenlik ihlallerinin %60'ı yanlış konfigürasyonlardan kaynaklanacaktır. Bu rehberde, Docker Swarm ortamlarında kapsamlı bir güvenlik ve izleme stratejisi oluşturmayı inceleyeceğiz.
Docker Swarm Mimarisi ve Güvenlik Temelleri
Docker Swarm, manager ve worker node'lardan oluşan dağıtık bir mimari kullanır. Manager node'lar cluster yönetiminden sorumluyken, worker node'lar konteynerleri çalıştırır. Güvenli bir Swarm kurulumu için mutual TLS (mTLS) şifrelemesi varsayılan olarak etkinleştirilmiştir.
Manager Node Koruma Stratejileri
Manager node'lar cluster'ın kontrol düzlemini oluşturduğu için en kritik bileşenlerdir. Aşağıdaki önlemler alınmalıdır:
- Manager node'ların public internete açık olmaması
- Manager sayısının 3 veya 5 gibi tek sayılarda tutulması
- Raft consensus protokolünün doğru çalışması için yeterli node sayısının sağlanması
Docker Swarm'ın servis keşfi özelliği hakkında detaylı bilgi için Docker Swarm Servis Keşfi Rehberi'mizi inceleyebilirsiniz.
Node Sertifikası Yönetimi
Swarm cluster'ında tüm iletişim mTLS ile korunur. Sertifikalar 90 günde bir otomatik olarak yenilenir. Sertifika sürelerini kontrol etmek için docker inspect komutu kullanılabilir.
Konteyner İzolasyonu ve Namespace Yönetimi
Docker konteynerleri, Linux namespace'leri kullanarak birbirinden izole edilir. Her konteyner kendi process namespace'ine, network namespace'ine, mount namespace'ine ve kullanıcı namespace'ine sahiptir.
Kullanıcı Namespace İzolasyonu
Konuk kullanıcılarını host'tan izole etmek için user namespace remapping kullanılmalıdır. Bu özellik, /etc/docker/daemon.json dosyasında şu şekilde etkinleştirilir:
{
"userns-remap": "default"
}
Kaynak Limitleri ve Cgroups
Her konteyner için CPU, memory ve I/O limitleri tanımlanmalıdır. Swarm stack dosyasında bu limitler belirtilerek "noisy neighbor" sorunları önlenir:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
Ağ Güvenliği ve Segmentasyon
Docker Swarm, overlay ağ sürücüsü kullanarak farklı host'lardaki konteynerlerin aynı ağda iletişim kurmasını sağlar. Ancak bu ağ segmentasyonu doğru yapılandırılmalıdır.
Ingress ve Overlay Ağ Güvenliği
Swarm varsayılan olarak ingress adlı overlay ağı oluşturur. Bu ağ, dış yük dengeleme trafiğini taşır. Ek olarak, uygulama bileşenleri için izole overlay ağlar oluşturulmalıdır:
docker network create --driver overlay --attachable my_secure_network
Network Policy Uygulama
Kubernetes'ten farklı olarak, Docker Swarm'da yerleşik network policy desteği sınırlıdır. Bu nedenle, dış güvenlik duvarı katmanı kritik önem taşır. DDoS Koruma hizmetimiz ile Swarm cluster'larınızı dış tehditlere karşı koruyabilirsiniz.
Ağ güvenliği için MikroTik çözümlerini de kullanabilirsiniz. Detaylı bilgi için MikroTik IP Yönetim ve Güvenlik Duvarı Rehberi'mizi inceleyin.
Görüntü (Image) Güvenliği En İyi Uygulamaları
Container güvenliğinin ilk halkası, güvenli image'ler kullanmaktır. Snyk'a göre, son bir yılda container image'lerinde %300'ün üzerinde güvenlik açığı tespit edilmiştir.
Official ve Verified Image Kullanımı
Sadece resmi Docker Hub veya güvenilir registry'lerden image çekilmelidir. Image etiketleri (tag) her zaman spesifik olmalıdır - latest tag'inden kaçınılmalıdır.
Multi-Stage Build Kullanımı
Build sürecinde oluşan hassas verileri minimize etmek için multi-stage build'ler tercih edilmeli:
# Build stage
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# Runtime stage
FROM alpine:3.18
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
Image Tarama ve Signed Images
Docker Content Trust (DCT) etkinleştirilerek sadece imzalı image'lerin çekilmesi sağlanabilir:
export DOCKER_CONTENT_TRUST=1
Bu özellik, image publisher'ların dijital imzalarını zorunlu kılarak "man-in-the-middle" saldırılarını önler.
Erişim Kontrolü ve RBAC
Docker Swarm, rol tabanlı erişim kontrolü (RBAC) sunar. Kullanıcılara farklı yetki seviyeleri atanabilir.
Kullanıcı ve Ekip Yönetimi
Swarm cluster'ında erişim kontrolü için aşağıdaki roller kullanılır:
- Manager: Tam yönetim yetkisi, servis oluşturma ve kaldırma
- Worker: Sadece çalışan görevleri yürütme
- Admin: Tüm manager yetkileri + cluster geneli ayarlar
- Read-Only: Sadece okuma yetkisi
Docker Swarm Kullanıcı Oluşturma
# Manager node üzerinde
docker node promote worker1 # Worker'ı manager yap
docker node demote manager2 # Manager'ı worker yap
Gizli Değerler (Secrets) Yönetimi
Docker Swarm, hassas verileri (şifreler, API anahtarları, sertifikalar) güvenli bir şekilde yönetmek için secrets desteği sunar. Bu veriler, etcd'de şifrelenmiş olarak saklanır ve sadece yetkili servisler tarafından erişilebilir.
Secret Oluşturma ve Kullanma
# Secret oluşturma
echo "my_secret_password" | docker secret create db_password -
# Serviste secret kullanma
docker service create --name myapp --secret db_password myimage
Secret'ler, /run/secrets/ dizini altında mount edilir ve konteyner içinden erişilebilir olur.
Harici Secret Yönetimi
Büyük ölçekli ortamlarda, harici secret yönetim çözümleri (HashiCorp Vault, AWS Secrets Manager) tercih edilebilir. Vault kurulumu için Vaultwarden Kurulumu Rehberi'mizde benzer secret yönetimi prensiplerini inceleyebilirsiniz.
İzleme ve Logging Stratejileri
Güvenlik, sürekli izleme gerektiren bir süreçtir. Docker Swarm'da merkezi log toplama ve metrik izleme kritik öneme sahiptir.
Docker Logging Sürücüleri
Varsayılan olarak container log'ları json-file sürücüsü ile local diskte saklanır. Merkezi log toplama için syslog veya fluentd sürücüleri yapılandırılmalıdır:
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "tcp://logserver:514",
"tag": "{{.Name}}/{{.ID}}"
}
}
Prometheus ve Grafana ile İzleme
Metrik toplama için Prometheus, görselleştirme için Grafana kullanılması önerilir. cAdvisor, container metriklerini toplamak için yaygın olarak kullanılan bir araçtır.
docker service create \
--name prometheus \
--mount type=bind,source=/prometheus,destination=/prometheus \
--publish 9090:9090 \
prom/prometheus
Uyarı ve Bildirim Sistemleri
Anomali tespiti ve uyarılar için alerting sistemi kurulmalıdır. Mattermost gibi açık kaynaklı bildirim platformları ile entegrasyon sağlanabilir. Detaylı bilgi için Mattermost Sunucu Kurulum Rehberi'mizi inceleyebilirsiniz.
Runtime Güvenliği ve Davranış Analizi
Konfigürasyon güvenliği kritik olmakla birlikte, runtime davranış izleme de eşit derecede önemlidir.
Container Sandbox ve Seccomp
Seccomp (Secure Computing Mode), konteynerlerin erişebileceği sistem çağrılarını sınırlandırır. Docker varsayılan olarak sınırlı bir seccomp profili uygular. Özel profiller oluşturarak güvenlik kapsamı genişletilebilir.
AppArmor ve SELinux Profilleri
Container'ların dosya sistemi ve kaynak erişimini kısıtlamak için AppArmor (Ubuntu/Debian) veya SELinux (CentOS/RHEL) profilleri kullanılmalıdır.
docker run --security-opt apparmor=docker-default myimage
Root Yetkisinden Kaçınma
Konteynerler root olarak çalıştırılmamalıdır. Kullanıcı namespace remapping etkinleştirilmeli veya USER directive'i ile farklı bir kullanıcı belirtilmelidir:
FROM alpine:3.18
RUN adduser -D appuser
USER appuser
CMD ["myapp"]
Karşılaştırma: Docker Swarm vs Kubernetes Güvenlik Özellikleri
| Özellik | Docker Swarm | Kubernetes |
|---|---|---|
| mTLS Encryption | Varsayılan (otomatik) | Manuel yapılandırma |
| RBAC | Temel (4 rol) | Gelişmiş (ClusterRole, Role) |
| Secrets Yönetimi | Yerleşik (Docker secrets) | Yerleşik + harici çözümler |
| Network Policy | Sınırlı (dış firewall gerekli) | Yerleşik NetworkPolicy |
| Image Signing | Docker Content Trust | Notarize, Cosign |
| Runtime Security | Seccomp, AppArmor | Seccomp, AppArmor, Pod Security |