Size bir şey söyleyeyim, Açık konuşayım: Kubernetes güvenliği tarafında son birkaç yıldır en çok canımı sıkan konulardan biri nodes/proxy izniydi. E peki, sonuç ne öldü? Hani biliyorduk, sorun çıkarıyordu, ama bir yandan da “şimdilik böyle kalsın” deyip geçiyorduk; çünkü alternatif pek yoktu, monitoring agent’ına izin lazım, log toplayıcıya izin lazım, health check’e izin lazım derken tek kapı yine nodes/proxy ölüyordu ve işin kötü tarafı bu kapı, node üstündeki her container’a komut gönderebilme hakkını da beraberinde getiriyordu.
Neyse, lafı gevelemeden geçeyim. Kubernetes v1.36 ile birlikte fine-grained kubelet API authorization özelliği artık GA öldü; yanı feature gate işi kapanmış durumda, varsayılan açık geliyor ve geri dönüp “kapatalım mı?” deme lüksünüz yok. Bu yazıda hem teknik tarafı anlatacağım hem de Türkiye’deki kurumsal müşterilerde gördüğüm pratik senaryolardan söz edeceğim; çünkü kağıt üstündeki çözüm başka, prod ortamındaki gerçek bambaşka oluyor (ben de ilk duyduğumda şaşırmıştım)
Hmm, bunu nasıl anlatsamdı…
Önce şu nodes/proxy meselesini bir konuşalım
Bence, Kubelet, her node’da 10250 portunda bir HTTPS endpoint açıyor. Burada epey API var; pod listesi, node metrikleri, container log’ları ve en hayatı parça, çalışan container’ın içinde komut çalıştırma işi, yanı /exec. Kulağa sıradan geliyor gıbı duruyor, ama işin içine RBAC girince tablo biraz değişiyor.
Eski modelde, webhook authorization kullanıyorsanız, bu API path’lerinin neredeyse hepsi tek bir RBAC subresource’a mapleniyordu: nodes/proxy. Yanı Prometheus’a metrik okutacaksınız, nodes/proxy veriyorsunuz. Loki ile log toplayacaksınız, yine nodes/proxy. Custom health checker yazdınız mı, hani o küçük masum script var ya, ona da aynı izin gidiyor. Bir noktadan sonra insan “bu kadar geniş mi gerçekten?” diye soruyor.
“
nodes/proxyizni vermek, monitoring agent’ınıza node-level superuser yetkisi vermekle eşdeğerdir. Agent compromise olursa, saldırgan o node’daki her pod’akubectl execçekebilir.”
Küçük bir detay: Geçen sene bir bankacılık projesinde tam olarak bunu pen-test ekibiyle tartışıyorduk. Adamlar haksız değildi; DataDog agent’ının token’ı ele geçerse, cluster’daki finansal mikroservislere kadar uzanan bir erişim zinciri çıkabiliyor (ve evet, bu pek hoş değil). O dönem standart cevap “agent’a daha az izin ver” değildi; daha çok “node network’ünü iyi izole et” gıbı bir yaklaşımdı. Yanı semptomu biraz törpülüyorduk, kökü değil.
WebSocket meselesi: GET ile RCE
Peki neden? Çünkü 2026 başında güvenlik araştırmacıları daha rahatsız edici bir şey gösterdi. Sadece nodes/proxy GET izni bile — yanı kağıt üstünde read-only görünen taraf — tek başına RCE için yetebiliyor. İlk duyduğumda ben de “ölür mu ya?” dedim.
Hmm, bunu nasıl anlatsamdı…
WebSocket protokolü (RFC 6455) gereği bağlantı handshake’i HTTP GET isteğiyle başlıyor. Kubelet de bu GET‘i (söylemesi ayıp) RBAC get verb’üne mapleyip yetkilendiriyor ve sonra WebSocket üzerinden gelen yazma operasyonları için ikincil bir CREATE kontrolü yapmıyor. İşte kırılma burada oluyor; çünkü websocat gıbı bir araçla doğrudan kubelet’in /exec endpoint’ine bağlanıp komut gönderebiliyorsunuz: (eh, fena değil)
websocat --insecure \
--header "Authorization: Bearer $TOKEN" \
--protocol v4.channel.k8s.io \
"wss://$NODE_IP:10250/exec/default/nginx/nginx?output=1&command=ls"
İşin garibi, Lafı gevelemeden söyleyeyim: “monitoring agent’im sadece okuma yapıyor” dediğiniz token, aslında cluster’daki her container için bayağı ciddi bir RCE primitive’i oluyor. Bunu görünce ben de durup kendi eski notlarıma baktım; son üç projedeki RBAC ayarlarını tek tek açtım. Üçünün ikisinde sorun vardı. Maalesef.
Evet, doğru duydunuz.
Fine-Grained Authorization ne yapıyor?
Açıkçası, KEP-2862 ile gelen değişiklik, açık konuşayım, baya mantıklı: kubelet’in HTTPS API’sindeki her path’i ayrı bir subresource’a map ediyor. Yanı artık nodes/proxy diye bir düşüneyim… tek parça, geniş bir kapı yok — onun yerine path bazlı, daha dar izinler var. İşte asıl mesele bu.
Şöyle ki, Şöyle bir tabloyu görmek daha kolay oluyor sanırım:
| Kubelet API Path | Eski Subresource | Yeni Subresource (v1.36) | Tipik Kullanıcı |
|---|---|---|---|
/metrics, /metrics/cadvisor |
nodes/proxy | nodes/metrics | Prometheus |
/stats/* |
nodes/proxy | nodes/stats | Metrics-server |
/logs/* |
nodes/proxy | nodes/log | Log toplayıcılar |
/healthz |
nodes/proxy | nodes/healthz | External health probe |
/configz |
nodes/proxy | nodes/configz | |
/exec/*, /run/*nodes/proxy (hâlâ)d |
>kubectl exec > Bana kalırsa burada kritik nokta şu: Böyle yazınca Prometheus için ne değişiyor?Eskiden şöyle bir
Baya kaba bir çözümdü aslında. Çalışıyordu, evet. Biraz fazla genişti, hatta dürüst olayım, token yanlış ellere geçerse iş büyüyordu (özellikle de
Evet, fark ince görünüyor. Ama etkisi öyle değil. Prometheus token’ı çalınsa bile saldırgan en fazla node metriklerini okuyabiliyor; container içinde komut çalıştırmaya kadar gidemez. Hani bazen “küçük değişiklik” dersin ya, işte burada küçük değil, baya anlamlı bir güvenlik sıkıştırması var (ciddiyim) Daha fazla bilgi için Azure MCP Server Artık MCPB Paketi: Runtime Derdi Bitti yazımıza bakabilirsiniz. Bu konuyla ilgili Gateway API v1.5: Stable’a Taşınan Özellikler ve Notlarım yazımıza da göz atmanızı tavsiye ederim. Tam da öyle. Türkiye’deki kurumsal yapılar açısından durumBunu Türkiye’deki şirketler tarafından düşününce, ilk aklıma finans, sigorta ve telekom geliyor (yanlış duymadınız). Çünkü bu alanlarda KVKK ve sektörel kurallar (BDDK, EPDK) yüzünden “least privilege” artık sadece güzel bir prensip değil, resmen denetim konusu. Ben geçen yıl bir telekom operatöründe iç denetim hazırlığı yaparken, monitoring stack’imizdeki Aslında — hayır dür, daha doğrusu, Logosoft’ta danışmanlık verdiğim müşterilerin çoğu hâlâ AKS 1.30-1.32 bandında geziyor. Yanı v1.36’ya geçiş (söylemesi ayıp) bir anda ölmüyor, biraz zaman alacak. Ama AKS Kubernetes versiyon roadmap’ine bakınca şunu görüyorsunuz: GA olan şeyleri Microsoft genelde 2-3 ay içinde production AKS tarafına taşıyor (tabi bazen ufak sürprizler de oluyor). O yüzden 2026 yaz aylarında AKS’te de görmeye başlayacağız bu özelliği diye düşünüyorum. Şimdiden hazırlanmak fena olmaz. Kurumsal vs startup yaklaşımıKüçük bir ekipseniz ve cluster’ınızda 10-15 node varsa, açık konuşayım, muhtemelen bu özelliği aktif kullanmanız gerekmeyecek. Çünkü monitoring agent’larınızın token işini yönetmek zaten çok zor değil; bir de network tarafında izolasyon kurunca olay büyük ölçüde kapanıyor. Standart Helm chart’larla idare edersiniz, hatta çoğu zaman hiç el sürmeden devam edersiniz. Ve işler burada ilginçleşiyor. Ama kurumsal yapıdaysanız — yanı 100+ node, çok takımlı cluster, üstüne regülasyon baskısı. Security team’in sürekli soru sorması varsa — iş değişiyor. Bu özellik burada baya iş görüyor. Helm chart’larınızın
💡 Bilgi: Prometheus Community Helm chart’ında bu güncelleme için açık bir PR var ama henüz merge olmadı.
kube-prometheus-stack kullanıyorsanız, RBAC bölümünü kendiniz override etmeniz gerekebilir. Ben bir müşteride bunu yaparken, extraClusterRoleRules alanı üzerinden ekleme yapmıştık.
Geçiş için pratik adımlarİlk kurcaladığımda bir hata patladı, anlatayım: test cluster’ında v1.33 beta açıp Prometheus RBAC tarafını biraz fazla sıkılaştırmıştım, sonra Lafı gevelemeden, geçişte ben olsam şu sırayla giderdim:
Eğer henüz Kubernetes Prod Debug Güvenliği: JIT Erişim Rehberi yazımı okumadıysanız, JIT (Just-In-Time) erişim modelini fine-grained authorization ile yan yana kullanmak için iyi bir başlangıç noktası olabilir. İkisi birbirini güzel tamamlıyor dersem abartmış olmam sanırım; biri erişimi zamana bağlıyor, diğeri yetkiyi daraltıyor. Sonuçta elinizde daha kontrollü bir yapı kalıyor. GPT-5.5 Geldi: Gerçekten Daha Akıllı mı, Hype mı? yazımızda bu konuya da değinmiştik. AKS özelinde bir notPeki AKS tarafında durum ne? Azure Monitör for Containers (Container Insights) agent’ı şu anda Maliyet ve operasyonel etkiGarip gelecek ama, Azure tarafında bu değişikliğin doğrudan bir maliyeti yok, sonuçta konuştuğumuz şey RBAC değişikliği. Ama işin bir de dolaylı yüzü var; TL bazında bakınca tablo biraz can sıkıyor, çünkü bir security incident’ın ortalama maliyeti Türkiye’de KVKK cezası dahil 2-5 milyon TL bandına çıkabiliyor (kaynak: 2025 IBM Cost of Data Breach raporu, MEA bölgesi). Cluster’ınızda 50+ pod varsa ve bunlardan biri PII işliyorsa, fine-grained authz’a geçiş bence baya sigorta primi gıbı duruyor. Bu konuyla ilgili Ingress’ten Gateway API’ye Geçiş: 1.0 Rehberi yazımıza da göz atmanızı tavsiye ederim. Operasyonel tarafta işe olay öyle tek tıkla bitmiyor. Geçiş sırasında 1-2 hafta süren bir (belki yanılıyorum ama) “hardening sprint” planlamanız gerekecek; büyük cluster’larda bu süre uzayabiliyor, hatta bazen beklediğinizden daha fazla uzuyor. Ama bir kere yaptığınızda, audit raporlarında “least privilege uygulanıyor” diyebiliyor olmak güzel hissettiriyor, security team’inizle aradaki havayı da yumuşatıyor. İnanın, böyle küçük görünen şeyler bile fark yaratıyor. Eksik kalan ne var?Bilmem anlatabiliyor muyum, Kağıt üstünde her şey fena görünmüyor, ama işin içinde hâlâ birkaç pürüz var. Kısaca bakınca şunlar göze çarpıyor:
Bence bu özellik doğru tarafa atılmış sağlam bir adım, ama eksik duran parça hâlâ WebSocket protokol-RBAC mapping konusu. SIĞ Auth bunu da çözerse, kubelet güvenliği baya daha modern bir seviyeye çıkacak; açık konuşayım, asıl rahatlama orada geliyor. Şunu fark ettim: Neyse, çok dağıtmadan söyleyeyim: Kubernetes ekosistemindeki diğer güvenlik iyileştirmelerini de takıp ediyorsanız, SELinux Volume Label Değişiklikleri GA: v1.37’de Neler yazısı da işinize yarayabilir — bütüncül bir security baseline kurarken iyi gidiyor. Sıkça Sorulan SorularFine-grained kubelet authorization’ı kullanmak için ne yapmalıyım?Kubernetes v1.36 cluster’ın varsa aslında bir şey yapmana gerek yok, özellik zaten varsayılan olarak açık geliyor (yanlış duymadınız). Tek yapman gereken şey şu: monitoring/log/health agent’larının RBAC’ını Eski nodes/proxy izinli RBAC’larım çalışmaya devam edecek mi?Şahsen, Evet, AKS’te ne zaman kullanabileceğim?v1.36 GA öldü, yanı AKS roadmap’ine göre 2-3 ay içinde preview kanallarında görmeye başlayabiliriz. Sonrasında stable AKS versiyonlarına geliyor. Bir de şu var: Microsoft’un Container Insights agent’ını da yeni subresource’larla uyumlu hâle getirmesi gerekiyor. Bu konuda resmî açıklamayı beklemekte fayda var, acele etme (kendi tecrübem) WebSocket RCE riski tamamen ortadan kalktı mı?Açıkçası hayır, tam olarak değil. Fine-grained authz, Helm chart’larım eski izinleri kullanıyor, ne yapmalıyım?Şu an çoğu popüler chart henüz güncellenmedi,. Prometheus, Loki, Fluent Bit gıbı araçları kullanıyorsan bu durumla karşılaşıyorsun. Geçici çözüm olarak chart’ın Kaynaklar ve İleri OkumaKubernetes v1.36: Fine-Grained Kubelet API Authorization Graduates to GA — Resmî Blog Dürüst olmak gerekirse, KEP-2862: Fine-grained Kubelet API Authorization Kubernetes Resmî Dokümantasyonu: Kubelet Authentication & Authorization |
Bu içerik işinize yaradı mı?
Benzer içerikleri kaçırmamak için beni sosyal medyada takip edin.



