Kubernetes Secrets mi ConfigMap mi: Yapılandırma Yönetiminde Doğru Sınır

Kubernetes'te yapılandırma yönetimi konusunda en sık yapılan hata, her şifreli olması gereken veriyi Secrets'a, her açık veriyi ConfigMap'e koymaktır. Gerçek sınır bu değil.

Kubernetes dokümantasyonu Secrets'ı "hassas veriler" için, ConfigMap'i "genel yapılandırma" için önerir. Çoğu mühendis bunu harfi harfine alır ve sonuç olarak veritabanı şifreleri, API anahtarları, sertifikalar hepsi Secrets'a gider. Doğru mu? Teknik olarak evet, pratik olarak hayır.

Gerçek problem şu: Secrets varsayılan olarak Base64 ile kodlanır, şifrelenmez. etcd'de depolanırken bile. Yani bir saldırgan cluster'a erişirse Secrets'lar çıkarmak ConfigMap kadar kolay. Bu yüzden Secrets güvenliği, şifreleme katmanı (encryption at rest) olmadan sahte bir güvenlik hissidir.

Ayrımı şu şekilde yapmalısın:

ConfigMap: Uygulama ayarları, ortam değişkenleri, konfigürasyon dosyaları. Örneğin log seviyesi, veritabanı host adresi (şifre değil), timezone, feature flag'ler. Bunlar değiştirilse pod restart olmadan hot-reload yapılabilir.

Secrets: Sadece ve sadece şu üç durum: (1) Encryption at rest etkinleştirilmiş cluster'larda şifreli depolama istiyorsan, (2) Secret rotation ve audit logging yapacaksan, (3) External secret manager (Vault, AWS Secrets Manager) entegrasyonu planlıyorsan.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

Eğer hiçbiri yoksa, Secrets'ın ConfigMap'ten farkı sadece Base64 wrap'i olur. Güvenlik açısından değil.

DB host'u: ConfigMap. Çünkü `db.example.com` açık olsun, kimse buna saldıramaz.

DB şifresi: Secrets, ama sadece etcd encryption etkinse veya Vault'a bağlıysan. Aksi halde ConfigMap ile aynı güvenlik seviyesi, fakat Secrets'ın yönetim yükü vardır.

API anahtarı: Secrets'a koy, ama sonrasında rotation mekanizması kur. Aksi halde statik bir string olarak kalır.

Ekstra Secrets kullanımı, pod deployment'ında gecikme yaratır. Secret volume mount'u ConfigMap'ten biraz daha yavaştır. Binlerce pod'a sahip büyük cluster'larda bu fark görünür. Ayrıca RBAC kuralları karmaşıklaşır. Her Secret için ayrı izin tanımlamak gerekir.

Kubernetes Secrets'ı "güvenli depo" olarak görme. O bir etiket, bir güvenlik mekanizması değil. Gerçek güvenlik encryption at rest, RBAC, network policy ve regular audit'ten gelir. Secrets ve ConfigMap arasındaki seçim, teknik güvenlikten ziyade operasyonel yönetim sorusudur: Bu veriyi sık değiştirecek misin? Harici sistem ile senkronize edecek misin? Audit trail tutacak mısın? Cevaplar "evet" ise Secrets kullan. "Hayır" ise ConfigMap yeterli.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz