müfettiş
Moderatör
- Katılım
- 20 Ocak 2024
- Mesajlar
- 325
- Tepkime puanı
- 1
- Puanları
- 18
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.
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.