İçeriğe geç
Geliştirme dokümantasyonu
Bu belgeler Keydra'nın geliştirilmekte olan hâlini anlatır; yayımlanmış bir sürüm değildir. Anlatılanlar bir sürüm çıkana kadar değişebilir.

Mimari

İki program ve tek bir imaj: kimlik bilgilerinizi tutan, sunucularınızla RESP konuşan bir Quarkus arka ucu ve onun sunduğu bir PatternFly arayüzü.

Keydra neyden oluşur#

Keydra iki programdan ve tek bir imajdan oluşur. Tarayıcı yalnızca arka uçla konuşur; sunucularınızla konuşan arka uçtur.

text
  Tarayıcı
     │  HTTPS ve tek bir WebSocket
     ▼
  Keydra arka ucu  ── PostgreSQL   profiller, hesaplar, yetkiler, zamanlanmış işler, denetim
   (Quarkus)       ── Redis/Valkey (isteğe bağlı) paylaşılan önbellek, örnekler arası olaylar
     │             ── ClickHouse   (isteğe bağlı) kalıcı ölçüm kaydı
     │  RESP; gerekirse SSH tüneli üzerinden
     ▼
  Redis / Valkey hedefleri
Ön uç

React ve PatternFly ile yazılmıştır. Statik dosyalar hâlinde derlenir ve arka uç tarafından sunulur. Bu yüzden kurulum tek bir süreçtir ve arayüze API adresini ayrıca bildirmek gerekmez.

Arka uç

Bir Quarkus uygulamasıdır. HTTP katmanından veritabanına ve hedefe kadar hiçbir noktada iş parçacığı bloklanmaz. Tek bir sürecin, bir milyon anahtarlık taramayı aynı anda birden çok tarayıcıya akıtabilmesinin nedeni budur.

Keydra’nın kendi deposu

PostgreSQL, Keydra’nın kendi verisini tutar: bağlantı profilleri, hesaplar, yetkiler, zamanlanmış işler ve çalışma kayıtları, uyarı kuralları, denetim kayıtları. Hedeflerinizdeki anahtarlar buraya kopyalanmaz.

İki API yüzeyi#

/graphql üzerinde GraphQL

Arayüz, okuduğu ve değiştirdiği hemen her şeyi buradan ister.

/api/v1 altında REST

Sürüm numarasını yolunda taşıyan eksiksiz yüzey. Bir betik ya da başka bir araç bu yüzeye göre yazılır. Arayüz de dosya alışverişi, değer okuma ve yazma, oturum açma ve soketler için hâlâ bunu kullanır.

Her ikisi de aynı servisleri çağırır ve aynı izinlerle korunur. Ayrıntılar için bkz. API referansı.

Arayüz yoklama yapmadan nasıl güncel kalır#

/api/v1/notifications adresindeki tek bir WebSocket, sunucu tarafındaki her değişikliği taşır: bir hedefin ayağa kalkması ya da düşmesi, anahtarların değişmesi, yeni bir ölçüm okuması, bir göç işinin ilerlemesi, başarısız olan bir zamanlanmış iş. Arayüz bu soketi bir kez açar, sayfaların hepsi onu dinler.

Birden çok Keydra örneği aynı depoyu paylaşıyorsa her örnek, diğerlerinin yayımladığı olayları kendi soketlerine iletir. Böylece bir örnekte yapılan değişiklik, başka bir örneğe bağlı tarayıcıya da ulaşır.

Keydra neyi saklar, neyi korur#

Keydra üç tür veri tutar ve her birine farklı davranır.

Kimlik bilgileri

Hedef parolaları, SSH anahtarları ve anahtar parolaları, kimlik sağlayıcı istemci sırları, yedek hedefi kimlik bilgileri, sohbet belirteçleri. Hepsi örnek anahtarıyla AES-256-GCM kullanılarak şifreli saklanır ve hiçbir API bunları geri döndürmez. Parola alanı boş gelen bir düzenleme formu, kayıtlı parolayı silmez; olduğu gibi bırakır.

Hesap parolaları

Argon2id ile özetlenir. Doğrulama bir işçi iş parçacığında yapılır; böylece bilinçli olarak yavaş tutulan özetleme bir olay döngüsünü meşgul etmez. Özetten parolaya geri dönülemez — Keydra da dönemez.

Diğer veriler

Adlar, adresler, notlar, denetim günlüğü, zamanlanmış iş ayarları. Yazıldığı gibi saklanır. Bunlar için sütun bazlı şifreleme bilinçli olarak tercih edilmedi: verileri aranamaz hâle getirir, veritabanını zaten okuyabilen birine karşı ise koruma sağlamaz.

Önemli:Örnek anahtarı

KEYDRA_SECRET_KEY, saklanan bütün kimlik bilgilerini şifreleyen anahtardır. Kaybederseniz hepsini yeniden girmeniz gerekir. Anahtar, hizmet kesintisi olmadan değiştirilebilir — bkz. Örnek anahtarını değiştirme.

Hedeflerinizdeki anahtarlar saklanmaz. Bir sayfada gördüğünüz veri, siz istediğiniz anda hedeften okunmuştur. Tek istisna, tanımı gereği bir kopya olan yedektir; yedekler de onu yazan örneğin bile geri okuyamayacağı biçimde şifrelenebilir.

Birden fazla Keydra#

Yük dengeleyici arkasındaki iki örnek aynı PostgreSQL’i paylaşır. Her yerde yapılabilecek işler — anahtar uzayını okumak, konsol komutu çalıştırmak, pano çizmek — isteğin ulaştığı örnekte yapılır. Yalnızca bir kez yapılması gereken işler ise sahiplenilir:

  • Zamanlanmış işler yalnızca kirayı elinde tutan örnekte çalışır.

  • Uyarı kurallarını yalnızca o örnek değerlendirir; böylece tetiklenen kural tek bir mesaj gönderir.

  • Yarım kalmış göç işlerini işaretleyen tarama da orada çalışır.

Kira, veritabanındaki tek bir satırdır: birkaç saniyeliğine alınır ve sürekli yenilenir. Süresinin dolup dolmadığına örneklerin değil, veritabanının saati karar verir. Yenilemeyi kesen örnek kirayı bir sonraki isteyene bırakır; bir çökme sonrasında kimsenin müdahalesi gerekmeden toparlanmayı sağlayan da budur.

Hakkında sayfası, örneğin adını ve o an kirayı elinde tutup tutmadığını gösterir.

Bu sayfayı düzenle