Azure Cosmos DB Kullanarak Güvenli Uygulamalar Nasıl Geliştirilir?
Azure Cosmos DB kullanarak güvenli uygulamaların nasıl geliştirileceğini anlatmaya başlamadan önce, Azure Cosmos DB’nin sunduğu farklı güvenlik katmanlarından bazılarından bahsetmeliyiz. Aşağıdaki görüntü, bu çeşitli güvenlik katmanlarını göstermektedir:
İlk Azure katmanı, veri merkezlerinin fiziksel güvenliğini ve DDoS saldırılarına karşı sürekli koruma sağlar. Azure, güvenlik sorunlarını sürekli izlemek için ekiplere sahiptir. Tüm Azure hizmetleri, anormal etkinlikleri toplamak için ortak bir güvenlik aracısı çalıştırır. Üretim kaynakları düzenli olarak eklenir ve tüm sırlar, sertifikalar veya şifreler belirli bir kullanım ömrüne sahiptir. Bu sertifikalar veya sırlar süresi dolduktan sonra döndürülmelidir. Azure Cosmos DB’deki tüm üretim portları taranır ve düzenli aralıklarla test edilir. Kaynak kodu güvenlik sorunları için taranır ve ürüne entegre edilmeden önce iki onaylayıcı gerektirir.
Azure’a erişim kısıtlıdır. Azure Cosmos DB için çalışan operasyon personeli veya geliştiricileri, makinelerindeki hiçbir üretime erişemez. Tüm üretime, özel güvenli erişim iş istasyonları (SAW’ler) aracılığıyla erişilir. Azure’dan geçmediği sürece bu makinelerden dışarıdan erişim yoktur. Mühendisler tüm üretim erişimi için tam zamanında (JIT) onay alırlar. Tüm erişim izlenir ve bir mühendisin her etkinliği bir yedek tarafından izlenir. Tüm üretim dağıtımları, test imzası ve onaylayanlar dahil, birden fazla onay gerektirir. Azure’un Microsoft personeli tarafından çok katı bir erişim politikası vardır. Herhangi bir Microsoft çalışanının yetkili olmadığı takdirde üretim sistemine erişmesi neredeyse imkansızdır. Bu ayrıntılardan bahsediyorum çünkü kullanıcılar sık sık Azure’da verilerinin güvende olup olmadığını ve Azure Cosmos DB mühendislik ekiplerinin verilere erişip erişemeyeceklerini sormaktadır.
IP güvenlik duvarı kullanmak, veritabanınızı güvence altına alan ilk koruma katmanıdır. Azure Cosmos DB, gelen güvenlik duvarı desteği için politika odaklı IP tabanlı erişim kontrollerini destekler. Bu model geleneksel bir veritabanı sisteminin güvenlik duvarı kuralları gibidir ve Azure Cosmos DB hesabına ek bir güvenlik düzeyi sağlar. Bu modelle, artık Azure Cosmos DB hesabını yalnızca onaylanmış makinelerden ve / veya bulut hizmetlerinden erişilebilecek şekilde yapılandırabilirsiniz. Azure Cosmos DB kaynaklarına, bu onaylanmış makine ve hizmet kümelerinden erişim, hala arayanın geçerli bir yetkilendirme belirteci sunmasını gerektirir. IP erişim kontrolü ilkesi Azure portalında veya programatik olarak “ipRangeFilter” özelliğini güncelleyerek Azure CLI, Azure PowerShell veya REST API aracılığıyla ayarlanabilir.
Sanal ağ, Azure Cosmos DB hesaplarını koruyan bir sonraki katmandır. Azure Cosmos DB hesabınızı yalnızca belirli bir Azure Sanal Ağ alt ağından erişime izin verecek şekilde yapılandırabilirsiniz. Sanal bir ağdan ve alt ağından Azure Cosmos DB için bir hizmet uç noktası etkinleştirerek, trafik Azure Cosmos DB’ye optimum ve güvenli bir yol sağlanır. Bir Azure Cosmos DB hesabı bir sanal ağ hizmeti son noktasıyla yapılandırıldığında, yalnızca belirtilen alt ağdan erişilebilir ve genel ya da İnternet erişimi kaldırılır. Bir ağ güvenlik grubuyla bir Azure Sanal Ağındaki Azure kaynaklarına gelen ve giden ağ trafiğini filtreleyebilirsiniz. Bir ağ güvenliği grubu, çeşitli Azure kaynak türlerinden gelen ağ trafiğine ve giden ağ trafiğine izin veren veya vermeyen güvenlik kuralları içerir.
Şimdiye kadar tartışılan güvenlik katmanları Azure Cosmos DB’nin bir parçası olarak geliyor ve güvenlik duvarını ve sanal ağı yapılandırmaktan başka bir şey gerektirmiyor. Şimdi, bir uygulama geliştiricisi olarak neler yapabileceğinizi tartışalım. Azure Cosmos DB’ye tüm erişim bir ana anahtar ve salt okunur anahtar tarafından kontrol edilir. Ana anahtar, adından da anlaşılacağı gibi, ana anahtardır ve Azure Cosmos DB üzerindeki tüm işlemleri yapabilir. Salt okunur bir anahtar, verileri okumanızı sağlar, ancak bu anahtarla başka bir işlem yapılması mümkün değildir. Geliştiriciler anahtarlar hakkında endişelenebilir, birisinin onları çalıp çalmayacağını ve verilerine erişip erişemeyeceğini merak edebilir. Bu yazının geri kalanı, Azure Cosmos DB’de güvenli bir uygulama oluşturmak için benimsemeniz gereken mimariyi anlatmaya çalışacaktır.
İlk olarak, hiçbir uygulama yapılandırma dosyasının veya kodda erişim anahtarlarına sahip olmamalıdır. Anahtarlar her zaman Anahtar Kasasında (Key Vault) tutulmalıdır. Uygulamanız veya kullanıcılarınız Anahtar Kasası’na
(Key Vault) kayıtlı kimlikleri yönetebilir ve anahtarları çalışma zamanında alabilirler.
İkincisi, uygulama veritabanına doğrudan erişmeye çalışmamalıdır. Verilere erişmek için bir orta seviye web servisine sahip olmaları gerekir. Bu yaklaşım aşağıdaki avantajları sağlar:
- Frontend uygulaması verileri almak için REST servisini arayabilir. Frontend’in, Azure Cosmos DB’nin farklı API’lerini anlaması gerekmez. Azure Cosmos DB çok modelli bir veritabanıdır, veriler farklı formatlarda tutulabilir, ancak ön uç uygulamaları veri erişiminin tüm ayrıntılarından uzaklaşabilir.
- Genel olarak, aynı verilere erişecek olan farklı biçimlerde (PC, telefon ve web) birçok uygulamaya sahip olabilirsiniz. Tüm uygulamalar veri alma mantığını tekrar etmemelidir.
- Veritabanına zarar vermeden önce, web hizmeti katmanındaki herhangi bir sahte uygulamaya ihtiyaç duyulduğunda azaltma sağlayabilirsiniz.
- Veritabanına tüm erişimi daha ince bir ayrıntıda denetleyebilirsiniz.
- Ve sonra, elbette, üç katmanlı mimarinin, örneğin; Veri katmanından soyutlama, önbellekleme fırsatı, farklı takımlar farklı katman paralelleri üzerinde çalışabilir, farklı katmanları ayrı ayrı ölçeklendirebilirsiniz.
Dahası, en büyük yararı, anahtarlara erişmesi gereken yalnızca bir hizmetiniz olmasıdır. Anahtarları döndürürken, yüzlerce veya binlerce müşteri yerine, yalnızca bir hizmetin onları yenilemesi gerekir.
Yukarıda gösterildiği gibi, AAD tarafından doğrulanan ve REST web servisini arayan bir uygulamanız olabilir. Yukarıda gösterilen uygulama, bir web sitesinin on binlerce örneği olabilir. REST API, çağrıda arayan kimliğini alır. Bu web hizmeti, hangi kullanıcının hangi Azure Cosmos DB koleksiyonuna izin verdiğini görmek için özel kurallarına başvurabilir. İş kuralı katmanı aramayı doğruladığında, Veri Hizmeti, Azure Cosmos DB’den verilere erişmek için Anahtarları Kasadan alabilir. Azure Cosmos DB’yi yakından takip ediyorsanız, kaynak belirteçlerini merak edebilirsiniz. Kaynak belirteçlerini dağıtabilecek bir hizmet uygulamak yerine yukarıdaki mimariyi tercih etmelisiniz ve daha sonra bir müşteri doğrudan bu kaynak belirteçlerini Azure Cosmos DB’ye erişmek için kullanabilir.