البرنامج التعليمي: الاتصال بقواعد بيانات Azure من App Service دون بيانات سرية باستخدام الهوية المُدارة

توفر App Service خدمة استضافة ويب قابلة للتطوير وذاتية التصحيح في Azure. كما توفر الهوية المدارة لتطبيقك، وهو حل تحويل المفتاح لتأمين الوصول إلى قاعدة بيانات Azure بما في ذلك:

إشعار

لا يتضمن هذا البرنامج التعليمي إرشادات ل Azure Cosmos DB، والذي يدعم مصادقة Microsoft Entra بشكل مختلف. لمزيد من المعلومات، راجع وثائق Azure Cosmos DB، مثل استخدام الهويات المدارة المعينة من قبل النظام للوصول إلى بيانات Azure Cosmos DB.

تجعل الهويات المدارة في App Service تطبيقك أكثر أمانًا عن طريق إزالة الأسرار من تطبيقك، مثل بيانات الاعتماد في سلاسل الاتصال. يوضح لك هذا البرنامج التعليمي كيفية الاتصال بقواعد البيانات المذكورة أعلاه من App Service باستخدام الهويات المدارة.

سوف تتعلم ما يلي:

  • تكوين مستخدم Microsoft Entra كمسؤول لقاعدة بيانات Azure.
  • الاتصال بقاعدة البيانات الخاصة بك كمستخدم Microsoft Entra.
  • تكوين هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم لتطبيق App Service.
  • منح الوصول إلى قاعدة البيانات للهوية المدارة.
  • اتصل بقاعدة بيانات Azure من التعليمات البرمجية الخاصة بك (.NET Framework 4.8 و .NET 6 و Node.js و Python و Java) باستخدام هوية مُدارة.
  • اتصل بقاعدة بيانات Azure من بيئة التطوير الخاصة بك باستخدام مستخدم Microsoft Entra.

إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.

المتطلبات الأساسية

  • إنشاء تطبيق في App Service استناداً إلى .NET أو Node.js أو Python أو Java.
  • إنشاء خادم قاعدة بيانات باستخدام قاعدة بيانات Azure SQL أو قاعدة بيانات Azure لـ MySQL أو قاعدة بيانات Azure لـ PostgreSQL.
  • يجب أن تكون على دراية بنمط الاتصال القياسي (مع اسم المستخدم وكلمة المرور) وأن تكون قادراً على الاتصال بنجاح من تطبيق App Service إلى قاعدة البيانات التي تختارها.

تحضير البيئة الخاصة بك لـAzure CLI.

1. تثبيت ملحق Service Connector بدون كلمة مرور

تثبيت أحدث ملحق Service Connector بدون كلمة مرور ل Azure CLI:

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

إشعار

يرجى التحقق من أن إصدار الملحق "serviceconnector-passwordless" هو "2.0.2" أو أعلى عن طريق تشغيل az version. قد تحتاج إلى ترقية Azure CLI أولا لترقية إصدار الملحق.

2. إنشاء اتصال بدون كلمة مرور

بعد ذلك، قم بإنشاء اتصال بدون كلمة مرور باستخدام Service Connector.

تلميح

يمكن أن يساعدك مدخل Microsoft Azure في إنشاء الأوامر أدناه. في مدخل Microsoft Azure، انتقل إلى مورد Azure App Service ، وحدد Service Connector من القائمة اليسرى وحدد Create. املأ النموذج بجميع المعلمات المطلوبة. ينشئ Azure تلقائيا أمر إنشاء الاتصال، والذي يمكنك نسخه لاستخدامه في CLI أو تنفيذه في Azure Cloud Shell.

يستخدم أمر Azure CLI التالي معلمة --client-type .

  1. قم بتشغيل az webapp connection create sql -h اختياريا للحصول على أنواع العملاء المدعومة.

  2. اختر نوع عميل وقم بتشغيل الأمر المقابل. استبدل العناصر النائبة أدناه بالمعلومات الخاصة بك.

    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>
    

