Azure Key Vault Nedir?
Azure Key Vault, Uygulamaların ve kullanıcıların secret yönetimini yapabılabilmesi için ortaya çıkmış bir servistir. Modern uygulamalarda genellikle, günümüz güncel saldırılarından ve açıklarından korunmak için uygulama içi secret tutulması önerilmiyor. Bunun için ise secretlerımızı yönetmek için bir Vault kullanmak mantıklı hale geliyor. Bu sayede yazılımı geliştiren kişilerin projeden ayrılması yada uygulama kaynak kodlarının ele geçirilmesi vb. Durumlarda bile güvenlik açığı olmuyor.
Azure Key Vault ile birlikte Secret, Key, ve Certificate yönetimi yapabiliyoruz. Uygulama içinde herhangi secretlerimiz için herhangi bir koruma algoritması geliştirmemize gerek kalmıyor bu sayede. Key vault servisi Authentication için Azure Active Directory (AAD) kullanmakta. Yetkilendirme için ise Rol Based Access Control (RBAC) kullanmakta. Bu sayede bir kullanıcıya bir secreti okuma yetkesi verebiliyoruz ama silme veya değiştirme yetkisi vermek zorunda kalmıyoruz. Bu yönetimin tabiki olmazsa olmazı bu servisin kullanım metriklerinede erişebiliyoruz. Azure Key Vault servisi bizim için hangi secret, key ne kadar kullanılmış nerelerden çağırılmış gibi metrikleri özetleyebiliyor. Bu logları istersek bir storage’a yazabilir istersek Azure monitörde dashboard haline getirebiliriz. Ayrıca Azure’un böyle bir servisinin olması diğer Azure servisleri ile entegre çalışması açısından bizim için büyük bir kolaylık sağlamakta. Tek bir onay ile birlikte diğer azure servisleriyle nasıl etkileşim içinde olacağını veya yetkilerini belirleyebiliyoruz.
Azure Key Vault Secrets
Key vaultumuzda genellikle secrets bölümü en çok kullanılan özellik olarak karşımıza çıkıyor. Secret olarak ise uygulamamızın connection stringleri, şifreleri veya tokenlarını barındabiliriz. Key vault secretleri şifreleri olarak saklar ve yönetir. Veri kayıt edildiği zaman Key Vault bu veriyi sekizli diziler (8 bit bayt) olarak saklar ve yönetir. Her biri maksimum 25k bayt boyutunda olur. Daha sonrasında bu secreti tekrar çağırabilmemiz için bize bir ID döndürür. Tabiki secretlerimizin güvenliğini arttırmak istersek Key Vault’un bu şifrelemesinin yanı sıra kendimizde uygulama içerisinden şifreli bir şekilde key vaulta göndererek güvenlik katmanımızı arttırabiliriz. Kullanıcı secret oluştururken isterse veri tipini belirtebilir. Bu veriyi çekerken ve yönetirken bizim için kolaylık sağlar.
Secret Özellikleri
Son Kullanım Tarihi(Expiration) : Bir secret oluştururken, bellir bir zamandan sonra bu secretin kullanımını kısıtlayabiliyoruz. Bu özellik default olarak sonsuza kadar erişilebilir olarak gelmekte.
Kullanım Zaman (Not Before) : Bir secreti oluşturduk ancak şuanda kimsenin kullanmasını istemiyorsanız bu özellik ile birlikte 1 hafta sonra kullanılabilir gibi bir kural koyabilirsiniz.
Erişilebilirlik : Bu özellik ile birlikte secret’iniz oluşturuldu, duruyor ancak kimsenin kullanmasını istemiyorsanız secret’ın erişilebilirliğini kısıtlayabilirsiniz.
Bunun yanı sıra secretin yaratılma tarihi ve değiştirilme tarihleri gibi parametreleride görüntüleyebiliyoruz.
Şifrelerimize Erişim Kontrolü
Azure Key Vault servisi için erişim kontrolü sadece o vault için sağlanır. Bunun anlamı X kişisine secret read yetkisi verirseniz tüm secretleri okuyabilir. Eğer bazı secretleri ayırmak istiyorsanız bunun için bu servisten birtane daha oluşturmanız gerekmekte. Genellikle burda senaryoya göre Key Vaultlar oluşturulması önerilir. Erişim Yetkileri :
- Get: Belirli bir secret’ı okuma
- List: O key Vaultta tutulan tüm secretlerin bilgilerini getirme
- Set: Secret Oluşturma
- Delete: Secret Silme
- Recover: Silinen bir secreti geri getirme
- Backup: Key Vault’taki bir secretin yedeğini alma
- Restore: Backup alınan bir secreti geri getirme
Key Vault Cheatsheet
Azure CLI’da kullanabileceğimiz Key Vault için bazı komutlar aşağıdaki gibidir :
Tüm Azure KV’leri listelemek = az keyvault list [–resource-group] [–subscription]
KV Silme = az keyvault delete –name
KV Yaratma = az keyvault create –name –resource-group –subscription –location –enable-soft-delete –tags
KV bilgileri getirme = az keyvault show –name –resource-group –subscription
Secret Bilgileri Getirme = az keyvault secret show –id –name –subscription –vault-name
Secretleri Listeleme = az keyvault secret list –vault-name
Silinen Bir Secretı Geri Getirme = az keyvault secret recover –id –name –subscription –vault-name
Secret Yaratma = az keyvault secret set –vault-name “<your-keyvault-name>” –name “MySecret” –value “Success!”
Secret Silme = az keyvault secret delete –id –name –subscripotion –vault-name
Key Bilgileri Getirme = az keyvault key show –id –name –subscription –vault-name
Keyleri Listeleme = az keyvault key list –vault-name
Key Recover Etme = az keyvault key recover –id –name –subscription –vault-name
Key Yaratma = az keyvault key create –name –vault-name
Key Silme = az keyvault key delete –id –name –subscripotion –vault-name
Key Vault Kullanım Örnekleri
Bir .Net Uygulamasında Key Vault’umuzdan bir secreti getirmek için istersek SDK kullanabilir istersek REST API çağırımlarını kullanabiliriz. SDK kullanım örneğinden kısaca bahsetmek gerekirse aşağıdaki 3 adet nuget pakedini uygulamamıza yükleyerek başlayabiliriz :
Daha sonrasında ise Key Vaultumuza erişim için bir Service Accountu yaratıyoruz Azure Active Directory tarafında ve Service Account’umuzun bilgilerini environment variable olarak uygulamamızda belirliyoruz ;
Daha sonrasında ise controllerimizin içerisinde aşağıdaki gibi KV url’mizi oluşturuyoruz.
Bu adımdan sonra KV’miz için client’ımızı aşağıdaki gibi oluşturabiliriz ;
Bu adımdan sonra ise istersek bir secret yaratabilir, istersek Vaultumuzdaki bir secreti aşağıdaki gibi uygulama içinde kullanabiliriz.