مشاركة عبر


البرنامج التعليمي: استخدام الهوية المدارة لتوصيل تطبيق ويب Azure بقاعدة بيانات Azure SQL بدون أسرار

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

يوضح لك هذا البرنامج التعليمي كيفية إضافة هوية مدارة إلى نموذج تطبيق .NET يحتوي على خلفية Azure SQL. بعد الانتهاء، يمكن لتطبيقك الاتصال بقاعدة بيانات Azure SQL بشكل آمن دون الحاجة إلى اسم مستخدم وكلمة مرور.

مخطط هندسة سيناريو البرنامج التعليمي.

في هذا البرنامج التعليمي، سوف تتعلّم:

  • تمكين الهويات المدارة
  • امنح قاعدة بيانات Azure SQL حق الوصول إلى الهوية المدارة.
  • تكوين Entity Framework لاستخدام مصادقة Microsoft Entra مع قاعدة بيانات SQL.
  • الاتصال بقاعدة بيانات SQL من Visual Studio باستخدام مصادقة Microsoft Entra.

للحصول على إرشادات حول استخدام قاعدة بيانات Azure ل MySQL أو قاعدة بيانات Azure ل PostgreSQL في أطر عمل Node.jsوPython وJava، راجع البرنامج التعليمي: الاتصال بقواعد بيانات Azure من App Service بدون أسرار باستخدام هوية مدارة.

إشعار

  • معرف Microsoft Entra والهويات المدارة غير مدعومة ل SQL Server المحلي.

  • تختلف مصادقة Microsoft Entra عن مصادقة Windows المتكاملة في خدمات مجال Active Directory (AD) المحلية (DS). يستخدم AD DS ومعرف Microsoft Entra بروتوكولات مصادقة مختلفة تماما. لمزيد من المعلومات، راجع وثائق Microsoft Entra Domain Services.

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

منح وصول مسؤول قاعدة البيانات إلى مستخدم Microsoft Entra

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

قم بتشغيل الأوامر التالية في بيئة Bash من Azure Cloud Shell، أو بعد تسجيل الدخول إلى Azure CLI محليا.

  1. استخدم az ad user list مع المعلمة display-nameأو filterأو upn للحصول على معرف الكائن لمستخدم معرف Microsoft Entra الذي تريد تعيينه كمسؤول. قم بتشغيل az ad user list مستقل لعرض المعلومات لجميع المستخدمين في دليل Microsoft Entra.

    على سبيل المثال، يسرد الأمر التالي معلومات لمستخدم Microsoft Entra ID مع display-name Firstname Lastname.

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

    فيما يلي مثال على الإخراج:

     "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. أضف مستخدم معرف Microsoft Entra كمسؤول على خادم Azure SQL باستخدام az sql server ad-admin create مع المعلمة object-id . في الأمر التالي، استبدل <server-name> باسم الخادم مطروحا منه .database.windows.net اللاحقة، و <entra-id> بالقيمة id من إخراج الأمر السابق az ad user list .

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

إعداد اتصال الهوية المدارة للتطبيق

تقوم الخطوات التالية بتكوين تطبيقك للاتصال بقاعدة بيانات Azure SQL باستخدام هوية مدارة معينة من قبل النظام. لاستخدام هوية معينة من قبل المستخدم، راجع البرنامج التعليمي: الاتصال بقواعد بيانات Azure من App Service بدون أسرار باستخدام هوية مدارة.

تمكين الهوية المدارة للتطبيق

لتمكين هوية مدارة لتطبيق Azure الخاص بك، استخدم الأمر az webapp identity assign ، مع <app-name> استبدال باسم التطبيق الخاص بك. دائما ما يكون اسم الهوية المعينة من قبل النظام هو نفس اسم التطبيق.

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

فيما يلي مثال على الإخراج:

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

لتمكين الهوية المدارة لفتحة نشر، أضف --slot <slot-name> إلى الأمر السابق واستخدم اسم الفتحة في <slot-name>. اسم الهوية المعينة من قبل النظام لفتحة التوزيع هو <app-name>/slots/<slot-name>.

يمكنك أيضا إضافة الهوية إلى مجموعة Microsoft Entra، ثم منح قاعدة بيانات SQL حق الوصول إلى مجموعة 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 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. افتح سطر أوامر PowerShell وسجل الدخول إلى قاعدة بيانات SQL باستخدام أمر SQLCMD التالي. استبدل <server-name> باسم الخادم، <db-name> واسم قاعدة البيانات، و <admin-user> باسم userPrincipalName المستخدم المسؤول من إخراج الأمر السابق az ad user list .

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

    اتبع المطالبات لتسجيل الدخول.

  2. في موجه SQL، قم بتشغيل الأوامر التالية لمنح التطبيق الحد الأدنى من الأذونات التي يحتاجها على قاعدة البيانات. استبدل <identity-name> باسم الهوية المدارة في معرف Microsoft Entra، وهو نفس اسم التطبيق.

    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
    

إشعار

تحتفظ خدمات الهوية المدارة الخلفية بذاكرة تخزين مؤقت للرمز المميز تقوم بتحديث الرمز المميز لمورد هدف فقط عند انتهاء صلاحيته. إذا حاولت تعديل أذونات قاعدة بيانات SQL بعد الحصول أولا على رمز مميز مع تطبيقك، فلن تحصل على رمز مميز جديد مع أذونات محدثة حتى تنتهي صلاحية الرمز المميز المخزن مؤقتا.

