Gizli diziler nedir ve Java'da bunları işleme

Tamamlandı

Gizli diziler, dış dünyayla paylaşılmaması gereken karakter dizeleridir: bunlar veritabanı parolaları, özel şifreleme anahtarları, kişisel erişim belirteçleri vb. olabilir. Gelişmiş güvenlik için, birçok kişi saldırgana yardımcı olabilecek her şeyin gizli dizi olarak kabul edilmesi gerektiğini de düşünmektedir. Örneğin, üretim veritabanınızın URL'si gizli dizi olarak görülebilir. Veritabanınıza genel erişim sağlanmamalıdır. Bunun mantığı, bu tür bilgilerin doğası gereği hassas olması ve kodunuzda ne kadar az bilgi varsa o kadar iyi olmasıdır.

Sıfır Güven ve Sıfır Gizli Dizi nedir?

Sıfır Güven kavramı, kimsenin körü körüne güvenilmemesi ve doğrulanmadan ve yetkilendirilmeden şirket kaynaklarına erişmesine izin verilmemesidir.

Bu kavram Web uygulamaları için de geçerlidir: Kodlarında veya son ikili dosyalarında gizli diziler depolanmamalıdır. Biz buna Sıfır Gizli Dizi diyoruz.

Gizli diziler, saldırı riskini azaltmak için katı erişim kuralları ve doğrulama ile bir dış sistem tarafından yönetilmelidir.

Git depolarına gizli diziler yerleştirmeyin

Git deponuz özel olsa bile, kaynak koduna gizli dizi koymak kötü bir uygulamadır:

  • Deponuza erişimi olan herkes hassas verilerinizi bilir
  • Uygulama ikili dosyanıza erişimi olan herkes içindeki gizli dizileri ayıklayabilir

Ayrıca, bir gizli dizi git deposunda depolandıktan sonra saldırganlar deponun geçmişine bakarak bunu her zaman bulabilir ve uzun bir süre geçtikten sonra unutulabilir.

Bunu yapmak pratik gibi görünse bile, hiçbir zaman kaynak kod deponuzda gizli dizi depolamamalısınız. Bu sorunu önlemek için, deponuzu düzenli olarak denetleyerek yanlışlıkla depolanan bir parola veya veritabanı URL'si bulduklarında uyarı gönderen otomatik araçları kullanabilirsiniz.

Ortam değişkenlerini kullanma

Gizli dizileri yönetmek için en kolay çözüm ortam değişkenlerini kullanmaktır. Çeşitli avantajları vardır:

  • Kullanımı kolaydır
  • Tüm sistemlerde (şirket içi sistemlerde bile) çalışırlar
  • Herkes onları tanır ve nasıl çalıştıklarını anlar

Ancak bunlar yeterince güvenli değildir: Sisteminizdeki tüm işlemler bunları okuyabilir ve java sisteminde Java Yönetim Uzantıları (JMX) kullanılarak kolayca kullanıma sunulur.

Sonuç olarak, ortam değişkenleri genellikle Sıfır Güven için ilk adım olarak görülür: gizli dizileri doğrudan kaynak koda depolamaktan daha güvenlidir, ancak yönetim özelliklerine sahip değildir ve saldırganlar için erişimleri kolaydır.

Kubernetes gizli dizilerini kullanma

Kubernetes'in başka bir iyi çözüm olan ' i anlaması secretsvardır. Bu gizli diziler uygulamanın dosya sistemine bir dosya olarak yüklenebilir: Java programı bu gizli dizilere erişmek için bu dosyayı başlangıç zamanında okuyabilir. Spring Framework gibi araçlar bu mekanizma için standart desteğe bile sahiptir ve bu sayede bu gizli dizileri kolay ve verimli bir şekilde kullanabilirler.

Bu mekanizma ortam değişkenlerinden daha güvenlidir, çünkü bu dosyalar yalnızca bunları gerektiren işlem tarafından okunabilir. Ayrıca zengin Kubernetes ekosisteminden yararlanırlar ve bulut sağlayıcınız tarafından sağlanan araçlar da dahil olmak üzere çeşitli yönetim araçları tarafından yönetilebilirler.

Kubernetes gizli dizileri Kubernetes için iyi bir çözüm olsa da kubernetes ile de sınırlıdır ve Kubernetes altyapısını yönetmek için kullanılan araçlara bağlı olarak gelişmiş yönetim özelliklerine sahip olmaz.

Gizli Dizi deposu kullanma

Hashicorp Vault veya Azure Key Vault gibi gizli diziler deposu, gizli dizileri yönetmek için özel bir yazılımdır. Kullanıcıları yetkilendirmek, güvenlik anahtarlarını döndürmek ve hangi uygulamanın hangi gizli diziye erişebileceğini doğrulamak için zengin bir yönetim sistemi sunar.

Ayrıca herhangi bir sistemde kullanılabilmeleri için bir dış API de sağlarlar. Örneğin Sanal Makineler, Azure Uygulaması Hizmetleri, Azure Kubernetes Services veya Azure Spring Apps gibi tüm Azure hizmetlerinde Azure Key Vault kullanabilirsiniz.

Gizli dizi deposu, gizli dizileri yönetmek için en güvenli çözümdür, ancak özel bir araç kullanılması gerekir.