ASP.NET Core Uygulamasında Azure Key Vault Kullanımı

Ufuk Aytaş
Devops Türkiye☁️ 🐧 🐳 ☸️
6 min readMay 6, 2021

--

ASP.NET Core Uygulamasında Key Vault Kullanımı

Bu yazıda Asp.Net Core uygulaması ile Azure Key Vault’u nasıl entegre edeceğimizi inceleyeceğiz.

Örnek bir uygulama üzerinden Azure Key Vault’a bağlanıp secret(gizli) bilgilere uygulama içerisinden erişerek hassas bilgilerimizin güvenli bir şekilde nasıl depolanacağını ve kullanılacağını adım adım inceleyelim.

Bir önceki yazıda Azure Key Vault nedir? Neden kullanmalıyız? gibi konuları incelemiştik. Eğer daha önce okumadıysanız öncelikle bu yazıyı okumanızı tavsiye ederim.

Kısaca Azure Key Vault’u hatırlayacak olursak;

Azure Key Vault, şifreleme anahtarlarını ve gizli dizileri tek bir merkezi güvenli kasada depolamamıza ve yönetmemize olanak tanıyan bir hizmettir.

Anahtarları, parolaları, sertifikaları ve diğer sırları güvenli bir şekilde saklayabilirsiniz. Azure Key Vault Azure Active Directory ile entegre çalışan bir Azure PaaS hizmetidir.

Azure Key Vault diğer Azure servisleri ile entegre olarak çalışmaktadır. Hiç kod yazmadan birkaç konfigurasyon ile Key Vault’u kullanabiliriz.

Peki Azure dışında host edilen uygulamalarımızda Azure Key Vault ‘u nasıl kullanacağız?

Azure Key Vault Azure Active Directory ile entegre olarak kurumsal düzeyde kimlik doğrulama ve yetkilendirmeden yararlanır. Bu nedenle uygulamalarımızda key vault kullanmak istiyorsak öncelikle Azure Active Directory’de kimlik doğrulaması yapmamız gerekmektedir.

Bunun için Uygulamamızı Azure AD’ye register etmemiz gerekiyor.

Bu işlemden önce demo projemiz için Azure Key Vault oluşturalım. Key Vault oluşturmak için CLI, Powershell ve Azure Portal’ı kullanabilirsiniz. Daha fazla bilgi için;

Resource Group için oluşturduğum AspNetCoreWithAzureKeyVault’u seçiyoruz . Azure Key Vault için isim alanı için kv-aspnetcoredemo, Region West Europe ve Standart Tier seçerek Key Vault’u oluşturalım.

Azure Key Vault’u oluşturduktan sonra uygulamamızda kullanmak üzere ProjectApiToken isminde bir secret oluşturalım. Value olarak aşağıdaki örnek Guid verisini giriyorum. Bu bilgileri Asp.Net Core projemizde okumaya çalışacağız.

F382A854-D91E-42E4-9A2D-F6EB9E57BDF3

Azure Active Directory App Registration oluşturma

