Aracılığıyla paylaş


Kılavuz: Azure web uygulamasını gizli bilgiler olmadan Azure SQL veritabanına bağlamak için yönetilen kimliği kullanma

Azure App Service, Azure'da yüksek oranda ölçeklenebilir, otomatik güncellenen bir web barındırma hizmeti sağlar. App Service ayrıca uygulamanız için yönetilen bir kimlik de sağlar. Bu, Azure SQL ve diğer Azure hizmetlerine erişimin güvenliğini sağlamaya yönelik anahtar teslimi bir çözümdür. App Service'teki yönetilen kimlikler, bağlantı dizelerindeki kimlik bilgileri gibi gizli dizileri ortadan kaldırarak uygulamanızı daha güvenli hale getirir.

Bu öğreticide, Azure SQL arka ucuna sahip örnek bir .NET uygulamasına yönetilen kimliğin nasıl ekleneceği gösterilmektedir. İşlemi tamamladıktan sonra uygulamanız, kullanıcı adı ve parolaya gerek kalmadan Azure SQL veritabanına güvenli bir şekilde bağlanabilir.

Öğretici senaryosu için mimari diyagramı.

Bu eğitimde, siz:

  • Yönetilen kimlikleri etkinleştirin.
  • Yönetilen kimliğe Azure SQL Veritabanı erişimi verin.
  • Entity Framework'u SQL Veritabanı ile Microsoft Entra kimlik doğrulamasını kullanacak şekilde yapılandırın.
  • Microsoft Entra kimlik doğrulamasını kullanarak Visual Studio'dan SQL Veritabanı'na bağlanın.

Node.js, Python ve Java çerçevelerinde Azure Veritabanı MySQL veya PostgreSQL kullanma hakkında yönergeler için bkz: Öğretici: Yönetilen kimlik kullanarak gizli bilgiler olmadan App Service'ten Azure veritabanlarına bağlanma.

Not

Önkoşullar

  • Azure hesabınız yoksa, başlamadan önce ücretsiz hesap oluşturun.

  • Arka uç olarak SQL kimlik doğrulaması ile Azure SQL Veritabanı kullanan temel bir Azure App Service ASP.NET MVC veya ASP.NET Core MVC create-read-update-delete (CRUD) uygulamasına sahip olun. Bu öğreticideki adımlar aşağıdaki .NET sürümlerini destekler:

    • .NET Framework 4.8 ve üzeri
    • .NET 6.0 ve üzeri
  • Geliştirme ortamınızda uygulamanızda hata ayıklamak için bilgisayarınızdan Azure'a istemci bağlantısına izin verin. Azure portalını kullanarak sunucu düzeyinde IP güvenlik duvarı kurallarını yönetme adımlarını izleyerek istemci IP adresini ekleyebilirsiniz.

  • Azure Cloud Shell'de oturum açın veya ortamınızı Azure CLI'yi kullanacak şekilde hazırlayın.

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

    • 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 kullanarak Azure'da kimlik doğrulaması.

      • İ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 ve yönetme.

      • 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.

Microsoft Entra kullanıcısına veritabanı yöneticisi erişimi verme

Bir Microsoft Entra kullanıcısını Azure SQL sunucusunun yöneticisi olarak atayarak Azure SQL veritabanına Microsoft Entra kimlik doğrulamasını etkinleştirin. Microsoft Entra yöneticisi, oluşturulan, içeri aktarılan, eşitlenen veya Microsoft Entra Kimliği'ne davet edilen bir kullanıcı olmalıdır. Bu kullanıcı, Azure aboneliğinizin Microsoft hesabı kullanıcısı ile aynı olmayabilir.

