Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan .NET App Service'ten SQL Veritabanı Bağlan

App Service, Azure’da yüksek oranda ölçeklenebilen, kendi kendine düzeltme eki uygulayan bir web barındırma hizmeti sunar. Ayrıca, uygulamanız için Azure SQL Veritabanı’na ve diğer Azure hizmetlerine erişimi güvenli hale getirmeye yönelik anahtar teslim bir çözüm olan yönetilen kimliği sağlar. App Service içindeki yönetilen kimlikler, bağlantı dizelerindeki kimlik bilgileri gibi uygulamanızdaki gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir. Bu öğreticide, aşağıdaki öğreticilerden birinde oluşturduğunuz örnek web uygulamasına yönetilen kimlik eklersiniz:

İşiniz bittiğinde, örnek uygulamanız kullanıcı adı ve parolaya gerek kalmadan SQL Veritabanıa güvenli bir şekilde bağlanacaktır.

Öğretici senaryosu için mimari diyagramı.

Not

Bu öğreticide ele alınan adımlar aşağıdaki sürümleri destekler:

  • .NET Framework 4.8 ve üzeri
  • .NET 6.0 ve üzeri

Diğer dil çerçevelerinde (Node.js, Python ve Java) MySQL için Azure Veritabanı veya PostgreSQL için Azure Veritabanı yönergeleri için bkz. Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına Bağlan.

Öğreneceğiniz şeyler:

  • Yönetilen kimlikleri etkinleştirme
  • Yönetilen kimliğe SQL Veritabanı erişimi verme
  • Entity Framework'i SQL Veritabanı ile Microsoft Entra kimlik doğrulamasını kullanacak şekilde yapılandırma
  • Microsoft Entra kimlik doğrulamasını kullanarak Visual Studio'dan SQL Veritabanı Bağlan

Not

Microsoft Entra kimlik doğrulaması, şirket içi Active Directory Tümleşik Windows kimlik doğrulamasından (AD DS) farklıdır. AD DS ve Microsoft Entra Id tamamen farklı kimlik doğrulama protokolleri kullanır. Daha fazla bilgi için Bkz . Microsoft Entra Domain Services belgeleri.

Azure aboneliğiniz yoksa başlamadan önce birücretsiz Azure hesabı oluşturun.

Önkoşullar

Bu makale, aşağıdaki öğreticilerden birinde kaldığınız yerden devam eder:

Henüz yapmadıysanız, önce iki öğreticiden birini izleyin. Alternatif olarak, SQL Veritabanı ile kendi .NET uygulamanız için adımları uyarlayabilirsiniz.

Arka uç olarak SQL Veritabanı kullanarak uygulamanızda hata ayıklamak için bilgisayarınızdan istemci bağlantısına izin verdiğinizden emin olun. Aksi takdirde, Azure portalını kullanarak sunucu düzeyinde IP güvenlik duvarı kurallarını yönetme adımlarını izleyerek istemci IP'sini ekleyin.

Ortamınızı Azure CLI için hazırlayın.

  • Azure Cloud Shell'de Bash ortamını kullanın. Daha fazla bilgi için bkz . Azure Cloud Shell'de Bash için hızlı başlangıç.

  • CLI başvuru komutlarını yerel olarak çalıştırmayı tercih ediyorsanız Azure CLI'yı yükleyin . Windows veya macOS üzerinde çalışıyorsanız Azure CLI’yi bir Docker kapsayıcısında çalıştırmayı değerlendirin. Daha fazla bilgi için bkz . Docker kapsayıcısında Azure CLI'yi çalıştırma.

    • Yerel yükleme kullanıyorsanız az login komutunu kullanarak Azure CLI ile oturum açın. Kimlik doğrulama işlemini tamamlamak için terminalinizde görüntülenen adımları izleyin. Diğer oturum açma seçenekleri için bkz . Azure CLI ile oturum açma.

    • İstendiğinde, ilk kullanımda Azure CLI uzantısını yükleyin. Uzantılar hakkında daha fazla bilgi için bkz. Azure CLI ile uzantıları kullanma.

    • Yüklü sürümü ve bağımlı kitaplıkları bulmak için az version komutunu çalıştırın. En son sürüme yükseltmek için az upgrade komutunu çalıştırın.

