Kubernetes Security: Production Ortamında Yapılması Gerekenler
Kubernetes cluster'ları güvenli hale getirmek, sadece cluster'ı kurmak kadar önemli. Bu rehberde, production ortamlarında uyguladığım güvenlik best practice'lerini paylaşıyorum.
RBAC Konfigürasyonu
Principle of least privilege uygulayın. Her kullanıcı sadece ihtiyacı olan kaynaklara erişebilmeli:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: developer
rules:
- apiGroups: [""]
resources: ["pods", "services"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["get", "list", "watch", "update", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: developer-binding
subjects:
- kind: User
name: developer@company.com
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
name: developer
apiGroup: rbac.authorization.k8s.ioNetwork Policies ile Traffic Kontrolü
Pod'lar arası iletişimi sınırlayın. Default deny policy uygulayın:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-backend
spec:
podSelector:
matchLabels:
app: frontend
policyTypes:
- Egress
egress:
- to:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 8080Secret Management
Secret'ları güvenli şekilde yönetin. External secret management kullanın:
# AWS Secrets Manager ile secret sync
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
data:
database-password: <base64-encoded-password>
api-key: <base64-encoded-api-key>
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
template:
spec:
containers:
- name: app
image: myapp:latest
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: app-secrets
key: database-passwordPod Security Standards
Pod Security Standards uygulayarak güvenli pod'lar oluşturun:
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
spec:
template:
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: app
image: myapp:latest
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALLİpucu: Regular security scanning yapın. Trivy veya Falco kullanın.
Dikkat: Root olarak çalışan container'ları production'da kullanmayın!