Kubernetes Security: Network Policies

Baris Akdas
5 min readJun 19, 2024

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;

  1. 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.
  2. 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.
  3. 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.
  4. 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 :)
  5. 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.
  6. 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.
  7. 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.
  8. 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.

Network Policies Nedir?

Kubernetes ortamında, pod’lar birbirleriyle iletişim kurar ve veri alışverişinde bulunurlar. Ancak bu iletişimin kontrolsüz olması, güvenlik açıklarına yol açabilir. İşte burada Network Policies devreye girer. Network Policies, pod’lar arasındaki ağ trafiğini kontrol eden ve güvenli hale getiren kurallar kümesidir. Yani, kim kiminle konuşabilir, hangi veri nereden nereye gidebilir gibi konularda sınırlar koymamıza yardımcı olur. Bunu, evinizdeki odalar arasında kapılar ve geçiş kuralları koymak gibi düşünebilirsiniz.

Neden Network Policies Kullanılır?

Ağ politikaları kullanmak, Kubernetes ortamınızda güvenliği ve düzeni sağlamak için kritik bir adımdır. Düşünsenize, evinizde her odanın birbirine açık olduğunu ve herkesin her yere serbestçe girip çıkabildiğini; bu durum zamanla karmaşaya ve güvenlik açıklarına yol açar. İşte ağ politikaları da bu durumu engellemek için kullanılır. Yani, komşularınızın ve misafirlerinizin hangi odalara girebileceğini ve nereye erişimlerinin olduğunu belirlemek gibi düşünebilirsiniz.

Network Policies’in Temel Bileşenleri

Network Policies, Kubernetes üzerinde uygulanabilir çeşitli kurallardan oluşur. Bu kurallar, belirli pod’ların hangi ağ trafiğine izin vereceğini veya engelleyeceğini belirtir. Ana bileşenler şunlardır:

  • Pod Selector (Pod Seçici): Hangi pod’ların bu politika ile ilişkilendirileceğini belirler. Yani, hangi dairelerin bu kurallara tabi olacağını gösterir.
  • Ingress (Gelen Trafik): Hangi pod’ların belirli pod’lara veri gönderebileceğini tanımlar. Yani, hangi komşuların hangi dairelere girebileceğini belirtir.
  • Egress (Giden Trafik): Hangi pod’ların dışarıya veri gönderebileceğini tanımlar. Yani, hangi dairelerin dışarıya mesaj gönderebileceğini kontrol eder.
  • Policy Types (Politika Türleri): Politikaların gelen, giden veya her iki trafik türünü de kapsayıp kapsamadığını belirtir.

Örnek Bir Network Policy

Diyelim ki, bir alışveriş sitesi geliştirdiniz ve kullanıcı bilgilerini yöneten bir “user-service” pod’unuz var. Bu pod’un sadece “frontend” pod’undan gelen trafiği kabul etmesini ve dışarıya hiçbir veri göndermemesini istiyorsunuz. Bu durumu, apartmanınızda kullanıcı bilgilerini içeren bir dairenin sadece belirli bir komşudan (frontend) gelen ziyaretçileri kabul etmesine benzetebiliriz.

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-user-service
namespace: ecommerce
spec:
podSelector:
matchLabels:
app: user-service
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
egress: []

Bu örnekte, “user-service” pod’u (daire) sadece “frontend” pod’undan (komşudan) gelen trafiği (ziyaretçileri) kabul edecek ve dışarıya hiçbir veri göndermeyecek şekilde yapılandırılmıştır. Yani, kullanıcı bilgilerini yöneten daire sadece belirli bir komşudan gelen ziyaretçileri kabul ederken, dışarıya bilgi sızdırmaz.

Network Policies ile İlgili İpuçları

  1. Minimum Gerekli Erişim: Ağ politikalarını oluştururken, minimum gerekli erişimi sağlayacak şekilde tasarlayın. Yani, sadece gerekli olan trafiğe izin verin. Bu, apartmanınızda her dairenin sadece ihtiyacı olan ziyaretçileri kabul etmesi gibi düşünülebilir.
  2. Düzenli Kontroller: Ağ politikalarınızı düzenli olarak gözden geçirin ve güncelleyin. Güvenlik gereksinimleriniz zamanla değişebilir. Apartmanınızda kuralları düzenli olarak gözden geçirip güncellemek gibi.
  3. Test Ortamında Deneme: Ağ politikalarını üretim ortamına geçirmeden önce test ortamında deneyin. Bu, istenmeyen kesintilerin önüne geçer. Apartmanınızda yeni kuralları uygulamadan önce küçük çaplı denemeler yapmak gibi.

Sonuç

Network Policies, Kubernetes ortamınızda güvenliği sağlamak için vazgeçilmez bir araçtır. Doğru yapılandırılmış ağ politikaları ile pod’lar arasındaki trafiği kontrol edebilir, izinsiz erişimleri engelleyebilir ve genel güvenlik seviyenizi artırabilirsiniz. Tıpkı apartmanınızdaki daireler arasında kurallar koyarak düzeni sağlamak gibi, Kubernetes’te de ağ politikaları ile güvenli ve düzenli bir ortam oluşturabilirsiniz.

Kaynaklar

  • Kubernetes resmi dokümantasyonu (Network Policies): Kubernetes.io — Network Policies
  • “Kubernetes Up & Running” — Kelsey Hightower, Brendan Burns, Joe Beda

Serideki Diğer Yazılar

Buy Me A Coffee

Bana bir kahve ısmarlayarak destek olabilirsiniz.
https://www.buymeacoffee.com/barisakdas

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Baris Akdas
Baris Akdas

No responses yet

Write a response