QueryProxy

QueryProxy ve bastion sunucu ile paylaşılan parolalar

Çoğu ekip üretime bir atlama sunucusu, bir SSH tüneli ve parola yöneticisinden alınan bir kimlik bilgisiyle ulaşır. Ucuzdur, zaten kuruludur ve tam olarak tek bir şeyi denetler: veritabanına kimin ulaştığını.

Güncelleme:

Bir bakışta

KonuQueryProxybastion sunucu
Kimin bağlandığını denetlerEvet — takım ve bağlantı bazında yetkilerleEvet, iyi yaptığı iş budur
Ne çalıştığını denetlerHer ifade çalıştırılmadan önce parse edilir ve onaylanırHayır. Bağlantı kurulduktan sonra oturum mühendisindir
Kimlik bilgisinin açığa çıkmasıSunucuda şifreli; tarayıcıya ya da terminale hiç gönderilmezParola kasadan kopyalanır ve bir insan tarafından yapıştırılır
İkinci bir çift gözZorunlu — kendi talebini onaylamak engellenirEkranı izleyen biri yoksa yok
Sonuçtaki kişisel veriSonuçlar diske ulaşmadan akış içinde maskelenirSorguyu çalıştıran kişiye eksiksiz döner
Denetim iziTalep eden, onaylayan, ifade, süre, satır — değiştirilemezKabuk geçmişi ve veritabanının kaydetmeyi seçtiği kadarı
İşletme maliyetiBir konteyner ve bir işçiZaten kurulu, fiilen bedava

Neredeyse her ekip buradan başlar ve bunda utanılacak bir şey yoktur: bir atlama sunucusu, bir SSH tüneli ve parola yöneticisinde tutulan bir kimlik bilgisi. Zaten kuruludur ve hiçbir maliyeti yoktur. Neyi kapsayıp neyi kapsamadığı konusunda net olmakta fayda var.

Bastion’ın gerçekten yaptığı iş

Ağ yolunu denetler. Veritabanına ulaşmak önce atlama sunucusuna ulaşmayı, o da bir SSH anahtarını, o da adını koyabileceğiniz bir kişiyi gerektirir. Bu gerçek bir güvenlik önlemidir ve azımsanmamalıdır.

Nerede duruyor

Bastion’ın işi, bağlantı iletildiği anda biter. Ondan sonra oturum mühendisindir ve şu üç şey buradan çıkar:

Kimlik bilgisi artık bir kopyadır. Bir terminale yapıştırıldı. Kabuk geçmişinde, panoda, belki bir .pgpass dosyasında duruyor ve biri döndürene kadar geçerli kalıyor — ki bu da pratikte birisi işten ayrıldığında oluyor.

İfadeyi kimse incelemiyor. WHERE içermeyen bir DELETE FROM orders iyi biçimlendirilmiş bir sorgudur. Bastion onu bir SELECT kadar rahat iletir. Araçların bu konuda bir görüşü yoktur, çünkü SQL okumak hiçbir zaman onların işi olmadı.

Sonuç eksiksiz döner. Her e-posta adresi, her kart numarası, her telefon numarası bir dizüstü bilgisayardaki terminalde görüntülenir ve artık o bilgisayarın terminal geçmişindedir.

Bir onay portalıyla ne değişir

Kimlik bilgisi sunucudan hiç çıkmaz: QueryProxy onu AES-256 ile şifreli tutar ve geliştirici adına bağlanır; dolayısıyla yapıştırılacak ve sızdırılacak bir şey yoktur.

İfade çalışmadan önce parse edilir. WHERE’siz UPDATE ve DELETE doğrudan reddedilir, LIMIT’siz bir SELECT’e LIMIT eklenir ve yönetimsel ifadeler engellenir.

Bir başkasının onaylaması gerekir. Talep DBA kuyruğunda ve Onayla ile Reddet düğmeleri olan bir Slack kartı olarak görünür; kimse kendi talebini onaylayamaz.

Sonuç depolamaya akarken maskelenir, dolayısıyla maskesiz sürüm hiçbir yere yazılmaz; denetim günlüğü ise kimin istediğini, kimin onayladığını, ne çalıştığını, ne kadar sürdüğünü ve kaç satıra dokunduğunu kaydeder — eklenebilir ve okunabilir, asla güncellenemez.

Acil durum yolunu koruyun

Bunların hiçbiri bastion’ı silmeyi savunmaz. Bir olay sırasında gecenin üçünde mühendisin gerçek bir terminale ihtiyacı olur ve gönder-bekle döngüsü yanlış araçtır. O yolu koruyun, kullanımını bilinçli olarak zahmetli kılın ve kullanıldığında uyarı üretin. Amaç acil erişimin imkânsızlaşması değil — günlük erişimin acil durum kapısından geçmeyi bırakmasıdır.

Bunun yerine bastion sunucu seçmeniz gereken durumlar

  • Üretime DBA'den başka kimse dokunmuyorsa. Kimlik bilgisine sahip kişi aynı zamanda onaylayacak kişiyse, onay adımı hiçbir şey katmaz.
  • Olay müdahalesi için tam etkileşimli oturumlara ihtiyacınız varsa — gecenin üçünde gerçek bir terminalde psql — gönder-ve-bekle döngüsü aktif olarak zarar verir. Bunun için bir acil durum yolu bırakın.
  • Ekip yeterince küçük ve veri yeterince sıradansa, bu tören gerçekten riskten daha pahalıya gelebilir. Bu meşru bir cevaptır ve öyle değilmiş gibi yapmak yerine açıkça söylenmeye değer.

Sık sorulanlar

Bastion sunucu yeterli değil mi?
Cevapladığı soru için yeterli — veritabanına kimin ulaşabileceği. Diğerini cevaplayamaz. Bir bastion, ardından WHERE'siz bir UPDATE çalıştıracak mühendise bağlantıyı seve seve iletir ve günlükleri size sonradan neyin yok edildiğini değil, bir bağlantının açıldığını söyler.
QueryProxy kullanmak için bastion'ı kaldırmam gerekir mi?
Hayır. Çoğu ekip onu gerçek acil durumlar için kırılacak cam olarak tutar ve günlük erişimi QueryProxy üzerinden yürütür; böylece bastion kural değil istisna olur ve kullanıldığında göze çarpar.
Parola yöneticisindeki kimlik bilgileri ne olacak?
Bir kasa dağıtımı denetler, kullanımı değil. Kimlik bilgisi bir terminale yapıştırıldığı anda bir dizüstü bilgisayarda, bir kabuk geçmişinde ve bir panodadır; üstelik geçerliliğini korur. QueryProxy kimlik bilgisini hiç devretmez — şifreli tutar ve sorguyu geliştirici adına kendisi çalıştırır.
Bu sadece fazladan bürokrasi değil mi?
Üretime dokunan ifadelere ikinci bir çift göz demektir; kod incelemesinin bürokrasi olduğu anlamda bürokrasidir. Maliyeti bir bekleyiştir ve onaylar iki düğmeli bir Slack kartı olarak geldiği için bu bekleyiş pratikte genellikle kısadır.

Gezinmek için ok tuşları, açmak için Enter.