1. Microsoft Entra kullanıcısına veritabanı erişimi verme

İlk olarak, bir Microsoft Entra kullanıcısını sunucunun yöneticisi olarak atayarak SQL Veritabanı için Microsoft Entra kimlik doğrulamasını etkinleştirin. Bu kullanıcı, Azure aboneliğinize kaydolmak için kullandığınız Microsoft hesabından farklıdır. Oluşturduğunuz, içeri aktardığınız, eşitlediğiniz veya Microsoft Entra Id'ye davet ettiğiniz bir kullanıcı olmalıdır. İzin verilen Microsoft Entra kullanıcıları hakkında daha fazla bilgi için bkz. SQL Veritabanı'deki Microsoft Entra özellikleri ve sınırlamaları.

  1. Microsoft Entra kiracınızın henüz bir kullanıcısı yoksa, Microsoft Entra Id kullanarak kullanıcı ekleme veya silme adımlarını izleyerek bir kullanıcı oluşturun.

  2. ve kullanıcı-asıl-adını kullanarak Microsoft Entra kullanıcısının az ad user list nesne kimliğini bulun.<> Sonuç bir değişkene kaydedilir.

    $azureaduser=(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query '[].id' --output tsv)
    

    İpucu

    Microsoft Entra Id içindeki tüm kullanıcı asıl adlarının listesini görmek için komutunu çalıştırın az ad user list --query '[].userPrincipalName'.

  3. Cloud Shell'de komutunu kullanarak az sql server ad-admin create bu Microsoft Entra kullanıcısını Active Directory yöneticisi olarak ekleyin. Aşağıdaki komutta sunucu adını sunucu adıyla> değiştirin <(sonek olmadan.database.windows.net).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Active Directory yöneticisi ekleme hakkında daha fazla bilgi için bkz . Sunucunuz için Microsoft Entra yöneticisi sağlama

2. Geliştirme ortamınızı ayarlama

  1. Windows için Visual Studio, Microsoft Entra kimlik doğrulamasıyla tümleşiktir. Visual Studio'da geliştirme ve hata ayıklamayı etkinleştirmek için, menüden Dosya>Hesabı Ayarlar'ni seçerek Microsoft Entra kullanıcınızı Visual Studio'ya ekleyin ve Oturum aç veya Ekle'yi seçin.

  2. Azure hizmet kimlik doğrulaması için Microsoft Entra kullanıcısını ayarlamak için menüden Araçlar>Seçenekleri'ni ve ardından Azure Hizmet Kimlik Doğrulama>Hesabı Seçimi'ni seçin. Eklediğiniz Microsoft Entra kullanıcısını seçin ve Tamam'ı seçin.

Microsoft Entra kimlik doğrulaması için geliştirme ortamınızı ayarlama hakkında daha fazla bilgi için bkz . .NET için Azure Identity istemci kitaplığı.

Artık Microsoft Entra kimlik doğrulamasını kullanarak arka uç olarak SQL Veritabanı uygulamanızı geliştirmeye ve hatalarını ayıklamaya hazırsınız.

3. Projenizi değiştirme

Not

Microsoft.Azure.Services.AppAuthentication'ın artık yeni Azure SDK ile kullanılması önerilmez. .NET, Java, TypeScript ve Python için kullanılabilen yeni Azure Identity istemci kitaplığıyla değiştirilir ve tüm yeni geliştirmeler için kullanılmalıdır. 'a Azure Identitygeçiş yapma hakkında bilgi burada bulunabilir: AppAuthentication to Azure.Identity Migration Guidance.

