Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan .NET App Service'ten SQL Veritabanına bağlanma
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:
- Öğretici: Azure SQL Veritabanı ile Azure'da ASP.NET uygulaması oluşturma
- Öğretici: Azure Uygulaması Hizmetinde ASP.NET Core ve Azure SQL Veritabanı uygulaması oluşturma
İşiniz bittiğinde, örnek uygulamanız kullanıcı adı ve parolaya gerek kalmadan SQL Veritabanıa güvenli bir şekilde bağlanacaktır.
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önergeler için bkz. Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına bağlanma.
Öğ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ğlanma
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:
- Öğretici: SQL Veritabanı ile Azure'da ASP.NET uygulaması oluşturma
- Öğretici: Azure Uygulaması Hizmeti'nde ASP.NET Core ve SQL Veritabanı uygulaması oluşturma.
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ı.
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.
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'
.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
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ı'nı seçerek Microsoft Entra kullanıcınızı Visual Studio'ya ekleyin ve Oturum aç veya Ekle'yi seçin.
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 Identity
geç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.
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
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ğeriniMyDbConnection
ş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.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öneliktir. Kullanıcı tarafından atanan bir kimlik kullanmak için bkz . Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına bağlanma.
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>
Not
Dağıtım yuvasında yönetilen kimliği etkinleştirmek için yuva adı alanına>< yuva adını ekleyin --slot <slot-name>
ve kullanın.
Çıkış örneği:
{ "additionalProperties": {}, "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222", "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee", "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
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
İ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).
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.
Öğ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.
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.
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ğlanma