Konuyu Okuyanlar:

Kubernetes Güvenliği 2026: RBAC, Pod Security Standards, NetworkPolicy ve kube-bench

Kubernetes Güvenliği 2026: RBAC, Pod Security Standards, NetworkPolicy ve kube-bench
[Resim: attachment.php?aid=212]

Merhaba arkadaşlar,

Kubernetes, modern uygulamaların çalıştığı fiili standart haline geldi; ama varsayılan bir küme güvenli değildir. Yanlış yapılandırılmış RBAC, ayrıcalıklı pod'lar ve kısıtlanmamış ağ trafiği, saldırganın bir konteynerden tüm kümeye yayılmasına zemin hazırlar. Bu rehberde Kubernetes güvenliğinin dört temel taşını resmi Kubernetes belgelerine dayanarak savunma gözüyle ele alıyorum: RBAC, Pod Security Standards, NetworkPolicy ve kube-bench ile CIS denetimi. Tüm komutlar kendi test kümenizde (örneğin minikube/kind) çalıştırılmalıdır.

Konuda Anlatılacaklar
  1. Kubernetes saldırı yüzeyi
  2. RBAC ile en az yetki
  3. Pod Security Standards ve Admission
  4. NetworkPolicy ile ağ segmentasyonu
  5. Secret yönetimi
  6. kube-bench ile CIS denetimi
  7. Test lab kurulumu

Kubernetes Saldırı Yüzeyi

Bir Kubernetes kümesinde başlıca risk alanları: API sunucusuna aşırı geniş erişim (RBAC), konteyner kaçışına izin veren ayrıcalıklı pod'lar, pod'lar arası sınırsız yatay trafik (lateral movement), açıkta kalan Secret'lar ve güncellenmemiş bileşenler. Savunma, bu alanların her birine bir kontrol koymaktır.

[Resim: attachment.php?aid=213]

RBAC ile En Az Yetki

Role-Based Access Control (RBAC), kimin hangi kaynak üzerinde ne yapabileceğini belirler. Kubernetes belgelerine göre Role (namespace kapsamlı) veya ClusterRole (küme geneli) ile izinler tanımlanır, RoleBinding/ClusterRoleBinding ile özneye (kullanıcı, grup, ServiceAccount) atanır. Altın kural: geniş "cluster-admin" dağıtmak yerine dar roller verin.

Yalnızca belirli bir namespace'te pod okuyabilen bir rol örneği:

Kod:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: uygulama name: pod-okuyucu rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch"]

Bu rolü bir ServiceAccount'a bağlamak:

Kod:
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pod-okuyucu-baglama namespace: uygulama subjects: - kind: ServiceAccount name: izleme-sa namespace: uygulama roleRef: kind: Role name: pod-okuyucu apiGroup: rbac.authorization.k8s.io

Kendi yetkinizi kontrol etmek için kubectl'in yerleşik aracı:

Kod:
kubectl auth can-i create deployments --namespace uygulama kubectl auth can-i '*' '*' --all-namespaces

İkinci komut "yes" dönüyorsa fazla yetkiniz var demektir; bunu daraltın.

Pod Security Standards ve Admission

Kubernetes, PodSecurityPolicy'yi kaldırdı ve yerine yerleşik Pod Security Admission denetleyicisini getirdi. Üç profil vardır: privileged (kısıtsız), baseline (bilinen ayrıcalık yükseltmelerini engeller) ve restricted (sıkı en iyi uygulamalar). Belgelerine göre profiller namespace etiketleriyle uygulanır. "restricted" profili zorunlu kılan etiketleme:

Kod:
kubectl label namespace uygulama \ pod-security.kubernetes.io/enforce=restricted \ pod-security.kubernetes.io/enforce-version=v1.37

enforce dışında audit ve warn modları da vardır; önce warn/audit ile etkisini görmek iyi bir yaklaşımdır:

Kod:
kubectl label namespace uygulama \ pod-security.kubernetes.io/warn=restricted \ pod-security.kubernetes.io/audit=restricted --overwrite

[Resim: attachment.php?aid=214]

Pod tanımında da sertleştirme yapın: ayrıcalıklı çalıştırmayın, kök olmayan kullanıcı kullanın, salt okunur kök dosya sistemi tercih edin:

Kod:
securityContext: runAsNonRoot: true allowPrivilegeEscalation: false readOnlyRootFilesystem: true capabilities: drop: ["ALL"]