Azure Portal adresine giderek (https://portal.azure.com) arama çubuğuna Azure Active Directory yazalım ve sol menüden App Registration’ı seçerek New Registration diyelim.

Uygulamamız için bir isim vererek Register diyoruz.

Azure AD de uygulamamız oluşturulduktan sonra gelen ekrandaki Client ID’yi kaydedelim. Daha sonra uygulamamızda kullanacağız. Certificates & secrets bölümünden’de Azure AD ye bağlanabilmek için secret (gizli bilgi) oluşturacağız.

Kimlik bilgileri uygulamaların https şeması kullanarak kimlik doğrulama hizmetine (Azure AD) kendilerini tanıtlamalarını sağlar.

Sertifika ve Client Secret oluşturarak uygulamamız için kimlik doğruluması sağlayabiliriz.

Örnek uygulamamızda Secret tanımı yaparak devam edeceğiz.

Eğer uygulamınızın daha güvenli olmasını istiyorsanız Azure sertifika kullanmamızı önermektedir.

Secret tanımı yaparken secret için açıklama ve expire girmemiz gerekiyor. Save diyerek devam edelim.

Secret bilgimizi oluşturduk. ClientId ile beraber bu secret bilgisini Asp.Net uygulamamızda kullanacağız.

Şimdi sırada Azure Ad uygulaması için Azure Key Vault’da yetki verilmesi gerekmekte. Bunun için Azure Key Vault uygulamamızda Access Policy’e gideceğiz. Add Access Policy diyoruz. Azure AD de oluşturduğumuz App registration uygulamamızı Principal altında seçerek gerekli izinleri tanımlıyoruz.

KeyVault’a erişmek için ASP.NET Core’u yapılandırma

Örnek uygulamamız için Asp.Net Core Web uygulaması oluşturalım.

Azure Key Vault’u uygulamamızda yapılandırabilmek için daha önceden oluşturmuş olduğumuz Key Vault servisine girerek Vault URI bilgisini, Azure AD’de kayıtlı AspNetCoreWithAzureKeyVaultDemo uygulamasından ClientId ve Secret bilgilerine ihtiyacımız var. Öncelikle AppSettings’de bu bilgileri oluşturalım.

Daha sonra AzueKeyVault kütüphanesini projeye ekmemiz gerekmektedir.

Microsoft.Extensions.Configuration.AzureKeyVault
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration.AzureKeyVault" Version="3.1.14" />
</ItemGroup>
</Project>

Program.cs içindeki AzureKeyVault için gerekli yapılandırmayı ekliyoruz. Azure Key Vault URI, Client ID ve Secret tanımlarını ekliyoruz.

Projemizde Secret bilgisini okuyabilmek için HomeController’da IConfiguration’ın GetValue methoduna oluşturduğumuz secret bilgisinin adını (ProjectAPIToken) yazıyoruz.

Şimdi Projemizi çalıştıralım ve test edelim.

Projemizi debug ettiğimizde secret bilgimize başarılı bir şekilde ulaşabildik. Bundan sonra bu bilgiyi uygulama içerisinde istediğimiz gibi kullanabiliriz.

Uygulamayı geliştirirken elimizde sadece Key Vault URI bilgisi ile ClientID ve Secret bilgisi var. Hassas bilgilerimiz için Key Vault’u yöneten kişiler ile developer takımlarını bu şekilde izole etmiş oluyoruz.

Production ortamında kullandığımız hassas bilgileri Azure Key Vault ile tamamen güvenli bir şekilde yönetebiliriz.

Kaynak kodları incelemek için github repo’suna ulaşabilirsiniz.

Sonuç

Bu yazıda Asp.Net Core projemiz ile Azure Key vault’u nasıl entegre edeceğimizi adım adım inceledik.

Uygulama geliştirirken genellikle tasarım, mimari ve diğer konulara odaklanırız. Oysaki güvenlik konusu ikinci planda kalmaktadır.

Projelerimizde hassas bilgileri kaynak kodumuza eklemekten genellikle çekinmeyiz. Projelerimizin depolandığı Repo’larda bu bilgiler güzel bir şekilde arşivlenir.

Hatta Github’da basit bir arama ile birçok hassas ve önemli kimlik bilgilerine ulaşabilirsiniz.

Azure Key Vault tam bu noktada bize büyük bir kolaylık sağlamaktadır. Azure Key Vault Cloud ortamında hassas bilgilerimizi depolamak için güvenilir ve yönetimi kolay bir hizmettir. Uygulamalardaki hassas bilgileri projeden izole ederek Role bazlı yetkilendirme ile kolay bir şekilde yönetebilmemize olanak sağlar.

Database bağlantı bilgileri , API anahtarlarları ya da erişim bilgileri gibi bilgileri Projelerinizde sizde güvensiz bir şekilde tutuyorsanız umarım bu yazıdan sonra fikriniz değişir ve Azure Key Vault gibi güvenli depolama alanlarını kullanırsınız.

Bir sonraki makalede görüşmek üzere…

Sorularınız için lütfen yorum yapmaktan ve bana ulaşmaktan çekinmeyin.

Twitter: https://twitter.com/ufukaytas
Linkedin: https://www.linkedin.com/in/ufukaytass/
Github: https://github.com/ufukaytas/

--

--

Ufuk Aytaş
Devops Türkiye☁️ 🐧 🐳 ☸️

Software Architect & Developer @CorendonDutchAirlines, Husband, Dad, Fishing, Coffee addict :) #Serverless #Cloud, #Azure, #Dotnet