← Blog'a Geri Dön

Kubernetes Üzerinde Güvenli Backend Altyapısı

Modern uygulamaların güvenliği, sadece kod seviyesinde değil, altyapı seviyesinde de kritik öneme sahiptir. Bu yazıda, Kubernetes üzerinde güvenli ve ölçeklenebilir bir backend altyapısı oluşturmak için temel prensipleri ve pratik uygulamaları ele alacağız.

Neden Güvenlik Bu Kadar Önemli?

Kubernetes cluster'ınız bir şirketin kalbidir. API servisleri, veritabanları, cache sistemleri ve daha pek çok kritik bileşen burada çalışır. Bir güvenlik açığı, tüm sisteminizin ele geçirilmesine yol açabilir. Bu nedenle, güvenlik önlemlerini en baştan doğru kurgulamak şarttır.

Network Policies ile Mikro Segmentasyon

Kubernetes'te varsayılan olarak tüm pod'lar birbirleriyle iletişim kurabilir. Bu, geliştirme ortamında kullanışlı olsa da, production ortamında ciddi bir güvenlik riski oluşturur.

Network Policy Örneği

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: backend-policy
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: backend-api
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: frontend
    ports:
    - protocol: TCP
      port: 8080
  egress:
  - to:
    - podSelector:
        matchLabels:
          app: postgres
    ports:
    - protocol: TCP
      port: 5432

Bu policy, backend API'nin sadece frontend pod'larından gelen trafiği kabul etmesini ve sadece PostgreSQL veritabanına bağlanabilmesini sağlar. Diğer tüm trafik varsayılan olarak engellenir.

RBAC ile Yetkilendirme

Role-Based Access Control (RBAC), Kubernetes cluster'ınıza kimlerin neye erişebileceğini kontrol eder. Her kullanıcı veya servis hesabına sadece ihtiyaç duydukları yetkiler verilmelidir (principle of least privilege).

Minimum Yetki ile Service Account

apiVersion: v1
kind: ServiceAccount
metadata:
  name: backend-sa
  namespace: production
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: backend-role
  namespace: production
rules:
- apiGroups: [""]
  resources: ["configmaps", "secrets"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: backend-binding
  namespace: production
subjects:
- kind: ServiceAccount
  name: backend-sa
roleRef:
  kind: Role
  name: backend-role
  apiGroup: rbac.authorization.k8s.io

Secrets Yönetimi

Kubernetes Secret'ları base64 ile encode edilmiştir, yani şifrelenmemiştir. Production ortamında mutlaka encryption at rest aktif edilmeli veya HashiCorp Vault gibi harici bir secret yönetim sistemi kullanılmalıdır.

Secret'ları Environment Variable Olarak Kullanma

apiVersion: v1
kind: Pod
metadata:
  name: backend-pod
spec:
  serviceAccountName: backend-sa
  containers:
  - name: api
    image: backend-api:1.0.0
    env:
    - name: DB_PASSWORD
      valueFrom:
        secretKeyRef:
          name: db-credentials
          key: password
    - name: API_KEY
      valueFrom:
        secretKeyRef:
          name: api-keys
          key: external-api

Security Context ve Pod Security Standards

Pod Security Standards, pod'ların güvenlik yapılandırmasını kontrol eder. Özellikle production ortamında pod'ların root olarak çalışmaması kritik önem taşır.

Güvenli Pod Konfigürasyonu

apiVersion: v1
kind: Pod
metadata:
  name: secure-backend
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 2000
    seccompProfile:
      type: RuntimeDefault
  containers:
  - name: api
    image: backend-api:1.0.0
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
        - ALL
      readOnlyRootFilesystem: true

Image Güvenliği

Container image'larınızın güvenliği de kritik önem taşır. Registry'nizde sadece imzalanmış ve scan edilmiş image'ları kullanmalısınız.

  • Trivy, Clair gibi araçlarla image vulnerability scanning yapın
  • Multi-stage build kullanarak image boyutunu ve attack surface'i minimize edin
  • Distroless veya Alpine gibi minimal base image'lar tercih edin
  • Latest tag yerine spesifik version tag'leri kullanın

Logging ve Monitoring

Güvenlik olaylarını tespit edebilmek için kapsamlı logging ve monitoring şarttır. ELK Stack veya Loki + Grafana gibi çözümlerle loglarınızı merkezi bir yere toplayın.

Sonuç

Kubernetes üzerinde güvenli bir backend altyapısı kurmak, birçok farklı katmanda önlem almayı gerektirir. Network policies, RBAC, secrets yönetimi, pod security ve image güvenliği gibi konular ihmal edilmemelidir. Bu prensipleri doğru uyguladığınızda, hem güvenli hem de ölçeklenebilir bir altyapı elde edebilirsiniz.

"Güvenlik bir ürün değil, süreçtir. Sürekli güncel kalmalı ve yeni tehditlere karşı hazırlıklı olmalısınız."

← Blog'a Geri Dön