Share via


Öğretici: Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına 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 yönetilen bir kimlik sağlar. Bu, aşağıdakiler dahil olmak üzere Azure veritabanlarına erişimi güvenli hale getirmek için anahtar teslimi bir çözümdür:

Not

Bu öğretici, Microsoft Entra kimlik doğrulamasını farklı şekilde destekleyen Azure Cosmos DB kılavuzlarını içermez. Daha fazla bilgi için Azure Cosmos DB verilerine erişmek için sistem tarafından atanan yönetilen kimlikleri kullanma gibi Azure Cosmos DB belgelerine bakın.

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, yönetilen kimlikleri kullanarak App Service'ten yukarıda bahsedilen veritabanlarına nasıl bağlanabileceğiniz gösterilir.

Öğreneceğiniz şeyler:

  • Microsoft Entra kullanıcısını Azure veritabanınız için yönetici olarak yapılandırın.
  • Veritabanınıza Microsoft Entra kullanıcısı olarak Bağlan.
  • App Service uygulaması için sistem tarafından atanan veya kullanıcı tarafından atanan yönetilen kimliği yapılandırın.
  • Yönetilen kimliğe veritabanı erişimi verme.
  • Yönetilen kimlik kullanarak kodunuzdan (.NET Framework 4.8, .NET 6, Node.js, Python, Java) Azure veritabanına Bağlan.
  • Microsoft Entra kullanıcısını kullanarak geliştirme ortamınızdan Azure veritabanına Bağlan.

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

Önkoşullar

  • App Service'te .NET, Node.js, Python veya Java tabanlı bir uygulama oluşturun.
  • Azure SQL Veritabanı, MySQL için Azure Veritabanı veya PostgreSQL için Azure Veritabanı ile bir veritabanı sunucusu oluşturun.
  • Standart bağlantı desenini (kullanıcı adı ve parola ile) tanımanız ve App Service uygulamanızdan tercih ettiğiniz veritabanınıza başarıyla bağlanabilmeniz gerekir.

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. Hizmet Bağlan veya parolasız uzantıyı yükleyin

Azure CLI için Hizmet Bağlan veya parolasız uzantıyı yükleyin:

az extension add --name serviceconnector-passwordless --upgrade

2. Parolasız bağlantı oluşturma

Ardından, Service Bağlan or ile parolasız bir bağlantı oluşturun.

İpucu

Azure portalı aşağıdaki komutları oluşturmanıza yardımcı olabilir. Azure portalında Azure Uygulaması Hizmeti kaynağınıza gidin, sol menüden Hizmet Bağlan veya Oluştur'u seçin. Formu tüm gerekli parametrelerle doldurun. Azure, CLI'da kullanmak veya Azure Cloud Shell'de yürütmek üzere kopyalayabileceğiniz bağlantı oluşturma komutunu otomatik olarak oluşturur.

Aşağıdaki Azure CLI komutu bir --client-type parametre kullanır.

  1. İsteğe bağlı olarak, desteklenen istemci türlerini almak için komutunu az webapp connection create sql -h çalıştırın.

  2. bir istemci türü seçin ve karşılık gelen komutu çalıştırın. Aşağıdaki yer tutucuları kendi bilgilerinizle değiştirin.

    az webapp connection create sql \
        --resource-group <group-name> \
        --name <server-name> \
        --target-resource-group <sql-group-name> \
        --server <sql-name> \
        --database <database-name> \
        --user-identity client-id=<client-id> subs-id=<subscription-id> \
        --client-type <client-type>
    

Bu Service Bağlan or komutu arka planda aşağıdaki görevleri tamamlar:

  • Sistem tarafından atanan yönetilen kimliği etkinleştirin veya Azure Uygulaması Hizmeti tarafından barındırılan uygulama <server-name> için bir kullanıcı kimliği atayın.
  • Microsoft Entra yöneticisini geçerli oturum açmış kullanıcı olarak ayarlayın.
  • Sistem tarafından atanan yönetilen kimlik veya kullanıcı tarafından atanan yönetilen kimlik için veritabanı kullanıcısı ekleyin. Veritabanının <database-name> tüm ayrıcalıklarını bu kullanıcıya verin. Kullanıcı adı, önceki komut çıkışındaki bağlantı dizesi bulunabilir.
  • veritabanı türüne göre , AZURE_POSTGRESQL_CONNECTIONSTRINGveya AZURE_SQL_CONNECTIONSTRING adlı AZURE_MYSQL_CONNECTIONSTRINGyapılandırmaları Azure kaynağına ayarlayın.
  • App Service için yapılandırmalar Uygulama Ayarlar dikey penceresinde ayarlanır.

Bağlantı oluştururken herhangi bir sorunla karşılaşırsanız yardım için Sorun giderme bölümüne bakın.