Azure Cloud Shell'in Bash ortamında veya Azure CLI'da yerel olarak oturum açtıktan sonra aşağıdaki komutları çalıştırın.

  1. Microsoft Entra ID kullanıcısını yönetici yapmak istediğinizde nesne kimliğini almak için az ad user list, display-name, filter veya upn parametresiyle kullanın. Microsoft Entra dizinindeki tüm kullanıcıların bilgilerini göstermek için az ad user list komutunu tek başına çalıştırın.

    Örneğin, aşağıdaki komut, Adı Soyadı display-name olan bir Microsoft Entra ID kullanıcısının bilgilerini listeler.

    az ad user list --display-name "Firstname Lastname"
    

    Örnek çıktı aşağıda verilmişti:

     "businessPhones": [],
     "displayName": "Firstname Lastname",
     "givenName": null,
     "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
     "jobTitle": null,
     "mail": "firstname@contoso.com",
     "mobilePhone": null,
     "officeLocation": null,
     "preferredLanguage": null,
     "surname": null,
     "userPrincipalName": "firstname@contoso.com"
    
  2. parametresini kullanarak az sql server ad-admin create Microsoft Entra ID kullanıcısını Azure SQL sunucusuna object-id yönetici olarak ekleyin. Aşağıdaki komutta <server-name>'yi sunucu adınızdan .database.windows.net sonekini çıkararak değiştirin ve <entra-id>'yi önceki az ad user list komutunun çıktısındaki id değerle değiştirin.

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

Uygulama için yönetilen kimlik bağlantısını ayarlama

Aşağıdaki adımlar, uygulamanızı sistem tarafından atanan yönetilen kimliği kullanarak Azure SQL Veritabanı'na bağlanacak şekilde yapılandırabilir. Kullanıcı atamalı bir kimlik kullanmak istiyorsanız bkz. öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına bağlanma.

Uygulama için yönetilen kimliği etkinleştirme

Azure uygulamanız için yönetilen kimliği etkinleştirmek için az webapp identity assign komutunu kullanın ve yerine <app-name> uygulama adınız yazın. Sistem tarafından atanan kimliğin adı her zaman uygulama adıyla aynıdır.

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

İşte bir çıktı örneği:

{
  "additionalProperties": {},
  "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
  "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "type": "SystemAssigned"
}

Dağıtım yuvasında yönetilen kimliği etkinleştirmek için, önceki komuta ekleyin --slot <slot-name> ve içindeki <slot-name>yuvanın adını kullanın. Bir dağıtım yuvası için sistem tarafından atanan kimliğin adı <app-name>/slots/<slot-name>'dır.

Ayrıca, kimliği bir Microsoft Entra grubuna ekleyebilir ve ardından SQL Veritabanı'na erişim kimliği yerine Microsoft Entra grubuna verebilirsiniz. Microsoft Entra grubuna izin atamak için grubun görünen adını kullanın. Aşağıdaki komutlar, örnek yönetilen kimliği adlı myAzureSQLDBAccessGroupyeni 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

Yönetilen kimliğe izin ver

Kimliğe uygulamanızın ihtiyaç duyduğu en düşük izinleri verin.

  1. Bir PowerShell komut satırı açın ve aşağıdaki SQLCMD komutunu kullanarak SQL Veritabanı'nda oturum açın. <server-name> sunucu adınızla, <db-name> veritabanı adınızla ve önceki az ad user list komutunun çıktısındaki yönetici kullanıcının userPrincipalName ile <admin-user> değiştirin.

    sqlcmd -S <servername>.database.windows.net -d <db-name> -U <admin-user> -G -l 30
    

    Oturum açmak için istemleri izleyin.

  2. SQL isteminde aşağıdaki komutları çalıştırarak uygulamaya veritabanında gereken en düşük izinleri verin. <identity-name> öğesini, Uygulama adıyla aynı olan Microsoft Entra ID içindeki yönetilen kimliğin adıyla değiştirin.

    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
    

Not

Arka uç yönetilen kimlik hizmetleri, hedef kaynağın belirtecini yalnızca süresi dolduğunda güncelleştiren bir belirteç önbelleği tutar. İlk olarak uygulamanızla belirteç aldıktan sonra SQL Veritabanı izinlerinizi değiştirmeye çalışırsanız, önbelleğe alınan belirtecin süresi dolana kadar güncelleştirilmiş izinlere sahip yeni bir belirteç almazsınız.

Özgün bağlantı dizesini kaldırma

web.config veya appsettings.json yaptığınız tüm değişiklikler yönetilen kimlikle çalışır. Uygulamanızı ilk kez dağıtırken kullandığınız özgün bağlantı dizesini kaldırabilirsiniz. Bağlantı dizesini silmek için aşağıdaki Azure CLI komutunu çalıştırın ve yerine <app-name> uygulamanızın adını ve <connection-string-name> bağlantı dizenizin adını yazın.

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

