Kubernetes Güvenliği: RBAC (Rol Tabanlı Erişim Kontrolü) Rehberi

müfettiş

Moderatör
Katılım
20 Ocak 2024
Mesajlar
325
Tepkime puanı
1
Puanları
18

images.jpg

Kubernetes Güvenliği: RBAC (Rol Tabanlı Erişim Kontrolü) Rehberi​


Giriş: Herkes "Admin" Olamaz​

Kubernetes (K8s) kurulumunu yaptınız ve geliştiricilere erişim verdiniz. Eğer varsayılan ayarları kullanıyorsanız, bir geliştirici yanlışlıkla kubectl delete namespace production komutunu çalıştırabilir ve tüm şirketi durdurabilir.

Kubernetes'te yetkilendirme (Authorization) için endüstri standardı RBAC (Role-Based Access Control) sistemidir. RBAC, "Kim, Nereye, Ne Yapabilir?" sorusunu matematiksel bir kesinlikle yanıtlar. Güvenli bir küme için RBAC bir seçenek değil, zorunluluktur.

RBAC'ın 4 Temel Bileşeni​

RBAC yapısını anlamak için şu 4 nesneyi bilmelisiniz:

1. Role ve ClusterRole (İzinler)​

Bunlar sadece birer "Kural Listesi"dir. Kimseye atanmamışlardır, sadece yetki tanımıdırlar.

  • Role: Belirli bir Namespace (örn: dev-ortami) içinde geçerlidir.
  • ClusterRole: Tüm küme genelinde (örn: Node'ları listeleme) geçerlidir.
Örnek Role: "Podları okuyabilirsin (get, list, watch) ama silemezsin."

2. RoleBinding ve ClusterRoleBinding (Atamalar)​

Bunlar, yukarıdaki kuralları (Role) bir kullanıcıya veya gruba (User/Group) bağlayan "Kelepçe"lerdir.
  • RoleBinding: "Ahmet kullanıcısına, dev-ortami namespace'inde Developer-Role yetkisini ver."

ServiceAccount: Robotların Kimliği​

Sadece insanlar değil, Podların içindeki uygulamalar da K8s API ile konuşmak isteyebilir (Örneğin: Jenkins, Prometheus).Uygulamalara verilen kimliğe ServiceAccount denir.
  • Kural: Varsayılan (default) ServiceAccount'a asla geniş yetkiler vermeyin. Her uygulama için özel bir ServiceAccount oluşturun ve ona sadece ihtiyacı olan yetkiyi (Least Privilege) bağlayın.

Örnek Senaryo: "Sadece Log Okuyabilen Kullanıcı"​

Geliştiricilerin Podları silmesini istemiyoruz, sadece loglara baksınlar istiyoruz.

Adım 1: Role Oluşturma (log-reader.yaml)

YAML:
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: production
  name: log-reader
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list"]


Adım 2: Binding Oluşturma

YAML:
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: read-logs-binding
  namespace: production
subjects:
- kind: User
  name: ahmet  # Sertifikadaki CN ismi
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: log-reader
  apiGroup: rbac.authorization.k8s.io

Artık Ahmet kubectl delete pod derse, "Forbidden" hatası alır.

Sonuç​

RBAC, Kubernetes güvenliğinin temel taşıdır. Saldırganlar bir Pod'u ele geçirse bile, eğer o Pod'un ServiceAccount yetkileri kısıtlıysa, saldırı diğer Node'lara sıçrayamaz. "En Az Yetki Prensibi"ni (Principle of Least Privilege) her zaman uygulayın.
 
Geri
Üst