Projeniz için izlediğiniz adımlar, Entity Framework Core (ASP.NET Core için varsayılan) veya Entity Framework (ASP.NET için varsayılan) kullanıp kullanmadığınıza bağlıdır.

  1. Visual Studio'da Paket Yöneticisi Konsolunu açın ve Microsoft.Data.SqlClient NuGet paketini ekleyin:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. ASP.NET Core ve SQL Veritabanı öğreticisinde, MyDbConnection appsettings.json'daki bağlantı dizesi henüz hiç kullanılmadı. Hem yerel ortam hem de Azure ortamı, bağlantı gizli dizilerini kaynak dosyanın dışında tutmak için ilgili ortam değişkenlerinden bağlantı dizesi alır. Ancak artık Active Directory kimlik doğrulamasıyla artık gizli dizi yok. appsettings.json'da bağlantı dizesi değerini MyDbConnection şununla değiştirin:

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Not

    Active Directory Varsayılan kimlik doğrulama türü hem yerel makinenizde hem de Azure Uygulaması Hizmeti'nde kullanılabilir. Sürücü, çeşitli yöntemler kullanarak Microsoft Entra Id'den belirteç almayı dener. Uygulama dağıtılırsa, uygulamanın sistem tarafından atanan yönetilen kimliğinden bir belirteç alır. Ayrıca, şunları eklerseniz kullanıcı tarafından atanan yönetilen kimlikle kimlik doğrulaması yapabilir: User Id=<client-id-of-user-assigned-managed-identity>; bağlantı dizesi. Uygulama yerel olarak çalışıyorsa Visual Studio, Visual Studio Code ve Azure CLI'dan belirteç almaya çalışır.

    SQL Veritabanı bağlanmak için ihtiyacınız olan her şey bunlardır. Visual Studio'da hata ayıkladığınızda kodunuz 2'de yapılandırdığınız Microsoft Entra kullanıcısını kullanır. Geliştirme ortamınızı ayarlayın. App Service uygulamanızın yönetilen kimliğinden bağlantıya izin vermek için daha sonra SQL Veritabanı ayarlayacaksınız. DefaultAzureCredential sınıfı belirteci bellekte önbelleğe alır ve süresi dolmadan hemen önce Microsoft Entra Id'den alır. Belirteci yenilemek için herhangi bir özel koda ihtiyacınız yoktur.

  3. Uygulamayı yeniden çalıştırmak için yazın Ctrl+F5 . Tarayıcınızdaki aynı CRUD uygulaması artık Microsoft Entra kimlik doğrulamasını kullanarak doğrudan Azure SQL Veritabanı bağlanıyor. Bu kurulum, Visual Studio'dan veritabanı geçişlerini çalıştırmanıza olanak tanır.

4. Yönetilen kimlik bağlantısını kullanma

Ardından App Service uygulamanızı sistem tarafından atanan yönetilen kimlikle SQL Veritabanı bağlanacak şekilde yapılandıracaksınız.

Not

Bu bölümdeki yönergeler sistem tarafından atanan bir kimliğe yönelik olsa da, kullanıcı tarafından atanan bir kimlik de aynı şekilde kolayca kullanılabilir. Bunu yapmak için: kullanıcı tarafından atanan istenen kimliği atamak için değerini değiştirmeniz az webapp identity assign command gerekir. Ardından, SQL kullanıcısını oluştururken site adı yerine kullanıcı tarafından atanan kimlik kaynağının adını kullandığınızdan emin olun.

Uygulamada yönetilen kimliği etkinleştirme

Azure uygulamanızda bir yönetilen kimlik etkinleştirmek için Cloud Shell’de az webapp identity assign komutunu kullanın. Aşağıdaki komutta app-name değerini değiştirin<.>

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Çıkış örneği:

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

Yönetilen kimliğe izin verme

Not