إزالة سلسلة الاتصال الأصلية

أي تغييرات أجريتها في web.config أو appsettings.json تعمل مع الهوية المدارة. يمكنك إزالة سلسلة الاتصال الأصلية التي استخدمتها عند نشر تطبيقك في المرة الأولى. لحذف سلسلة الاتصال، قم بتشغيل أمر Azure CLI التالي، مع <app-name> استبدال باسم التطبيق الخاص بك واسم <connection-string-name> سلسلة الاتصال الخاصة بك.

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

إعداد بيئة التطوير

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

تم دمج Visual Studio لنظام التشغيل Windows مع مصادقة Microsoft Entra.

  1. لتمكين التطوير وتصحيح الأخطاء في Visual Studio، أضف مستخدم Microsoft Entra في Visual Studio عن طريق تحديد File>Account Settings من القائمة العلوية، ثم حدد Sign in أو Add.
  2. لتعيين مستخدم Microsoft Entra لمصادقة خدمة Azure، حدد خيارات الأدوات> من القائمة العلوية، ثم حددتحديد حساب> خدمة Azure. حدد مستخدم Microsoft Entra الذي أضفته وحدد موافق.

تعديل مشروعك ونشر تطبيقك

يستخدم تطبيق الويب المدعوم بقاعدة بيانات Azure SQL سياق قاعدة بيانات للاتصال بقاعدة البيانات. لاستخدام مصادقة Microsoft Entra للعمل مع التطبيق، يجب تحديث سياق قاعدة البيانات للإشارة إلى موفر Entity Framework SQL Server، والذي يعتمد على موفر ADO.NET Microsoft.Data.SqlClient الحديث.

يحل موفر Entity Framework محل موفر SQL Server المضمن System.Data.SqlClient ، ويتضمن دعما لأساليب مصادقة معرف Microsoft Entra. لمزيد من المعلومات، راجع Microsoft.EntityFramework.SqlServer.

[DbConfigurationType(typeof(MicrosoftSqlDbConfiguration))] يعمل محليا للاستخدام Microsoft.Data.SqlClient في سياق قاعدة البيانات، ولكن لأنه System.Data.SqlClient تم ترميزه بشكل ثابت كموفر في Azure App Service، يجب توسيع MicrosoftSqlDbConfiguration لإعادة توجيه System.Data.SqlClient المراجع إلى Microsoft.Data.SqlClient بدلا من ذلك. تختلف الخطوات بناء على ما إذا كان لديك تطبيق ASP.NET أو ASP.NET Core.

يستخدم تطبيق ASP.NET Core Entity Framework Core بشكل افتراضي.

  1. في وحدة تحكم Visual Studio Package Manager، أضف حزمة NuGet Microsoft.Data.SqlClient.

    Install-Package Microsoft.Data.SqlClient
    
  2. في appsettings.json، استبدل قيمة سلسلة الاتصال بالتعليمات البرمجية التالية، واستبدل <server-name<database-name> و باسم الخادم واسم قاعدة البيانات.

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

    إشعار

    يمكنك استخدام المصادقة الافتراضية ل Active Directory على جهازك المحلي وفي Azure App Service. يمكن لبرنامج التشغيل الحصول على رمز مميز من معرف Microsoft Entra بعدة طرق مختلفة.

    إذا تم نشر التطبيق، يحصل برنامج التشغيل على رمز مميز من الهوية المدارة المعينة من قبل النظام للتطبيق. يمكن لبرنامج التشغيل أيضا المصادقة بهوية مدارة معينة من قبل المستخدم إذا قمت بتضمينها User Id=<client-id-of-user-assigned-managed-identity>; في سلسلة الاتصال.

    تخزن DefaultAzureCredential الفئة الرمز المميز مؤقتا في الذاكرة وتسترده من معرف Microsoft Entra قبل انتهاء الصلاحية. لا تحتاج إلى أي تعليمات برمجية مخصصة لتحديث الرمز المميز.

    لديك الآن كل ما تحتاجه للاتصال بقاعدة بيانات Azure SQL عند تصحيح الأخطاء في Visual Studio. تستخدم التعليمات البرمجية مستخدم Microsoft Entra الذي قمت بتكوينه عند إعداد بيئة التطوير الخاصة بك.

  3. قم بتشغيل تَطبِيقك. يتصل تطبيق CRUD في المستعرض الخاص بك بقاعدة بيانات Azure SQL مباشرة، باستخدام مصادقة Microsoft Entra. يتيح لك هذا الإعداد تشغيل عمليات ترحيل قاعدة البيانات من Visual Studio.

  4. نشر التغييرات باستخدام أوامر Git التالية:

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

اختبار التطبيق

عندما تعرض صفحة الويب الجديدة قائمة المهام، يتصل تطبيقك بقاعدة البيانات باستخدام الهوية المدارة.

لقطة شاشة تعرض تطبيق Azure بعد الترحيل الأول للتعليمات البرمجية.

يمكنك الآن تحرير قائمة to-do.

تنظيف الموارد

في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تتوقع احتياجك لهذه الموارد في المستقبل، فاحذف مجموعة الموارد من خلال تشغيل الأمر التالي في Cloud Shell:

az group delete --name myResourceGroup

قد يستغرق تشغيل هذا الأمر دقيقة.