Geliştirme ortamınızı ayarlama

Seçtiğiniz geliştirme ortamını ayarlayın ve Azure'da oturum açın. 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ığı.

Windows için Visual Studio, Microsoft Entra kimlik doğrulamasıyla tümleşiktir.

  1. Visual Studio'da geliştirme ve hata ayıklamayı etkinleştirmek için üstteki menüden Dosya>Hesabı Ayarları'nı seçerek Microsoft Entra kullanıcınızı Visual Studio'ya ekleyin ve ardından Oturum aç veya Ekle'yi seçin.
  2. Azure hizmet kimlik doğrulaması için Microsoft Entra kullanıcısını ayarlamak için üstteki 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.

Projenizi değiştirme ve uygulamanızı yayımlama

Azure SQL veritabanı destekli web uygulamanız, veritabanına bağlanmak için bir veritabanı bağlamı kullanır. Uygulamayla çalışmak için Microsoft Entra kimlik doğrulamasını kullanmak için, veritabanı bağlamını modern Microsoft.Data.SqlClient ADO.NET sağlayıcısına bağlı olan Entity Framework SQL Server sağlayıcısına başvuracak şekilde güncelleştirmeniz gerekir.

Entity Framework sağlayıcısı yerleşik System.Data.SqlClient SQL Server sağlayıcısının yerini alır ve Microsoft Entra ID kimlik doğrulama yöntemleri için destek içerir. Daha fazla bilgi için bkz . Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))], Microsoft.Data.SqlClient'i veritabanı bağlamı için yerel olarak kullanmak üzere çalışır, ancak System.Data.SqlClient Azure App Service'te sağlayıcı olarak sabit kodlandığı için, MicrosoftSqlDbConfiguration'ü genişleterek System.Data.SqlClient referanslarını bunun yerine Microsoft.Data.SqlClient'e yönlendirmeniz gerekir. Adımlar, ASP.NET veya ASP.NET Core uygulamanız olmasına bağlı olarak farklılık gösterir.

ASP.NET Core uygulaması varsayılan olarak Entity Framework Core kullanır.

  1. Visual Studio Paket Yöneticisi Konsolu'ndaMicrosoft.Data.SqlClient NuGet paketini ekleyin.

    Install-Package Microsoft.Data.SqlClient
    
  2. appsettings.json içinde, bağlantı dizesinin değerini şu kodla değiştirin ve <server-name ve <database-name>'yi sunucu adınız ve veritabanı adınızla değiştirin.

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

    Not

    Active Directory Varsayılan kimlik doğrulamayı hem yerel makinenizde hem de Azure App Service'te kullanabilirsiniz. Sürücü, Microsoft Entra Id'den birkaç farklı yolla belirteç alabilir.

    Uygulama dağıtılırsa sürücü, uygulamanın sistem tarafından atanan yönetilen kimliğinden bir belirteç alır. Bağlantı dizenize eklerseniz User Id=<client-id-of-user-assigned-managed-identity>; sürücü, kullanıcı tarafından atanan yönetilen kimlikle de kimlik doğrulaması yapabilir.

    DefaultAzureCredential sınıfı belirteci bellekte önbelleğe alır ve süre dolmadan önce Microsoft Entra Id'den alır. Belirteci yenilemek için herhangi bir özel koda ihtiyacınız yoktur.

    Artık Visual Studio'da hata ayıklarken Azure SQL Veritabanı'na bağlanmak için ihtiyacınız olan her şeye sahipsiniz. Kodunuz, geliştirme ortamınızı ayarlarken yapılandırdığınız Microsoft Entra kullanıcısını kullanır.

  3. Uygulamanızı çalıştırın. Tarayıcınızdaki CRUD uygulaması, Microsoft Entra kimlik doğrulamasını kullanarak Azure SQL veritabanına doğrudan bağlanır. Bu kurulum, Visual Studio'dan veritabanı geçişlerini çalıştırmanıza olanak tanır.

  4. Aşağıdaki Git komutlarını kullanarak değişikliklerinizi yayımlayın:

    git commit -am "configure managed identity"
    git push azure main
    

Uygulamayı test edin

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.

Code First Migration'ın ardından Azure uygulamasını gösteren ekran görüntüsü.

Artık to-do listesini 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.