Kubernetes Security: Güvenli İletişim için TLS

Baris Akdas
5 min readJun 29, 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.

Güvenli İletişim için TLS

Güvenli iletişim, Kubernetes’te temel bir gereksinimdir ve bu iletişimin sağlanmasında TLS (Transport Layer Security) kritik bir rol oynar. Bu makalede, Kubernetes ortamında TLS ile güvenli iletişimi nasıl sağlayabileceğinizi detaylı bir şekilde ele alacağız.

TLS Nedir?

Öncelikle, TLS’in ne olduğunu kısaca açıklayalım. TLS, ağ üzerinden iletilen verilerin güvenliğini sağlamak için kullanılan bir kriptografik protokoldür. TLS, verilerin şifrelenmesini ve iki taraf arasında kimlik doğrulamasını sağlar. Bunu, posta kutusuna atılan mektupların sadece doğru anahtara sahip kişi tarafından açılabilmesi gibi düşünebilirsiniz.

Kubernetes’te TLS’in Önemi

Kubernetes, mikro hizmetlerin ve uygulamaların yönetimi için kullanıldığında, bu hizmetler arasındaki iletişimin güvenliği kritik hale gelir. Bu iletişimde veri sızıntılarını ve saldırıları önlemek için TLS kullanımı şarttır. Örneğin, bir müşteri veritabanına erişen bir mikro hizmetin, bu verileri güvenli bir şekilde alması ve göndermesi gerekir.

Kubernetes’te TLS Nasıl Yapılandırılır?

1. TLS Sertifikalarının Oluşturulması

TLS sertifikaları, güvenli iletişimin temel taşıdır. Kubernetes’te TLS sertifikaları oluşturmanın en yaygın yollarından biri, openssl komutunu kullanmaktır. Örneğin, bir sunucu ve istemci sertifikası oluşturmak için şu adımları izleyebilirsiniz:

openssl genrsa -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -in server.csr -signkey server.key -out server.crtb

Bu komutlar, bir sunucu anahtarı (server.key), bir sertifika imzalama isteği (server.csr) ve bir sunucu sertifikası (server.crt) oluşturur. Bu sertifikaları evinizin kapı kilitleri gibi düşünebilirsiniz; doğru anahtarı olanlar içeri girebilir.

2. TLS Sertifikalarını Kubernetes Secrets ile Yönetmek

Oluşturduğunuz TLS sertifikalarını Kubernetes secrets ile yönetebilirsiniz. Bu, anahtar ve sertifikalarınızı Kubernetes ortamında güvenli bir şekilde saklamanızı sağlar. Aşağıdaki komut, bir TLS secret oluşturur:

kubectl create secret tls my-tls-secret --cert=server.crt --key=server.key

Bu komut, my-tls-secret adında bir TLS secret oluşturur ve bu secret içinde sertifika ve anahtar bilgilerini saklar. Bu, anahtarınızı güvenli bir kasada saklamak gibidir.

3. TLS Sertifikalarını Pod’larda Kullanmak

TLS sertifikalarını pod’larınızda kullanmak için, pod tanım dosyasında bu secret’ı referans gösterebilirsiniz. Örneğin:

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage
volumeMounts:
- name: tls-secret
mountPath: "/etc/tls"
readOnly: true
volumes:
- name: tls-secret
secret:
secretName: my-tls-secret

Bu tanımda, mypod pod'u, mycontainer konteyneri içinde TLS secret'ını /etc/tls dizinine monte eder. Bu, konteynerinizin TLS sertifikalarını kullanarak güvenli iletişim kurmasını sağlar.

İleri Seviye TLS Yapılandırmaları

Mutual TLS (mTLS)

Mutual TLS, hem sunucunun hem de istemcinin birbirini doğrulamasını sağlar. Bu, her iki tarafın da güvenilir olduğunu garantiler. Mutual TLS’i etkinleştirmek için hem sunucu hem de istemci sertifikalarını ve anahtarlarını doğru şekilde yapılandırmanız gerekir. Bu, hem sizin hem de komşunuzun kapılarının birbirine uyumlu anahtarlarla açılabilmesi gibidir.

Sertifika Yönetimi

Sertifikaların geçerlilik sürelerini yönetmek önemlidir. Sertifikalarınızı düzenli olarak yenilemeli ve eski sertifikaları geçersiz kılmalısınız. Kubernetes’te sertifika yönetimi için cert-manager gibi araçlar kullanabilirsiniz. Bu araçlar, sertifikalarınızı otomatik olarak yenileyebilir ve yönetebilir.

Sonuç

Kubernetes’te güvenli iletişim sağlamak için TLS kullanımı oldukça önemlidir. Bu yazıda, TLS sertifikalarının nasıl oluşturulacağını, Kubernetes’te nasıl yönetileceğini ve pod’larda nasıl kullanılacağını detaylı bir şekilde ele aldık. Ayrıca, mutual TLS ve sertifika yönetimi gibi ileri seviye konulara da değindik. Güvenli bir Kubernetes ortamı oluşturmak için bu adımları takip edebilir ve uygulamalarınızın güvenliğini artırabilirsiniz.

Kaynaklar

Serideki Diğer Yazılar

Buy Me A Coffee

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

--

--

Baris Akdas
Baris Akdas

No responses yet