Birisi müşteriye bir PostgreSQL oturumu verilmesini öneriyor, böylece masraf talebi baştan sona şifreli olarak gitsin. Veritabanı yöneticisinin gerçek bir SQL oturumuna ihtiyacı var ve bir başkası bunun yerine bir web formu öneriyor. Her iki öneri de yanlış sorunu çözüyor, çünkü hiçbiri müşterinin gerçekte gerçekleştirdiği işlemden başlamadı. Üç kararı sırayla ele alın, TLS'in bir VPN'in yerini alıp alamayacağı sorusu kendiliğinden yanıtlanır.

Müşterinin ihtiyaç duyduğu işlemden başlayın

Müşterinin neyi başarması gerektiğini yazın. Talep göndermek, bir raporun tek satırını okumak ve anlık bir sorgu çalıştırmak, üç farklı risk profiline sahip üç farklı işlemdir.

Sonra isteği kimin yaptığını yazın. Müşteri, destek görevlisi ve yönetici aynı tabloya dokunsalar bile birbirlerinin yerine geçemez. Fark, müşterinin sorgu dilinin ne kadarını görmesi gerektiğini belirler.

Yanıt çifti arayüzü belirler. Sonrasındaki her şey uygulamadır ve şifreleme tartışmalarının çoğu aslında hangi arayüzün seçildiği tartışmasıdır.

Üç kontrol, üç karar

Kimliği doğrulanmış TLS bağlantıyı korur ve hangi TLS kimliklerinin kabul edileceğini belirler. Ağ girişi, hangi kaynakların dinleyiciye ulaşabileceğini belirler. Veritabanı yetkilendirmesi, bir rolün hangi nesneleri ve eylemleri kullanabileceğini belirler.

Hiçbiri diğerlerinin yerini almaz, tablo bunu açıkça gösterir.

ControlWhat it decidesWhat it leaves open
Authenticated TLSConnection protection and which TLS identities are acceptedWhich tables a database user may touch
Restricted network entryWhich sources reach the listenerWhether an authenticated user should run a given statement
Database authorizationWhich objects and actions a role may useWhether the connection arrived by an approved path

Başka bir satırı kaldırmadan önce güvendiğiniz satırı okuyun. Bu tasarımların çoğu bir kontrolün yapılandırılmak yerine varsayılması yüzünden başarısız olur.

Doğrudan SQL, veritabanı politikasını sorumlu tutar

Onaylanmış doğrudan bağlantıda hem hizmet kimliği doğrulamasını hem de amaçlanan erişim politikasını koruyun. TLS'i açmak şifreli bağlantıları kullanılabilir kılar; erişim yapılandırması hostssl girdileriyle bunu istemedikçe şifrelenmemiş olanları reddetmez.

Bu ayrımı şablonda değil, çalışan yapılandırmada kontrol etmeye değer. TLS sunan ve düz metni kabul eden bir sunucu, çoğu kişinin dağıttığını sandığı tasarım değildir. Erişim kurallarını okuyun ve hangi girdilerin bunu gerçekten gerektirdiğini görün. Bu tek kontrol, şifreleme yapabilen bir sunucuyu yalnızca şifrelenmiş olandan ayırır.

Yalnızca işin gerektirdiği ayrıcalıklara sahip rolleri kullanın ve sahipliği, devralınan üyeliği ve geniş verilmiş izinleri gözden geçirin. PostgreSQL ayrıcalık modeli, veritabanı nesneleri için yetki sınırıdır.

Bir VPN, veritabanı kimlik doğrulaması olmadan önce hangi cihazların hizmete ulaşacağını kısıtlayabilir ve bir erişim geçidi de benzer bir şey yapabilir. İkisi de açık bileşeni bakımda tutma, kimlik bilgilerini yönetme ve kaynak kullanımını sınırlama ihtiyacını ortadan kaldırmaz.

İstemci sertifikaları bir kimlik bilgisidir, ACL değil

Bir istemci sertifikası bağlantı anında bir koşul ekleyebilir. clientcert ayarı güvenilir bir sertifika ve daha katı modda sertifika adı ile veritabanı kullanıcısı arasında bir ilişki isteyebilir.

Bu daha güçlü bir kimlik bilgisidir. Bir yetkilendirme listesi değildir ve sunucuyu görünmez kılmaz, çünkü bağlantıyı kabul eden bileşen hâlâ ağ trafiğini ve bir el sıkışmayı işler. Bir sertifikayı erişim listesi olarak ele almak gerçek izinleri dokunulmadan bırakır. Ayrıca sertifika dağıtımını genişletme eğilimindedir, bu da sonraki sorunu yaratır.

Aşırı ayrıcalıklı bir role bağlı güçlü bir sertifika, iyi kimliği doğrulanmış bir yönetici üretir. Sertifikayı kutlamadan önce rolü kontrol edin.

Uyduğunda daha dar arayüzü seçin

Bir masraf talebi için talebi kabul eden, iş kurallarını uygulayan ve o kullanıcının izin verilen sonucunu döndüren bir uygulama uç noktası, işlemi genel bir SQL hesabından daha iyi temsil eder.

Uygulama sonra kendi kısıtlı veritabanı kimliğini kullanır ve müşteri sorgu dilini hiçbir zaman bir özellik olarak almaz. Bu, yanlış yapmanın daha az yolu olan daha küçük bir yüzeydir.

Bu bir tasarım seçeneğidir, uygulama kodunun otomatik olarak daha güvenli olduğu iddiası değildir. O kod çağıranlarını doğrulamak, her eylemi yetkilendirmek ve girdisini doğrulamak zorundadır ve kendi veritabanı izinleri hâlâ önemlidir.

Doğrudan SQL, onaylanmış işi bunu gerektiren insanlar ve araçlar için doğru kalmaya devam eder. Bu tasarımı roller, ağ kapsamı ve operasyonel sınırlarla koşullandırın ve diğer istemcilerin daha dar arayüzü korumasına izin verin. İki grubu tek bir rolde karıştırmak tartışmaların başladığı yerdir.

İlgili makaleler