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.
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/v1altı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.
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.