Kubernetes Security: Admission Controller
Kubernetes artık modern yazılım geliştirme ve dağıtım süreçlerinde olmazsa olmaz bir parça haline geldi, değil mi? Bu platform, container tabanlı uygulamaların yönetimi ve orkestrasyonunda gerçekten güçlü araçlar sunuyor. Ama tabii, güvenlik meselesi de cabası. Kubernetes güvenliği, işte o platformda koşturduğumuz uygulamaların korunması, saldırılara karşı sağlam olması açısından gerçekten hayati önem taşıyor. Yani, veri sızıntılarından tutun da yetkisiz erişime kadar, potansiyel tehlikeleri bertaraf etmek için kritik bir rol oynuyor.
Kubernetes güvenliği, hem cluster düzeyinde hem de uygulama seviyesinde önemli yapılar içeriyor. İlk olarak, cluster düzeyinde, kimlik doğrulama ve erişim kontrolü gibi temel güvenlik önlemleri bulunuyor. Ayrıca, ağ politikaları ve izolasyon da bu düzeyde büyük rol oynuyor. Öte yandan, uygulama düzeyinde, güvenlik konteyner seviyesinde sağlanır. Bu, güvenlik yamaları, ayrıcalıkların sınırlanması ve güvenli imajlar kullanımını içerir. Böylece, her iki seviyede de, Kubernetes’in güvenliğini sağlamak için kritik önlemler alınmış olur. Yani özetle, Kubernetes’in güvenlik mekanizmaları çok önemli. Bir nevi, evinizi güvende tutmak için kullandığınız kapı kilidi gibi düşünebilirsiniz.
Kubernetes’de bulunan temel güvenlik yapılarından bahsetmek gerekirse;
- Authentication (Kimlik Doğrulama): Kimlik doğrulama yapısı güvenlik sistemlerinde ilk adım olarak bizi karşılıyor. Adeta evinize gelen misafirlerin kimliklerini kontrol etmek gibi. Yani, hangi kullanıcı veya hizmetin ne yapabileceğini anlamak için önce kimliklerini doğruluyoruz. Bu doğrulama işlemleri için desteklenen bir takım mekanizmalar vardır. Örneğin: statik token, basit hizmet hesapları, sertifika tabanlı kimlik doğrulama ve harici kimlik doğrulama sağlayıcıları gibi.
- Authorization (Yetkilendirme): Kimlik doğrulaması tamamlandıktan sonra yetkilendirme geliyor. Bu, evin içinde kimin nereye gidebileceğini belirlemek gibi bir şey. Örneğin, misafirlere oturma odasına gitmelerine izin verebiliriz ama yatak odasına girmelerine izin vermeyebiliriz. Gelen misafirlerimize tanımlayacağımız kişi bir takım politikalar ile nasıl bir yetkilendirmeye sahip olabileceğini gösteririz. Bu politikaların bazıları şu şekildedir: Role-Based Access Control (RBAC), Attribute-Based Access Control (ABAC) ve Node authorization.
- Admission Controllers: Bir de Admission Controllers var ki, bu da adeta evinizdeki güvenlik kamerası gibi düşünülebilir. Yani, gelen talepleri önce kontrol eder, zararlı olabileceklerini tespit eder ve gerekirse reddeder.
- Network Policies: Network Policies de önemli. Bu, evinizde hangi odalar arasında ne tür iletişim olacağını belirlemek gibi. Örneğin, yemek odasıyla banyo arasında iletişime izin vermemek gibi düşünebilirsiniz. Böylece potansiyel zararlı dedikoduları sınırlayabiliriz :)
- Pod Security Policies (PSP): Pod Security Policies, adeta konteynerlerinizin içindeki değerli eşyaları saklamak için koyduğunuz kurallar gibi. Mesela, kimin hangi eşyalara ulaşabileceğini belirlemek gibi. Örneğin, root olarak çalışan konteynerleri engelleyebilir veya konteynerlerin host sistem dosyalarına erişimini kısıtlayabilir.
- Secrets Management: Secrets Management ise, evinizdeki gizli dolabınız gibi düşünebilirsiniz. Yani, hassas bilgileri güvenli bir şekilde saklamak için kullanılır. Bu sayede hassas bilgileri (örneğin, API anahtarları, şifreler) gelen misafirlerin yaramaz çocuklarından saklayabilirsiniz.
- Service Accounts: Biraz farklı bir açıdan bakalım: Kubernetes’in “Service Accounts” yani “Hizmet Hesapları” denen bir özelliği var. Bu hesaplar, sanki o uygulama veya pod kendi ismini kullanıyormuş gibi, Kubernetes’in içinde işlerini halletmeleri için kullanılıyor. Yani, şöyle düşünün; evinize gelen bir misafirin kapıda kendini tanıtması gibi, bu hesaplar da Kubernetes’e gelen pod ve uygulamaların kendilerini tanıtması için kullanılıyor. İlginç olan şu ki, bu hesaplar genellikle insanlar tarafından değil, sanki o pod’lar kendi aralarında konuşuyorlarmış gibi, yazılımlar tarafından kullanılıyor. Bu da aslında sistemin daha düzenli ve güvenli çalışmasını sağlıyor, çünkü her uygulamanın kendi ayrı kimliği ve izinleri oluyor böylece karışıklıkları ve güvenlik risklerini önlemiş oluyoruz.
- TLS for Secure Communication: Kubernetes içindeki parçalar ve uygulamalar arasındaki iletişimde, hatta kullanıcılarla olan iletişimde bile, veriler şifreleniyor. Yani, tam olarak evinizdeki iletişim telefonunuzun şifrelenmesi gibi düşünebilirsiniz. Bu sayede, bilgilerinizin gizli kalması ve verilerin sağlam kalması sağlanıyor. Çünkü kimse araya girip o konuşmaları dinleyemez veya verileri değiştiremez. İşte, bu özellik aslında güvenliğin temel taşlarından biri.
İşte, bu güvenlik mekanizmaları, Kubernetes’i güvende tutmak için kritik öneme sahip. Her biri, sanki evinizi güvende tutmak için koyduğunuz önlemler gibi, bir araya gelerek daha güvenli bir Kubernetes ortamı oluşturuyor.
Kubernetes Güvenliğinde Admission Controller’ın Yeri
Kubernetes, modern yazılım geliştirme dünyasında adeta bir devrim yaptı, değil mi? Uygulamaların yönetimini ve dağıtımını inanılmaz derecede kolaylaştıran bu dinamik ve esnek platform, aynı zamanda güvenlik konularına da büyük önem veriyor. Peki, Kubernetes’in güvenlik mimarisinde önemli bir rol oynayan yapılardan biri olan Admission Controller’lardan hiç bahsetmiş miydik?
Diyelim ki, evinize yeni bir mobilya almak istiyorsunuz. Ama bu mobilyanın evinize girmeden önce birkaç kontrol aşamasından geçmesi gerekiyor. İlk olarak, bu mobilya evinizin kapısından geçecek mi? Evinizin dekorasyonuna uyacak mı? İşte Admission Controller’lar da tam olarak bu tür kontrolleri yapıyor. Kubernetes API’ye yapılan her isteği, kabul edilmeden önce değerlendiriyor ve doğruluyor. Bu sayede, sistemin içerisine girecek olan her türlü kaynak değişikliği veya yeni kaynak eklemesi, belirlenen kurallar çerçevesinde gerçekleşiyor.
Admission Controller Yapısı ve İşlevi
Admission Controller’lar, Kubernetes API server’a yapılan isteklerin üzerinde çalışır. Bu istekler, işlenmeden önce (pre-admission) ve işlendikten sonra (post-admission) olmak üzere iki aşamada kontrol edilir. Böylece, Kubernetes cluster’ının güvenliği, performansı ve kaynak kullanımı optimize etmek ve iyileştirmek için elzemdir. İki tür Admission Controller vardır:
- Zorunlu Admission Controller’lar (Mandatory Admission Controllers): Bu controller’lar, Kubernetes tarafından varsayılan olarak etkinleştirilir ve kritik öneme sahiptir. Mesela,
NamespaceLifecycle
adında bir controller vardır ve bu, namespace’lerin yaşam döngüsünü yönetir. Yani, evinize gelen bir misafirin kim olduğunu anlamak gibi. - İsteğe Bağlı Admission Controller’lar (Optional Admission Controllers): Kullanıcılar tarafından ihtiyaca göre etkinleştirilebilir. Örneğin,
PodSecurityPolicy
, pod oluşturma ve güncelleme sırasında belirli güvenlik politikalarının uygulanmasını sağlar. Bu da, misafirin evin hangi odalarına girebileceğini belirlemek gibi düşünülebilir.
Neden Admission Controller Kullanılır?
Admission Controller’lar, Kubernetes cluster’ında birkaç önemli işlevi yerine getirir:
- Güvenliği artırır: Kötü niyetli veya yanlış yapılandırılmış kaynakların sisteme zarar vermesini önler. Düşünün, evinize giren her misafirin üstünü başını kontrol etmek gibi.
- Kaynakların doğru kullanımını sağlar: Kaynakların gereksiz yere israfını önleyerek, etkin bir kaynak yönetimi sunar. Bu da, evdeki yiyeceklerin boşa gitmemesi için belirli kurallar koymak gibi.
- Uyumluluk ve politika uygulamasına olanak tanır: Kuruluşun gereksinimlerine uygun şekilde kaynakların oluşturulmasını ve yönetilmesini sağlar. Bu, evde belirli bir düzen ve disiplin sağlamak gibi düşünülebilir.
Kubernetes Admission Controllers: Örnekler ve Detayları
1. NamespaceLifecycle
Namespace yaşam döngüsünü yönetir. Silinmekte olan bir namespace’e yeni nesnelerin eklenmesini engeller ve kullanılmayan namespace’lere bağlı kaynaklar varken bir namespace’in silinmesini önler. Bu, evde kullanılmayan bir odanın temiz ve düzenli kalmasını sağlamak gibidir.
2. LimitRanger
Bir namespace içerisinde oluşturulan pod, container veya persistent volume claims (PVC) gibi nesnelerin belirli sınırlar içinde kalmasını sağlar. Kaynak tüketiminin kontrollü bir şekilde yönetilmesini sağlar. Bu da, evdeki elektrik ve su kullanımını kontrol altında tutmak gibi düşünülebilir.
3. ResourceQuota
- Bir namespace’de kullanılabilecek toplam kaynak miktarını sınırlar. Kaynakların adil kullanımını sağlar. Bu, evdeki herkesin eşit miktarda yiyecek ve içecek almasını sağlamak gibidir.
4. PodSecurityPolicy
Pod oluşturulurken güvenlikle ilgili parametrelerin zorlanmasını sağlar. Güvenlik politikalarını uygular ve pod’ların güvenli bir şekilde çalışmasını sağlar. Bu, evde çocukların güvenliği için belirli kurallar koymak gibidir.
5. MutatingAdmissionWebhook ve ValidatingAdmissionWebhook
Kubernetes’in güvenlik ve yapılandırma ihtiyaçlarını karşılamaya yönelik iki önemli aracı olan MutatingAdmissionWebhook
ve ValidatingAdmissionWebhook
hakkında konuşalım. Bu iki webhook, Kubernetes’in özelleştirilmiş Admission Controller’lar oluşturmasına olanak tanır. Peki, bu tam olarak ne anlama geliyor? Gelin, daha insani bir dille ve örneklerle açıklayalım.
MutatingAdmissionWebhook: Bu webhook, nesneler üzerinde değişiklik yapılmadan önce çalışır ve bu nesneleri değiştirebilir. Örneğin, yeni bir misafirin evinize geldiğini düşünün. Misafir içeri girmeden önce, onu evin kurallarına uygun hale getirmek için bazı değişiklikler yaparsınız. Örneğin, ayakkabılarını çıkarmasını istersiniz ya da üzerine bir misafir terliği verirsiniz. İşte MutatingAdmissionWebhook da, Kubernetes’e gelen isteklerin, sistemde yer almadan önce belirli kurallara uygun hale getirilmesini sağlar.
ValidatingAdmissionWebhook: Bu webhook ise, nesneler API sunucusunda işlenmeden hemen önce çalışır ve geçerlilik kontrolü yapar. Misafirin eve girmesi için uygun olup olmadığını kontrol etmek gibi. Mesela, misafirin davetli olup olmadığını, doğru zamanda gelip gelmediğini ya da getirdiği hediyenin uygun olup olmadığını kontrol etmek gibi. ValidatingAdmissionWebhook da, Kubernetes’e gelen isteklerin belirlenen kurallara uygun olup olmadığını kontrol eder ve gerekli şartları sağlamayan istekleri reddeder.
Neden Önemlidir?
Bu webhook’lar, Kubernetes’in genişletilebilirliğini artırır ve kullanıcıların özel güvenlik ve yapılandırma ihtiyaçlarını karşılamalarına olanak tanır. Özelleştirilmiş kontroller ve politikalar uygulayarak daha güvenli ve uyumlu bir ortam sağlarlar.
Örneklerle Açıklayalım
NamespaceLifecycle ve LimitRanger Admission Controller’ları Etkinleştirme:
- NamespaceLifecycle, Kubernetes’teki namespace’lerin yaşam döngüsünü yönetir. Mesela, silinmekte olan bir namespace’e yeni nesnelerin eklenmesini engeller. Bu, evde kullanılmayan bir odaya yeni eşya getirilmesini engellemek gibi düşünülebilir.
- LimitRanger ise, bir namespace içinde oluşturulan pod, container veya persistent volume claims (PVC) gibi nesnelerin belirli sınırlar içinde kalmasını sağlar. Kaynak tüketiminin kontrollü bir şekilde yönetilmesini sağlar. Bu da, evdeki elektrik ve su kullanımını kontrol altında tutmak gibi düşünülebilir.
Admission Controller eklentilerini etkinleştirmek için aşağıdaki komut satırı kullanılabilir:
kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger
API Sunucusunda Değişikliklerin Uygulanması
Kubernetes API sunucusunda Admission Controller eklentilerini etkinleştirdiğinizde, bu değişikliklerin etkin olması için genellikle Kubernetes API sunucusunun yeniden başlatılması gerekir. Ancak, Kubernetes kümenizin nasıl dağıtıldığına ve API sunucusunun nasıl başlatıldığına bağlı olarak, ayarları farklı şekillerde uygulamanız gerekebilir.
Örneğin, API sunucusu bir systemd servisi olarak dağıtıldıysa, systemd birim dosyasını değiştirmeniz gerekebilir. Eğer Kubernetes kendi kendine barındırılan (self-hosted) bir şekilde dağıtıldıysa, API sunucusunun manifest dosyasını değiştirmeniz gerekebilir.
Kubernetes’in kendi kendine barındırılan (self-hosted) bir yapıda olduğu durumda, API sunucusu manifest dosyasını güncellemek için şu adımları takip edebilirsiniz:
- Kubernetes API sunucusunun mevcut manifest dosyasını bulun. Bu dosya genellikle
/etc/kubernetes/manifests/
dizininde yer alır vekube-apiserver.yaml
gibi bir isme sahip olabilir. - Manifest dosyasını düzenleyin. Admission Controller eklentilerini etkinleştirmek için
--enable-admission-plugins
bayrağını ekleyin. Örneğin, NamespaceLifecycle ve LimitRanger eklentilerini etkinleştirmek istiyorsanız, aşağıdaki gibi bir satır ekleyebilirsiniz:
spec:
containers:
- command:
- kube-apiserver
- --enable-admission-plugins=NamespaceLifecycle,LimitRanger
# Diğer bayraklar ve parametreler...
- Değişiklikleri kaydedin ve manifest dosyasını kapatın. Kubernetes’in bu değişiklikleri algılaması ve uygulaması için birkaç dakika bekleyin. Kubernetes, manifest dosyalarındaki değişiklikleri otomatik olarak algılar ve API sunucusunu yeniden başlatır. Yeniden başlatma işlemi, değişikliklerin etkili olması için gereklidir ve bu işlem sırasında küme kısa bir süreliğine kullanılamaz hale gelebilir. Ancak, bu işlem genellikle hızlı bir şekilde tamamlanır ve küme tekrar kullanılabilir hale gelir.
Önemi ve Geleceği
Kubernetes dünyasında güvenlik ve kaynak yönetimi her geçen gün daha fazla önem kazanmaktadır. Admission Controller’lar, Kubernetes cluster’larını güvenli ve verimli bir şekilde yönetmek için kritik araçlar olarak öne çıkmaktadır. Gelecekte, daha akıllı ve otomatikleştirilmiş Admission Controller’lar geliştirilerek, Kubernetes ekosisteminin daha da güçlendirilmesi beklenmektedir.
Sonuç
Kubernetes Admission Controller’lar, modern bulut altyapılarının vazgeçilmez bileşenlerindendir. Bu yapılar sayesinde, Kubernetes cluster’ları daha güvenli, yönetilebilir ve optimize edilmiş hale gelmektedir. Geliştiriciler ve sistem yöneticileri için, Admission Controller’ların doğru anlaşılması ve etkin şekilde kullanılması, Kubernetes ortamlarını daha güvenli ve stabil hale getirecektir.
Kaynaklar
- Kubernetes resmi dokümantasyonu: Kubernetes.io
- “Kubernetes Security” — Book by Liz Rice and Michael Hausenblas
Serideki Diğer Yazılar
- Kubernetes Security: Authentication
- Kubernetes Security: Authorization
- Kubernetes Security: Network Policies
- Kubernetes Security: Pod Security Policies
- Kubernetes Security: Secret Management
- Kubernetes Security: Service Accounts
- Kubernetes Security: Güvenli İletişim için TLS(Yakında…)
Buy Me A Coffee
Bana bir kahve ısmarlayarak destek olabilirsiniz.
https://www.buymeacoffee.com/barisakdas