يكمل أمر Service Connector هذا المهام التالية في الخلفية:

  • تمكين الهوية المدارة المعينة من قبل النظام، أو تعيين هوية مستخدم للتطبيق <server-name> الذي تستضيفه Azure App Service.
  • تعيين مسؤول Microsoft Entra إلى المستخدم الحالي الذي قام بتسجيل الدخول.
  • إضافة مستخدم قاعدة بيانات للهوية المدارة المعينة من قبل النظام أو الهوية المدارة المعينة من قبل المستخدم. منح كافة امتيازات قاعدة البيانات <database-name> لهذا المستخدم. يمكن العثور على اسم المستخدم في سلسلة الاتصال في إخراج الأمر السابق.
  • تعيين التكوينات المسماة AZURE_MYSQL_CONNECTIONSTRINGأو AZURE_POSTGRESQL_CONNECTIONSTRINGأو AZURE_SQL_CONNECTIONSTRING إلى مورد Azure استنادا إلى نوع قاعدة البيانات.
  • بالنسبة ل App Service، يتم تعيين التكوينات في شفرة App Settings .

إذا واجهت أي مشكلة عند إنشاء اتصال، فراجع استكشاف الأخطاء وإصلاحها للحصول على المساعدة.

3. تعديل التعليمات البرمجية

  1. تثبيت التبعيات:

    dotnet add package Microsoft.Data.SqlClient
    
  2. احصل على سلسلة الاتصال قاعدة بيانات Azure SQL من متغير البيئة الذي تمت إضافته بواسطة Service Connector.

    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();
    

    لمزيد من المعلومات، راجع استخدام مصادقة Active Directory Managed Identity.

لمزيد من المعلومات، راجع الصفحة الرئيسية لبرمجة العميل إلى Microsoft SQL Server. لمزيد من نماذج التعليمات البرمجية، راجع إنشاء اتصال بدون كلمة مرور بخدمة قاعدة بيانات عبر Service Connector.

4. إعداد بيئة التطوير الخاصة بك

يستخدم DefaultAzureCredential نموذج التعليمات البرمجية هذا للحصول على رمز مميز قابل للاستخدام لقاعدة بيانات Azure من معرف Microsoft Entra ثم إضافته إلى اتصال قاعدة البيانات. بينما يمكنك تخصيص DefaultAzureCredential، فإنه بالفعل متعدد الاستخدامات بشكل افتراضي. يحصل على رمز مميز من مستخدم Microsoft Entra الذي سجل الدخول أو من هوية مدارة، اعتمادا على ما إذا كنت تقوم بتشغيله محليا في بيئة التطوير الخاصة بك أو في App Service.

بدون أي تغييرات أخرى، تكون التعليمات البرمجية الخاصة بك جاهزة للتشغيل في Azure. لتصحيح التعليمات البرمجية محليا، ومع ذلك، تحتاج بيئة التطوير الخاصة بك إلى مستخدم Microsoft Entra مسجل الدخول. في هذه الخطوة، يمكنك تكوين البيئة التي تختارها عن طريق تسجيل الدخول باستخدام مستخدم Microsoft Entra.

  1. تم دمج Visual Studio لنظام التشغيل Windows مع مصادقة Microsoft Entra. لتمكين التطوير وتصحيح الأخطاء في Visual Studio، أضف مستخدم Microsoft Entra في Visual Studio عن طريق تحديد File>Account Settings من القائمة، وحدد Sign in أو Add.

  2. لتعيين مستخدم Microsoft Entra لمصادقة خدمة Azure، حدد خيارات الأدوات>من القائمة، ثم حدد تحديد حساب مصادقة>خدمة Azure. حدد مستخدم Microsoft Entra الذي أضفته وحدد موافق.

لمزيد من المعلومات حول إعداد بيئة التطوير الخاصة بك لمصادقة Microsoft Entra، راجع مكتبة عميل Azure Identity ل .NET.

أنت الآن جاهز لتطوير تطبيقك وتصحيحه باستخدام قاعدة بيانات SQL كواجهة خلفية، باستخدام مصادقة Microsoft Entra.

5. اختبار ونشر

  1. قم بتشغيل التعليمات البرمجية الخاصة بك في بيئة التطوير الخاصة بك. تستخدم التعليمات البرمجية مستخدم Microsoft Entra الذي سجل الدخول في بيئتك للاتصال بقاعدة البيانات الخلفية. يمكن للمستخدم الوصول إلى قاعدة البيانات لأنه تم تكوينها كمسؤول Microsoft Entra لقاعدة البيانات.

  2. نشر التعليمات البرمجية الخاصة بك إلى Azure باستخدام أسلوب النشر المفضل. في App Service، تستخدم التعليمات البرمجية الخاصة بك الهوية المدارة للتطبيق للاتصال بقاعدة البيانات الخلفية.

