Kubernetes Security: Service Account
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ği: Servis Hesapları
Bu makalede, Kubernetes’te servis hesaplarının ne olduğu, nasıl oluşturulup yönetildiği ve güvenliğin nasıl sağlanacağı konularını ele alacağız.
Servis Hesapları Nedir?
Servis hesapları, Kubernetes’teki pod’ların API sunucusuyla iletişim kurmasına ve diğer Kubernetes kaynaklarına erişmesine olanak tanır. Bir anlamda, servis hesapları pod’ların kimlik bilgilerini sağlar. Bunu, evinizdeki elektronik cihazların internet bağlantısı kurmak için Wi-Fi şifresine ihtiyaç duyması gibi düşünebilirsiniz.
Neden Servis Hesaplarına İhtiyaç Duyarız?
Varsayılan olarak, Kubernetes’teki her pod bir servis hesabı kullanır. Ancak, tüm pod’ların aynı erişim düzeyine sahip olması güvenlik açısından riskli olabilir. Farklı uygulamaların ve mikro hizmetlerin farklı izinlere sahip olması gerekebilir. Örneğin, bir veritabanına erişen bir pod, yalnızca okuma iznine sahip olmalıdır, yazma iznine değil.
Servis Hesapları Nasıl Oluşturulur?
Kubernetes’te servis hesapları oluşturmak oldukça basittir. Aşağıdaki örnek, my-service-account
adında bir servis hesabı oluşturur:
apiVersion: v1
kind: ServiceAccount
metadata:
name: my-service-account
Bu YAML dosyasını kaydedip aşağıdaki komutla uygulayabilirsiniz:
kubectl apply -f my-service-account.yaml
Bu, tıpkı evinizde yeni bir Wi-Fi ağı oluşturmak ve bu ağa özel bir şifre atamak gibidir.
Servis Hesaplarını Pod’larda Kullanmak
Oluşturduğunuz servis hesabını bir pod’da kullanmak için pod tanım dosyasını düzenlemeniz yeterlidir. Örneğin:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
serviceAccountName: my-service-account
containers:
- name: mycontainer
image: myimage
Bu tanımda, mypod
adındaki pod, my-service-account
servis hesabını kullanır. Bu, pod'un API sunucusuyla güvenli bir şekilde iletişim kurmasını sağlar. Aynı zamanda bu, evdeki belirli bir cihazın sadece belirli bir Wi-Fi ağına bağlanabilmesi gibidir.
Servis Hesapları ve RBAC
Servis hesapları, Role-Based Access Control (RBAC) ile birlikte kullanıldığında çok daha güçlü ve esnek hale gelir. RBAC, kimlerin hangi kaynaklara erişebileceğini ve hangi işlemleri gerçekleştirebileceğini kontrol etmenizi sağlar. Örneğin, aşağıdaki RBAC tanımı, my-service-account
servis hesabına sadece belirli bir izin seti verir:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: read-only-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-only-binding
namespace: default
subjects:
- kind: ServiceAccount
name: my-service-account
namespace: default
roleRef:
kind: Role
name: read-only-role
apiGroup: rbac.authorization.k8s.io
Bu tanım, my-service-account
servis hesabına sadece pod'ları listeleme ve alma izni verir. Bu, bir evdeki belirli bir cihaza sadece interneti kullanma izni vermek gibidir, cihazın ayarlarını değiştirme izni değil.
Güvenlik İpuçları
Servis hesapları ve RBAC kullanırken dikkat edilmesi gereken bazı güvenlik ipuçları şunlardır:
- Least Privilege: Servis hesaplarına sadece ihtiyaç duydukları izinleri verin. Bu, gereksiz erişim ve potansiyel güvenlik açıklarını minimize eder.
- Role Binding: Rolleri ve rol bağlamalarını (role bindings) dikkatlice yönetin. Yanlış rol bağlamaları, istem dışı erişimlere neden olabilir.
- İzleme ve Kayıt: Servis hesaplarının ve ilgili RBAC politikalarının kullanımını izleyin ve kaydedin. Bu, potansiyel güvenlik ihlallerini hızlıca tespit etmenizi sağlar.
Sonuç
Kubernetes’te servis hesapları, pod’ların güvenli bir şekilde API sunucusuyla iletişim kurmasını ve kaynaklara erişimini sağlar. Bu yazıda, servis hesaplarının nasıl oluşturulup yönetileceğini ve güvenliğin nasıl sağlanacağını detaylı bir şekilde ele aldık. Ayrıca, RBAC ile birlikte kullanıldığında servis hesaplarının nasıl daha güvenli hale getirileceğine değindik. Güvenli ve başarılı bir Kubernetes yönetimi dileriz!
Kaynaklar
- Kubernetes Resmi Dokümantasyonu: Service Accounts
- CNCF Blog: Kubernetes Security
Serideki Diğer Yazılar
- Kubernetes Security: Authentication
- Kubernetes Security: Authorization
- Kubernetes Security: Admission Controller
- Kubernetes Security: Network Policies
- Kubernetes Security: Pod Security Policies
- Kubernetes Security: Secret Management
- Kubernetes Security: Güvenli İletişim için TLS
Buy Me A Coffee
Bana bir kahve ısmarlayarak destek olabilirsiniz.
https://www.buymeacoffee.com/barisakdas