İsterseniz, kimliği bir Microsoft Entra grubuna ekleyebilir ve ardından kimlik yerine Microsoft Entra grubuna SQL Veritabanı erişim vekleyebilirsiniz. Örneğin, aşağıdaki komutlar önceki adımdaki yönetilen kimliği myAzureSQLDBAccessGroup adlı yeni bir gruba ekler:

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
  1. Cloud Shell’de SQLCMD komutunu kullanarak SQL Veritabanı oturumunu açın. Sunucu adını sunucu adınız,< db-name> değerini uygulamanızın kullandığı veritabanı adıyla ve <aad-user-name> ve <aad-password> değerlerini Microsoft Entra kullanıcınızın kimlik bilgileriyle değiştirin<.>

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. İstediğiniz veritabanının SQL isteminde aşağıdaki komutları çalıştırarak uygulamanızın ihtiyaç duyduğu en düşük izinleri verin. Örneğin,

    CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
    ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
    ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
    ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
    GO
    

    <identity-name> , Microsoft Entra Id içindeki yönetilen kimliğin adıdır. Kimlik sistem tarafından atanmışsa, ad her zaman App Service uygulamanızın adıyla aynıdır. Dağıtım yuvası için sistem tarafından atanan kimliğinin adı uygulama adı>/yuvalar/<yuva-adıdır><. Bir Microsoft Entra grubuna izin vermek için, bunun yerine grubun görünen adını kullanın (örneğin, myAzureSQLDBAccessGroup).

  3. Cloud Shell istemine geri dönmek için EXIT yazın.

    Not

    Yönetilen kimliklerin arka uç hizmetleri, hedef kaynağın belirtecini yalnızca süresi dolduğunda güncelleştiren bir belirteç önbelleği de tutar. SQL Veritabanı izinlerinizi yapılandırırken hata yaparsanız ve uygulamanızla belirteç almaya çalıştıktan sonra izinleri değiştirmeyi denerseniz, önbelleğe alınan belirtecin süresi dolana kadar güncelleştirilmiş izinlere sahip yeni bir belirteç almazsınız.

    Not

    Microsoft Entra Kimliği ve yönetilen kimlikler, şirket içi SQL Server için desteklenmez.

Bağlantı dizesini değiştirme

Web.config veya appsettings.json'da yaptığınız değişikliklerin yönetilen kimlikle çalıştığını unutmayın. Bu nedenle yapılacak tek şey, Visual Studio'nun uygulamanızı ilk kez dağıtırken oluşturduğu App Service'te var olan bağlantı dizesi kaldırmaktır. Aşağıdaki komutu kullanın, ancak app-name değerini uygulamanızın adıyla değiştirin<.>

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

5. Değişikliklerinizi yayımlama

Bundan sonra tek yapmanız gereken, değişikliklerinizi Azure'da yayımlamaktır.

  1. Öğretici: SQL Veritabanı ile Azure'da ASP.NET uygulaması derleme bölümünden geldiyseniz, değişikliklerinizi Visual Studio'da yayımlayın. Çözüm Gezgini’nde DotNetAppSqlDb projenize sağ tıklayıp Yayımla’yı seçin.

    Çözüm Gezgini'nden yayımlama

  2. Yayımlama sayfasında Yayımla'yı seçin.

    Önemli

    App Service adınızın mevcut Uygulama Kayıtlarıyla eşleşmediğinden emin olun. Bu, Asıl Kimlik çakışmalarına yol açar.

Yeni web sayfası yapılacaklar listenizi gösterdiğinde uygulamanızın yönetilen kimliğini kullanarak veritabanına bağlanmakta olduğu anlamına gelir.

Kod İlk Geçişi'nin ardından Azure uygulaması

Bundan sonra yapılacaklar listesini daha önce olduğu gibi düzenleyebilirsiniz.

Kaynakları temizleme

Önceki adımlarda, bir kaynak grubunda Azure kaynakları oluşturdunuz. Bu kaynakların gelecekte gerekli olacağını düşünmüyorsanız, Cloud Shell’de aşağıdaki komutu çalıştırarak kaynak grubunu silin:

az group delete --name myResourceGroup

Bu komutun çalıştırılması bir dakika sürebilir.

Sonraki adımlar

Öğrendikleriniz:

  • Yönetilen kimlikleri etkinleştirme
  • Yönetilen kimliğe SQL Veritabanı erişimi verme
  • Entity Framework'i SQL Veritabanı ile Microsoft Entra kimlik doğrulamasını kullanacak şekilde yapılandırma
  • Microsoft Entra kimlik doğrulamasını kullanarak Visual Studio'dan SQL Veritabanı Bağlan