الأسئلة الشائعة

هل تدعم الهوية المدارة SQL Server؟

نعم. لمزيد من المعلومات، راجع:

أتلقى الخطأ Login failed for user '<token-identified principal>'.

الهوية المدارة التي تحاول طلب رمز مميز لها غير مصرح لها بالوصول إلى قاعدة بيانات Azure.

أجريت تغييرات على مصادقة App Service أو تسجيل التطبيق المقترن. لماذا ما زلت أحصل على الرمز المميز القديم؟

الخدمات الخلفية للهويات المُدارة أيضاً تحتفظ بذاكرة تخزين للرمز المميز الذي يحدث الرمز المميز للمورد الهدف فقط عند انتهاء صلاحيته. إذا قمت بتعديل التكوين بعد محاولة الحصول على رمز مميز مع تطبيقك، فلن تحصل فعلياً على رمز مميز جديد بالأذونات المحدثة حتى تنتهي صلاحية الرمز المميز المخزن مؤقتاً. أفضل طريقة للتغلب على ذلك هي اختبار التغييرات باستخدام نافذة InPrivate (Edge) / خاصة (Safari) / التصفح المتخفي (Chrome). بهذه الطريقة، أنت متأكد من البدء من جلسة عمل جديدة تمت مصادقتها.

كيف أعمل إضافة الهوية المدارة إلى مجموعة Microsoft Entra؟

إذا أردت، يمكنك إضافة الهوية إلى مجموعة Microsoft Entra، ثم منح حق الوصول إلى مجموعة Microsoft Entra بدلا من الهوية. على سبيل المثال، تضيف الأوامر التالية الهوية المُدارة من الخطوة السابقة إلى مجموعة جديدة تُسمى myAzureSQLDBAccessGroup:

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

لمنح أذونات قاعدة البيانات لمجموعة Microsoft Entra، راجع الوثائق الخاصة بنوع قاعدة البيانات المعنية.

أتلقى الخطأ SSL connection is required. Please specify SSL options and retry.

يتطلب الاتصال بقاعدة بيانات Azure إعدادات إضافية ويتجاوز نطاق هذا البرنامج التعليمي. لمزيد من المعلومات، يرجى مراجعة أحد المقالات التالية:

تكوين اتصال TLS في قاعدة بيانات Azure لـ PostgreSQL - خادم واحدتكوين اتصال SSL في التطبيق الخاص بك للاتصال بأمان بقاعدة بيانات Azure لـ MySQL

لقد أنشأت تطبيقي باستخدام قالب Web App + Database، والآن لا يمكنني تكوين اتصال هوية مدار باستخدام أوامر Service Connector.

يحتاج Service Connector إلى الوصول إلى الشبكة إلى قاعدة البيانات من أجل منح حق الوصول إلى هوية التطبيق. عند إنشاء تطبيق آمن افتراضيا وبنية قاعدة بيانات في مدخل Microsoft Azure باستخدام قالب Web App + Database، تقوم البنية بتأمين وصول الشبكة إلى قاعدة البيانات وتسمح فقط بالاتصالات من داخل الشبكة الظاهرية. ينطبق ذلك أيضا على Azure Cloud Shell. ومع ذلك، يمكنك نشر Cloud Shell في الشبكة الظاهرية، ثم تشغيل الأمر Service Connector في Cloud Shell.

الخطوات التالية

ما تعلمته:

  • تكوين مستخدم Microsoft Entra كمسؤول لقاعدة بيانات Azure.
  • الاتصال بقاعدة البيانات الخاصة بك كمستخدم Microsoft Entra.
  • تكوين هوية مدارة معينة من قبل النظام أو معينة من قبل المستخدم لتطبيق App Service.
  • منح الوصول إلى قاعدة البيانات للهوية المدارة.
  • اتصل بقاعدة بيانات Azure من التعليمات البرمجية الخاصة بك (.NET Framework 4.8 و .NET 6 و Node.js و Python و Java) باستخدام هوية مُدارة.
  • اتصل بقاعدة بيانات Azure من بيئة التطوير الخاصة بك باستخدام مستخدم Microsoft Entra.