Kubernetes Security: Secrets Management

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

Secrets Nedir ve Neden Önemlidir?

Kubernetes’te “Secret” terimi, hassas bilgileri (şifreler, tokenlar, API anahtarları vb.) depolamak için kullanılan bir mekanizmayı ifade eder. Bu bilgiler, uygulamalarınızın çalışması için gereklidir ancak yanlış ellerde ciddi güvenlik risklerine yol açabilir. Örneğin, bir veritabanı şifresinin açıkta kalması, tüm veritabanı bilgilerinizin çalınmasına neden olabilir. Bu yüzden, bu tür bilgilerin güvenli bir şekilde saklanması kritik önem taşır.

Secrets Nasıl Yönetilir?

Secrets yönetimi, Kubernetes’te birkaç adımla gerçekleştirilir. Öncelikle, bir Secret oluşturulur ve daha sonra bu Secret, ilgili podlara enjekte edilir. Örneğin, bir uygulamanın bir veritabanına erişebilmesi için gerekli olan kullanıcı adı ve şifreyi bir Secret içinde saklayabiliriz. Daha açıklayıcı olması adına secret oluşturmak eviniz için bir anahtar oluşturmak gibi düşünebilirsiniz. Bu anahtarları evinize girmesini istediğinin kişilere (podlara) göstererek istediklerinde içeri girmelerini sağlayabilirsiniz.

Adım 1: Secret Oluşturma

İlk adım, secret oluşturmaktır. Bunu, kubectl komut satırı aracını kullanarak yapabilirsiniz. Örneğin, bir veritabanı şifresi için secret oluşturmak istiyorsanız:

kubectl create secret generic db-password --from-literal=password=mysecretpassword

Bu komut, db-password adında bir secret oluşturur ve bu secret içinde password=mysecretpassword bilgisini saklar. Bu, tıpkı evinizin anahtarını güvenli bir kasaya koymak gibidir.

2. Secret’ı Pod’a Enjekte Etme

Secret’ı oluşturduktan sonra, bu bilgiyi pod’larınıza enjekte etmeniz gerekir. Bu, pod’larınıza anahtarı kullanarak evinize girmelerini sağlamak gibi düşünülebilir. Pod’larınıza secret’ı enjekte etmek için, pod tanım dosyasını düzenleyebilirsiniz:

apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: myimage
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-password
key: password

Bu örnekte, mypod adında bir pod oluşturulur ve bu pod'un içindeki konteyner, DB_PASSWORD ortam değişkeni aracılığıyla secret bilgisini alır.

Güvenlik İpuçları

Secrets yönetimi yaparken dikkat edilmesi gereken birkaç önemli nokta vardır:

  1. RBAC Kullanımı: Kubernetes’te Role-Based Access Control (RBAC) kullanarak, kimlerin hangi secret’lara erişebileceğini kontrol edin. Bu, komşularınızın evinize izinsiz girmesini engellemek gibidir.
  2. Encryption: Secrets’ları vs. düz metin olarak saklamayın. Kubernetes, secrets’ları otomatik olarak şifreleyebilir. Bu, anahtarlarınızı kasa içinde bir kez daha şifrelemek gibidir.
  3. Least Privilege: Uygulamalarınıza sadece ihtiyaç duydukları secret’ları verin. Bu, komşularınıza sadece belirli odalara erişim izni vermek gibidir.
  4. Rotation: Secret bilgilerini düzenli aralıklarla değiştirin. Bu, evinizin kilidini zaman zaman değiştirerek güvenliği artırmak gibidir.

Sonuç

Kubernetes’te secrets yönetimi, hassas bilgilerin güvenli bir şekilde saklanması ve kullanılması açısından kritik bir öneme sahiptir. Bu yazıda, secrets yönetimi nasıl yapılır ve nelere dikkat edilmelidir konularını ele aldık. Umuyoruz ki bu bilgiler, Kubernetes güvenliğinizi artırmanıza yardımcı olur.

Eğer daha fazla bilgiye ihtiyaç duyarsanız, Kubernetes dokümantasyonlarına göz atabilir veya konuyla ilgili eğitimlere katılabilirsiniz. Güvenli ve başarılı bir Kubernetes yönetimi dileriz!

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