3. Kodunuzu değiştirme

  1. Bağımlılıkları yükleyin.

    dotnet add package Microsoft.Data.SqlClient
    
  2. Service Bağlan or tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı dizesi alın.

    using Microsoft.Data.SqlClient;
    
    // AZURE_SQL_CONNECTIONSTRING should be one of the following:
    // For system-assigned managed identity:"Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;TrustServerCertificate=True"
    // For user-assigned managed identity: "Server=tcp:<server-name>.database.windows.net;Database=<database-name>;Authentication=Active Directory Default;User Id=<client-id-of-user-assigned-identity>;TrustServerCertificate=True"
    
    string connectionString = 
        Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
    
    using var connection = new SqlConnection(connectionString);
    connection.Open();
    

    Daha fazla bilgi için bkz . Active Directory Yönetilen Kimlik kimlik doğrulamasını kullanma.

Daha fazla bilgi için bkz . Microsoft SQL Server'da istemci programlama için Giriş sayfası. Daha fazla kod örneği için bkz. Service Bağlan or aracılığıyla veritabanı hizmetine parolasız bağlantı oluşturma.

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

Bu örnek kod, Microsoft Entra Id'den Azure veritabanınız için kullanılabilir bir belirteç almak için kullanır DefaultAzureCredential ve ardından bunu veritabanı bağlantısına ekler. 'yi özelleştirebilirsiniz DefaultAzureCredentialancak varsayılan olarak çok yönlü bir seçenektir. Geliştirme ortamınızda veya App Service'te yerel olarak çalıştırmanıza bağlı olarak oturum açmış Microsoft Entra kullanıcısından veya yönetilen kimlikten bir belirteç alır.

Daha fazla değişiklik yapılmadan kodunuz Azure'da çalıştırılmaya hazırdır. Ancak kodunuzun hatalarını yerel olarak ayıklamak için geliştirme ortamınızın oturum açmış bir Microsoft Entra kullanıcısı olması gerekir. Bu adımda, Microsoft Entra kullanıcınızla oturum açarak tercih ettiğiniz ortamı yapılandıracaksınız.

  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.

5. Test edin ve yayımlayın

  1. Kodunuzu geliştirme ortamınızda çalıştırın. Kodunuz arka uç veritabanına bağlanmak için ortamınızdaki oturum açmış Microsoft Entra kullanıcısını kullanır. Veritabanı için Microsoft Entra yöneticisi olarak yapılandırıldığından kullanıcı veritabanına erişebilir.

  2. Tercih edilen yayımlama yöntemini kullanarak kodunuzu Azure'da yayımlayın. App Service'te kodunuz arka uç veritabanına bağlanmak için uygulamanın yönetilen kimliğini kullanır.

Sık sorulan sorular

Yönetilen kimlik SQL Server'ı destekliyor mu?

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

Hatayı alıyorum Login failed for user '<token-identified principal>'.

Belirteç istemeye çalıştığınız yönetilen kimlik, Azure veritabanına erişme yetkisine sahip değil.

App Service kimlik doğrulamasında veya ilişkili uygulama kaydında değişiklikler yaptım. Neden hala eski belirteci alıyorum?

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. Uygulamanızla belirteç almaya çalıştıktan sonra yapılandırmayı değiştirirseniz, önbelleğe alınan belirtecin süresi dolana kadar güncelleştirilmiş izinlere sahip yeni bir belirteç almazsınız. Bu sorunu geçici olarak gidermenin en iyi yolu, değişikliklerinizi yeni bir InPrivate (Edge)/private (Safari)/Incognito (Chrome) penceresiyle test etmektir. Bu şekilde, yeni bir kimliği doğrulanmış oturumdan başlayacağınızdan emin olursunuz.

Yönetilen kimliği bir Microsoft Entra grubuna eklemek Nasıl yaparım??

İsterseniz, kimliği bir Microsoft Entra grubuna ekleyebilir ve ardından kimlik yerine Microsoft Entra grubuna 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 <group-name> --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid

Bir Microsoft Entra grubu için veritabanı izinleri vermek için ilgili veritabanı türünün belgelerine bakın.

hatasını SSL connection is required. Please specify SSL options and retryalıyorum.

Azure veritabanına Bağlan ek ayarlar gerektirir ve bu öğreticinin kapsamı dışındadır. Daha fazla bilgi için aşağıdaki bağlantılardan birine bakın:

PostgreSQL için Azure Veritabanı TLS bağlantısını yapılandırma - Tek SunucuMySQL için Azure Veritabanı güvenli bir şekilde bağlanmak için uygulamanızda SSL bağlantısını yapılandırma

Sonraki adımlar

Öğrendikleriniz:

  • Microsoft Entra kullanıcısını Azure veritabanınız için yönetici olarak yapılandırın.
  • Veritabanınıza Microsoft Entra kullanıcısı olarak Bağlan.
  • App Service uygulaması için sistem tarafından atanan veya kullanıcı tarafından atanan yönetilen kimliği yapılandırın.
  • Yönetilen kimliğe veritabanı erişimi verme.
  • Yönetilen kimlik kullanarak kodunuzdan (.NET Framework 4.8, .NET 6, Node.js, Python, Java) Azure veritabanına Bağlan.
  • Microsoft Entra kullanıcısını kullanarak geliştirme ortamınızdan Azure veritabanına Bağlan.