NetworkPolicy ile Ağ Segmentasyonu

Varsayılan olarak bir kümedeki tüm pod'lar birbiriyle serbestçe konuşabilir. NetworkPolicy ile bunu kısıtlarsınız (CNI eklentinizin NetworkPolicy desteklemesi gerekir). Önce namespace'te tüm gelen trafiği varsayılan olarak reddeden bir politika:

Kod:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: varsayilan-ingress-reddet namespace: uygulama spec: podSelector: {} policyTypes: - Ingress

Boş podSelector tüm pod'ları seçer; ingress kuralı tanımlanmadığı için hiçbir gelen trafiğe izin verilmez. Sonra yalnızca gereken trafiği açarsınız (örneğin frontend'den backend'e). Bu "önce hepsini kapat, sonra gerekeni aç" yaklaşımı sıfır güven (zero trust) ağ modelinin temelidir.

Secret Yönetimi

Kubernetes Secret'ları varsayılan olarak yalnızca base64 ile kodlanır, şifrelenmez. Belgelere göre etcd'de bekleyen veri şifrelemesini (encryption at rest) etkinleştirmek ve Secret'lara RBAC ile erişimi kısıtlamak gerekir. Secret'ları asla git deposuna düz metin olarak koymayın; dışarıdan bir gizli bilgi yöneticisi (ör. harici KMS) ile entegrasyon tercih edin. Bir Secret'ı kimlerin okuyabildiğini RBAC ile sınırlayın; "get secrets" iznini herkese vermeyin.

kube-bench ile CIS Denetimi

Aqua Security'nin açık kaynak aracı kube-bench, kümeyi CIS Kubernetes Benchmark'a göre denetler. Resmi belgelere göre küme içinde bir Job olarak çalıştırılır:

Kod:
kubectl apply -f job.yaml kubectl get pods # kube-bench-xxxxx Completed olduğunda: kubectl logs kube-bench-xxxxx

Belgelerde belirtildiği gibi Job hostPID ve host yolu bağlamaları kullanır; kontrol düzlemi düğümünde çalışması için gerekirse nodeSelector ve toleration ekleyin. Çıktı [PASS]/[FAIL]/[WARN] olarak gelir; FAIL maddelerini önceliklendirin.

[Resim: attachment.php?aid=215]

İleri Seviye: Test Lab Kurulumu

Üretim kümesinde deneme yapmayın. Kendi bilgisayarınızda bir test kümesi kurun:

Kod:
# minikube ile minikube start --kubernetes-version=stable kubectl create namespace uygulama kubectl label namespace uygulama pod-security.kubernetes.io/warn=restricted # ihlal eden bir pod deneyin, uyariyi gorun kubectl run test --image=nginx -n uygulama

Bu lab'da RBAC rollerini, PSA profillerini ve NetworkPolicy'leri güvenle deneyip davranışı gözlemleyebilirsiniz. Ardından bir zafiyet tarayıcısıyla (örneğin imajlar için Trivy) konteyner imajlarınızı da tarayın.

Sonuç

Kubernetes güvenliğinde dört temel: RBAC ile en az yetki, Pod Security Admission ile restricted profil, NetworkPolicy ile "önce kapat sonra aç" segmentasyon ve kube-bench ile düzenli CIS denetimi. Bunları bir test kümesinde deneyip sonra üretime taşıyın. Siz kümelerinizde hangi kontrolü ilk uyguluyorsunuz? Yorumlarda paylaşın.

Kaynakça
Yasal Uyarı

Bu rehberdeki tüm komutlar yalnızca kendi test kümenizde veya yazılı olarak yetkilendirildiğiniz ortamlarda çalıştırılmalıdır. Başkasına ait Kubernetes kümelerine izinsiz erişim veya denetim 5237 sayılı Türk Ceza Kanunu'nun 243, 244 ve 245. maddeleri kapsamında suçtur. TurkTeam yalnızca savunma ve eğitim amaçlı paylaşımları destekler.

Görsel: TurkTeam özgün kapak ve diyagramları

Yasal uyarı: Bu içerik eğitim amaçlıdır. Yalnızca kendi sistemlerinizde veya yazılı izin aldığınız hedeflerde uygulayın (TCK 243-245).


Ek DosyalarEkran Görüntüleri
               
Cevapla



Hızlı Menü: