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."