Ayer a las 22:52
Primer mensaje
Günümüzde Docker ile bir uygulama katmanı kurarken veritabanını kapsayıcı içinde mi yoksa farklı bir hizmet olarak mı yönetmeli? Yetkilendirme ve erişim kontrolünü hangi katmanda (host, container, network) sağlamalıyız?
[lista]
Giriş: Dockerized bir uygulamada veritabanı erişimini güvenli kılmanın temel noktası, minimum ayrıcalık prensibini tüm katmanlarda uygulamaktır. Veritabanı kullanıcılarını ve rollerini konteyner dışı kimlik doğrulama akışlarıyla entegre etmek, konteyner seviyesindeki güvenliği destekler. Örneğin, uygulama container’ında çalıştırılan kodun veritabanına bağlanması için yalnızca gerekli OKK (operations, read, write, delete) izinlerini içeren özel kullanıcılar tanımlanır.
Kapsayıcı mı, yoksa harici mi?: Küçük ekipler için hızlı devreye alma amacıyla kapsayıcı içinde bir veritabanı çalıştırmak cazip olabilir. Ancak üretimde, veritabanını ayrı bir hizmet olarak çalıştırmak ve ağ politikaları ile erişim sertifikalarını merkezi bir yerde yönetmek güvenliği artırır. Harici veritabanı hizmeti ile ortak bir kimlik sağlayıcısına (OIDC, LDAP) bağlanmak, otomatik kullanıcı yaşam döngüsü ve anahtar yönetimini kolaylaştırır.
Ağ güvenliği ve izolasyon: Docker ağlarını, veritabanı container’ını sadece uygulama container’ına özel bir hizmet olarak izole etmek gerekir. Ayrıca docker-compose veya Kubernetes ile istikrarlı DNS ve network policies kullanımı, yatay ölçeklenmenin veritabanı erişimini bozmadan güvenli şekilde ilerlemesini sağlar.
Kimlik doğrulama ve yetkilendirme: Veritabanı kullanıcılarını rollerle tanımlayın. Uygulama container’ına yalnızca gerekli veritabanı kullanıcı adı/şifrelerini çevrim içi güvenli biçimde iletmek için seviye-irdelenecek mekanizmalar kullanın (ör. Secrets yönetimi, environment yerine dosya tabanlı Secrets). Rotasyon politikaları belirleyin ve anahtar tabanlı kimlik doğrulamasını destekleyin.
Saha uygulamaları ve denetim: Kayıtlar (audit) ve logging, hangi kullanıcıların hangi sorguları ne zaman çalıştırdığını takip etmek için kritik. Veritabanı seviyesinde ıslak imzalı loglar, schema değişiklik auditleri ve erişim denetim tabloları, güvenlik olaylarını hızlı tespit etmeye yardımcı olur.
Güvenlik maruziyeti: Şifreler, API anahtarları, TLS sertifikaları gibi hassas bilgiler konteyner dışı bir Secrets yöneticisinde saklanmalı ve container’lar bu bilgilere yalnızca çalışma zamanında erişmelidir. TLS ile hem uygulama konteyneri hem veritabanı için uçtan uca şifreleme kurun.
Gözlemlenebilirlik: Veritabanı performans ve güvenlik metriklerini merkezi bir izleme sistemine akış halinde toplayın. Sorgu süreleri, kilit bekleme süreleri ve bağlantı hataları gibi metrikler kapasite planlaması ve güvenlik olaylarının tespiti için vazgeçilmezdir.
[/list]
Bu konuyu kendi ortamınıza uyarlarken şu soruları tartışalım: Docker’da veritabanını kapsayıcıda mı yoksa harici olarak mı kullanıyorsunuz? Yetkilendirme politikalarını hangi araçlarla yönetiyorsunuz? Secrets yönetimi konusunda hangi akışlar ve güvenlik önlemleri en çok işinize yarıyor? Sizce en güvenli uygulama mimarisi nasıl bir model önerir? Deneyimlerinizi ve kurduğunuz güvenlik tedbirlerini paylaşır mısınız?