إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
تحتوي العديد من التطبيقات على أكثر من مكون واحد. على سبيل المثال، قد يكون لديك واجهة أمامية متاحة للجمهور وتتصل بواجهة برمجة تطبيقات خلفية أو تطبيق ويب. قد تتصل الموارد الخلفية بقاعدة بيانات، أو حساب تخزين، أو خزنة مفاتيح، أو آلة افتراضية أخرى، أو مزيج من هذه الموارد. هذه البنية هي أساس تطبيق من الفئة N. من المهم أن تكون تطبيقات مثل هذه مصممة لحماية الموارد الخلفية إلى أقصى حد ممكن.
يشرح هذا الدرس كيفية نشر تطبيق آمن من المستوى N مع تطبيق ويب واجهة أمامية يتصل بتطبيق ويب آخر معزول في الشبكة. يتم عزل جميع حركة المرور داخل الشبكة الافتراضية في Azure الخاص بك باستخدام Virtual Network ودمج وprivate endpoints. للحصول على إرشادات أكثر شمولا تتضمن سيناريوهات أخرى، راجع:
في هذا البرنامج التعليمي، سوف تتعلّم:
- أنشئ شبكة افتراضية وشبكات فرعية لتكامل الشبكة الافتراضية في خدمة التطبيقات
- إنشاء مناطق DNS خاصة ونقاط نهاية خاصة
- تكوين تكامل الشبكة الافتراضية في خدمة التطبيقات
- تعطيل المصادقة الأساسية في خدمة التطبيقات
- قم بنشرها باستمرار على تطبيق ويب خلفي مغلق
المتطلبات الأساسية
يستخدم الدرس تطبيقين Node.js نموذجيين مستضافين على GitHub. إذا لم يكن لديك حساب GitHub بالفعل، فبادر بإنشاء حساب مجانا.
إذا لم يكن لديك حساب Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
لإكمال هذا البرنامج التعليمي:
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع بدء استخدام Azure Cloud Shell.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على نظام تشغيل Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك. للحصول على خيارات تسجيل الدخول الأخرى، راجع المصادقة على Azure باستخدام Azure CLI.
عندما يُطلب منك، قم بتثبيت ملحق Azure CLI عند الاستخدام لأول مرة. لمزيد من المعلومات حول الملحقات، راجع استخدام الملحقات وإدارتها باستخدام Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
راجع بنية السيناريو
يوضح هذا الدرس كيفية تكوين بنية موضحة في الرسم البياني التالي. يمثل السيناريو أحد تكوينات المستويات N الممكنة في خدمة التطبيقات. يمكنك استخدام المفاهيم التي يغطيها هذا البرنامج التعليمي لإنشاء تطبيقات أكثر تعقيدا من المستوى N.
تحتوي البنية على شبكة افتراضية تحتوي على شبكتين فرعيتين. شبكة فرعية واحدة مدمجة مع تطبيق الويب الأمامي، والشبكة الفرعية الأخرى تحتوي على نقطة نهاية خاصة لتطبيق الويب الخلفي. تحظر الشبكة الافتراضية جميع حركة المرور الواردة على الشبكة، باستثناء الحركة التي تستهدف تطبيق الواجهة الأمامية المدمجة.
يتم دمج تطبيق الويب الأمامي في الشبكة الافتراضية ويمكن الوصول إليه من الإنترنت العام.
يمكن الوصول إلى تطبيق الويب الخلفي فقط من خلال نقطة النهاية الخاصة في الشبكة الافتراضية.
تتكامل نقطة النهاية الخاصة مع تطبيق الويب الخلفي وتجعل التطبيق متاحا عبر عنوان IP خاص.
يتيح Private DNS zone حل اسم DNS إلى عنوان IP الخاص لنقطة الطرف.
إشعار
لتكوين تكامل الشبكة الافتراضية ونقاط النهاية الخاصة، تحتاج إلى مستوى Basic في "Azure App Service" أو مستوى أعلى. لا يدعم المستوى المجاني هذه الميزات.
السيناريو في هذا الدرس يوفر السلوك التالي:
- حركة المرور العامة إلى تطبيق الواجهة الخلفية محجوبة.
- تمر حركة المرور الصادرة من خدمة التطبيقات إلى الشبكة الافتراضية ويمكنها الوصول إلى التطبيق الخلفي.
- يمكن لخدمة التطبيقات تنفيذ حل DNS لتطبيق الواجهة الخلفية.
أنشئ تطبيقي الويب
تحتاج إلى تطبيقين ويب لخدمة التطبيقات، واحد للواجهة الأمامية وآخر للخلفية. يمكن للتطبيقات العمل في نفس موقع المنطقة. لإعداد تكامل الشبكة الافتراضية والعمل مع نقاط النهاية الخاصة، استخدم على الأقل مستوى Basic من "Azure App Service". تقوم بتكوين تكامل الشبكة الافتراضية وإعدادات أخرى لاحقا.
أنشئ مجموعة موارد لإدارة جميع الموارد لهذا الدرس.
حدد الاسم
<resource-group>البديل لمجموعة الموارد الجديدة، مثلzava-resources. حدد العنصر<region-location>المؤقت للمنطقة الخاصة بمجموعة الموارد الجديدة الخاصة بك، مثلeastus.# Define variables for the resource group name and region location resourceGroupName=<resource-group> regionLocation=<region-location> # Create the resource group az group create --name $resourceGroupName --location $regionLocationلمزيد من المعلومات، راجع مرجع إنشاء أوامر من مجموعة az .
أنشئ خطة خدمة تطبيقات لمواردك.
حدد الاسم
<app-service-plan>المؤقت لخطة App Service الجديدة الخاصة بك، مثلzava-app-service-plan.مثال الدرس يضبط المعامل
--skuإلىP1V3(Premium V3). يمكنك استخدام هذه القيمة أو تحديد وحدة تخزين مختلفة. يجب أن يدعم وحدة التخزين ميزات الشبكة المطلوبة لهذا الدرس. اختر المستوى الأساسي أو أعلى.# Define a variable for the App Service plan name appServicePlanName=<app-service-plan> # Create the App Service plan az appservice plan create --name $appServicePlanName --resource-group $resourceGroupName --is-linux --location $regionLocation --sku P1V3لمزيد من المعلومات، راجع خطة إنشاء أوامر في az appservice .
أنشئ تطبيقات الويب في الواجهة الأمامية والخلفية.
مثال الدرس ينشئ تطبيقين Node.js نموذجيين، حيث يكون إصدار لغة التشغيل هو
NODE:24-lts. إذا كنت تفضل استخدام تطبيقاتك الخاصة، اضبط--runtimeقيمة المعلمة<language-version>وفقا لذلك. يمكنك تشغيلaz webapp list-runtimesالأمر لقائمة أوقات التشغيل المتاحة:az webapp list-runtimesقم بتعيين
<frontend-app-name>الاسم المؤقت لتطبيق الويب الجديد الخاص بك في الواجهة الأمامية، مثلzava-frontend-app. يجب أن يكون الاسم فريدا عالميا ويتكون من أحرف صالحة (a-z,0-9,-). وبالمثل، قم بتعيين الاسم<backend-app-name>المؤقت لتطبيق الويب الجديد الخاص بك في الخلفية، مثلzava-backend-app.# Define variables for the App Service web app names frontendAppName=<frontend-app-name> backendAppName=<backend-app-name> # Create the web apps az webapp create --name $frontendAppName --resource-group $resourceGroupName --plan $appServicePlanName --runtime "NODE:24-lts" az webapp create --name $backendAppName --resource-group $resourceGroupName --plan $appServicePlanName --runtime "NODE:24-lts"لمزيد من المعلومات، راجع مرجع إنشاء أوامر على الويب في az .
إنشاء البنية التحتية للشبكة
تتكون البنية التحتية للشبكة الافتراضية من الموارد التالية:
- مثيل الشبكة الافتراضية في Azure
- شبكة فرعية لتكامل الشبكة الافتراضية في خدمة التطبيقات
- شبكة فرعية أخرى لنقطة النهاية الخاصة
- منطقة Azure Private DNS
- نقطة نهاية خاصة
إنشاء شبكة Azure ظاهرية.
حدد الاسم
<virtual-network-name>المؤقت لشبكتك الافتراضية الجديدة، مثلzava-virtual-network. يجب أن يكون الاسم فريدًا عالميًا.# Define a variable for the virtual network name virtualNetworkName=<virtual-network-name> # Create the virtual network az network vnet create --resource-group $resourceGroupName --location $regionLocation --name $virtualNetworkName --address-prefixes 10.0.0.0/16لمزيد من المعلومات، راجع مرجع أوامر إنشاء شبكة az vnet .
أنشئ شبكة فرعية لتكامل الشبكة الافتراضية في خدمة التطبيقات.
قم بتعيين الاسم
<network-integration-subnet>المؤقت لشبكتك الفرعية الجديدة التي تدعم تكامل الشبكة الافتراضية، مثلzava-integration-subnet.بالنسبة ل App Service، يوصى بأن يكون للشبكة الفرعية لتكامل الشبكة الظاهرية كتلة
/26CIDR كحد أدنى./24أكثر من كافي. يحدد--delegations Microsoft.Web/serverfarmsأنه تم تفويض الشبكة الفرعية لتكامل الشبكة الظاهرية لخدمة التطبيقات.# Define a variable for the integration subnet name networkIntegrationSubnet=<network-integration-subnet> # Create the subnet for virtual network integration az network vnet subnet create --resource-group $resourceGroupName --vnet-name $virtualNetworkName --name $networkIntegrationSubnet \ --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms \ --disable-private-endpoint-network-policies falseلمزيد من المعلومات، راجع مرجع أوامر إنشاء شبكة z.
أنشئ شبكة فرعية أخرى لنقاط النهاية الخاصة.
قم بتعيين الاسم
<private-endpoint-subnet>المؤقت لاسم الشبكة الفرعية الجديدة التي تدعم نقطة النهاية الخاصة، مثلzava-endpoint-subnet.# Define a variable for the private endpoint subnet name privateEndpointSubnet=<private-endpoint-subnet> # Create the subnet for the private endpoint az network vnet subnet create --resource-group $resourceGroupName --vnet-name $virtualNetworkName --name $privateEndpointSubnet \ --address-prefixes 10.0.1.0/24 \ --disable-private-endpoint-network-policies trueبالنسبة لشبكات النقاط النهائية الخاصة، يجب تعطيل سياسات شبكة النقاط النهائية الخاصة عن طريق تعيين العلم
--disable-private-endpoint-network-policiesعلىtrue. لمزيد من المعلومات، راجع المعلمات الاختيارية لأمر إنشاء شبكة vnet الفرعية في az .إشعار
قد يحل العلم
--private-endpoint-network-policiesمحل العلم--disable-private-endpoint-network-policiesقريبا.إنشاء منطقة Azure Private DNS.
اضبط
<private-zone-name>المؤقت ليصبح اسم منطقة Private DNS الجديدة الخاصة بك، مثلzava-private.azurewebsites.net.# Define a variable for the Private DNS zone privateDNSZone=<private-zone-name> # Create the Private DNS zone az network private-dns zone create --resource-group $resourceGroupName --name $privateDNSZoneلمزيد من المعلومات، راجع مرجع أوامر إنشاء شبكة z. لمزيد من المعلومات حول تكوين منطقة Private DNS، راجع Azure service DNS zone configuration.
إشعار
إذا أنشأت نقطة النهاية الخاصة في بوابة Azure، يتم إنشاء منطقة Azure Private DNS لتكوينك تلقائيا. لتحقيق الاتساق الإجرائي في هذا الدرس، تقوم بإنشاء منطقة Private DNS ونقطة النهاية الخاصة بشكل منفصل باستخدام Azure CLI.
اربط منطقة Private DNS بالشبكة الافتراضية.
حدد الاسم
<dns-link-name>المؤقت لرابط DNS الجديد الخاص بك، مثلzava-private-link.# Define a variable for the DNS link name dnsLinkName=<dns-link-name> # Create the link between the Private DNS zone and the virtual network az network private-dns link vnet create --resource-group $resourceGroupName --name $dnsLinkName --zone-name $privateDNSZone \ --virtual-network $virtualNetworkName --registration-enabled Falseلمزيد من المعلومات، راجع مرجع أوامر private-dns network az link vnet create command.
في شبكة النهاية الخاصة لشبكتك الافتراضية، أنشئ نقطة نهاية خاصة لتطبيق الويب الخلفي الخاص بك.
قم بتعيين العنصر
<private-endpoint-name>المؤقت لاسم نقطة النهاية الخاصة الجديدة لتطبيق الويب الخلفي الخاص بك، مثلzava-backend-endpoint. قم بتعيين المفتاح<service-connection-name>المؤقت لاسم الاتصال الجديد للخدمة، مثلzava-backend-connection.# Define variables for the private endpoint and service connection privateEndpointName=<private-endpoint-name> serviceConnectionName=<service-connection-name> # Get the resource ID of the backend web app resourceId=$(az webapp show --resource-group $resourceGroupName --name $backendAppName --query id --output tsv) # Create the private endpoint for the backend web app by using the resource ID az network private-endpoint create --resource-group $resourceGroupName --name $privateEndpointName --location $regionLocation \ --connection-name $serviceConnectionName --private-connection-resource-id $resourceId \ --group-id sites --vnet-name $virtualNetworkName --subnet $privateEndpointSubnetلمزيد من المعلومات، راجع مرجع أوامر إنشاء إنشاء خاص في شبكة az .
اربط نقطة النهاية الخاصة بمنطقة Private DNS مع مجموعة DNS Zone لتطبيق الويب الخلفي الخاص بنقطة الطرف.
قم بتعيين الاسم
<dns-zone-group-name>المؤقت لمجموعة DNS Zone الجديدة، مثلzava-dns-zone-group. تساعد مجموعة منطقة DNS في التحديث التلقائي لمنطقة Private DNS عند تحديث نقطة النهاية الخاصة.# Define a variable for the DNS Zone group dnsZoneGroupName=<dns-zone-group-name> # Link the private endpoint to the Private DNS az network private-endpoint dns-zone-group create --resource-group $resourceGroupName --endpoint-name $privateEndpointName \ --name $dnsZoneGroupName --private-dns-zone $privateDNSZone --zone-name $privateDNSZoneلمزيد من المعلومات، راجع مرجع أوامر إنشاء dns-zone-group الخاص بشبكة az .
تأكد من رفض الوصول المباشر إلى نقطة النهاية الخاصة بك.
عندما تنشئ نقطة نهاية خاصة لتطبيق خدمة التطبيقات، يتم تعطيل الوصول العام ضمنيا. إذا حاولت الوصول إلى تطبيق الويب الخلفي باستخدام رابط الرابط الافتراضي، يتم رفض وصولك.
في المتصفح، أدخل عنوان URL الافتراضي لتطبيق الويب الخلفي الخاص بك، مثل
<backend-app-name>.azurewebsites.net.تشير رسالة المتصفح إلى رفض الوصول المباشر:
لمزيد من المعلومات حول قيود الوصول إلى App Service مع نقاط النهاية الخاصة، راجع قيود الوصول إلى "Azure App Service".
تكوين تكامل virtual network
بعد إنشاء بنية الشبكة الافتراضية، يمكنك إعداد تكامل الشبكة الافتراضية على تطبيق الويب الخاص بك في الواجهة الأمامية. يسمح تكامل الشبكة الظاهرية لنسبة استخدام الشبكة الصادرة بالتدفق مباشرة إلى الشبكة الظاهرية. افتراضيا، فقط حركة المرور المحلية لبروتوكول IP المعرفة في بروتوكول RFC-1918 > الخاص بمساحة العناوين إلى الشبكة الافتراضية. هذا المستوى من التوجيه هو ما تحتاجه لتمكين نقاط النهاية الخاصة.
فعل تكامل الشبكة الافتراضية على تطبيق الويب الخاص بك في الواجهة الأمامية. تفترض الأوامر التالية أن الشبكة الفرعية وتطبيق الويب موجودان في نفس مجموعة الموارد.
az webapp vnet-integration add --resource-group $resourceGroupName --name $frontendAppName --vnet $virtualNetworkName --subnet $networkIntegrationSubnet
لمزيد من المعلومات، راجع مرجع أوامر إضافة vnet-integration في az webapp .
لتوجيه جميع حركة المرور إلى الشبكة الافتراضية، انظر إدارة توجيه تكامل الشبكة الافتراضية. يمكن أيضا استخدام توجيه جميع حركة المرور إذا كنت ترغب في توجيه حركة الإنترنت عبر شبكتك الافتراضية، مثل الشبكة الافتراضية في Azure NAT أو Azure Firewall.
تمكين النشر في تطبيق الويب الخلفي
نظرا لأن تطبيق الويب الخلفي الخاص بك غير متاح للجمهور، يجب عليك السماح لأداة النشر المستمر بالوصول إلى تطبيقك من خلال جعل موقع إدارة المحتوى متاحا للجمهور عبر الإنترنت. يمكن لتطبيق الويب الرئيسي نفسه الاستمرار في رفض جميع نسب استخدام الشبكة.
تمكين الوصول العام لتطبيق الويب الخلفي.
az webapp update --resource-group $resourceGroupName --name $backendAppName --set publicNetworkAccess=Enabledقم بتعيين إجراء القاعدة غير المتطابقة لتطبيق الويب الرئيسي لرفض كل حركة المرور.
يرفض هذا الإعداد الوصول العام إلى تطبيق الويب الرئيسي على الرغم من تعيين إعداد الوصول العام للتطبيق للسماح بالوصول العام.
az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \ --resource-type sites --set properties.siteConfig.ipSecurityRestrictionsDefaultAction=Denyتعيين إجراء القاعدة غير المتطابقة لموقع SCM للسماح بكافة نسبة استخدام الشبكة.
az resource update --resource-group $resourceGroupName --name $backendAppName --namespace Microsoft.Web \ --resource-type sites --set properties.siteConfig.scmIpSecurityRestrictionsDefaultAction=Allow
تقييد الوصول إلى FTP وSCM
نظرا لأن موقع SCM الخاص بك في الواجهة الخلفية متاح للجمهور، تحتاج إلى تقييده بأمان أفضل.
تعطيل الوصول إلى FTP لكل من تطبيق الويب الأمامي والخلفية:
az resource update --resource-group $resourceGroupName --name ftp --namespace Microsoft.Web \ --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false az resource update --resource-group $resourceGroupName --name ftp --namespace Microsoft.Web \ --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=falseتعطيل الوصول الأساسي للمصادقة إلى منافذ WebDeploy ومواقع SCM/الأدوات المتقدمة لكلا التطبيقين:
az resource update --resource-group $resourceGroupName --name scm --namespace Microsoft.Web \ --resource-type basicPublishingCredentialsPolicies --parent sites/<frontend-app-name> --set properties.allow=false az resource update --resource-group $resourceGroupName --name scm --namespace Microsoft.Web \ --resource-type basicPublishingCredentialsPolicies --parent sites/<backend-app-name> --set properties.allow=false
عند تعطيل المصادقة الأساسية على خدمة التطبيقات، فإنك تحد من الوصول إلى نقاط نهاية FTP وSCM للمستخدمين المسجلين في Microsoft Entra ID. هذا الإجراء يؤمن تطبيقاتك بشكل أكبر. لمزيد من المعلومات حول تعطيل المصادقة الأساسية بما في ذلك كيفية اختبار ومراقبة تسجيل الدخول، راجع تعطيل المصادقة الأساسية على خدمة التطبيقات.
تكوين النشر المستمر باستخدام GitHub Actions
لهذا الإجراء، تحتاج إلى تطبيقين جاهزين للنشر على واجهة التطبيقات وتطبيقات الواجهة الخلفية لخدمة التطبيقات. للوصول إلى تطبيقات الويب، تحتاج إلى مبدأ خدمة ونشر مستمر مع GitHub Actions.
احصل على تطبيقات الويب لاختبار النشر
مستودعات Azure Samples على GitHub توفر تطبيقات Node.js عينات للنشر.
في المتصفح، اذهب إلى تطبيق Node.js Backend النموذجي.
قم بتقسيم مستودع GitHub حتى يكون لديك نسختك الخاصة لإجراء التعديلات. هذه العينة تبني تطبيق 'مرحبًا بالعالم'. تقوم بنشر هذا التطبيق على تطبيق الويب الخلفي الخاص بك.
كرر نفس العملية مع نموذج Node.js تطبيق الواجهة الأمامية.
قم بتقسيم مستودع GitHub حتى يكون لديك نسختك الخاصة لإجراء التعديلات. هذا العينة يبني تطبيق ويب يجلب ويعرض محتوى الرابط. تقوم بنشر هذا التطبيق على تطبيق الويب الخاص بك في الواجهة الأمامية.
تكوين مبدأ الخدمة
تحتاج إلى مدير خدمة لتطبيق الويب الأمامي وتطبيق الويب الخلفي.
إنشاء كيان الخدمة.
حدد الاسم
<service-principal-name>المؤقت لاسم مدير الخدمة الجديد، مثلzava-service-principal.استبدل قيم المعلمات الأخرى
<placeholder>بمعلومات الموارد الخاصة بك.# Define a variable for the service principal name servicePrincipalName=<service-principal-name> # Link the private endpoint to the Private DNS az ad sp create-for-rbac --name <service-principal-name> --role contributor --scopes \ /subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<frontend-app-name> \ /subscriptions/<subscription-ID>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<backend-app-name>الإخراج هو كائن JSON مع بيانات اعتماد تعيين الدور التي توفر الوصول إلى تطبيقات App Service.
{ "appId": "00001111-aaaa-2222-bbbb-3333cccc4444", "displayName": "<service-principal-name>", "password": "0Aa!1Bb!2Cc!3Dd!4Ee!5Ff!6Gg!7Hh!8Ii!9Jj!", "tenantId": "aaaabbbb-6666-cccc-7777-dddd8888eeee" }يتضمن ملف JSON كلمة المرور الرئيسية للخدمة الخاصة بك، والتي تظهر فقط في الوقت الحالي.
نصيحة
من الممارسات الجيدة منح الحد الأدنى من الوصول. في هذا المثال، النطاق محدود بالتطبيقات فقط، وليس على مجموعة الموارد بأكملها.
انسخ كائن JSON ليكون لديك سجل لاسم الشركة الرئيسية في خدمتك.
قدم بيانات اعتماد المديرين لخدمتك لعملية تسجيل الدخول
Azure كجزء من سير عمل GitHub Action الخاص بك. قم بتخزين بيانات الاعتماد كأسرار في GitHub يتم الإشارة إليها في سير عملك.
في المتصفح، اذهب إلى المستودع المقسم لتطبيق Node.js الخلفية على GitHub.
اذهب إلى الإعدادات>: أسرار الأمان> والمتغيرات >والإجراءات اللازمة.
اختر سر مستودع جديد وأنشئ سريا لكل من الإعدادات التالية.
استخدم القيم من مخرجات JSON الخاصة بك.
الإعداد القيمة مثال AZURE_CLIENT_ID <application/client-id>00001111-aaaa-2222-bbbb-3333cccc4444AZURE_TENANT_ID <tenant-id>aaaabbbb-6666-cccc-7777-dddd8888eeeeAZURE_SUBSCRIPTION_ID <subscription-id>cccc2c2c-dd3d-ee4e-ff5f-aaaaaa6a6a6aكرر هذه العملية للمستودع المقسم لتطبيق Node.js الواجهة الأمامية على GitHub.
إعداد النشر المستمر باستخدام GitHub Actions
يمكنك إعداد النشر المستمر باستخدام GitHub Actions.
في بوابة Azure، توجه إلى صفحة نظرة عامة الخاصة بتطبيق الويب الخاص بك في الواجهة الأمامية.
في القائمة اليسرى، اختر مركز نشر النشر>.
في تبويب Settings، قم بتعيين خيار Source على GitHub:
إذا كنت تقوم بالتوزيع من GitHub للمرة الأولى، فحدد تخويل واتبع مطالبات التفويض. إذا كنت تريد التوزيع من مستودع مستخدم مختلف، فحدد تغيير الحساب.
بعد تفويض حسابك Azure باستخدام GitHub، اختر Organization، Repository، و Branch لتكوين CI/CD لها. إذا لم تتمكن من العثور على منظمة أو مستودع، قد تحتاج إلى تفعيل المزيد من الأذونات على GitHub. لمزيد من المعلومات، راجع إدارة وصول المستخدمين إلى مستودعات مؤسستك.
الإعداد القيمة منظمة <your-GitHub-organization>المستودع <forked-repository-name>الفرع أساسي حدد حفظ.
كرر هذه العملية لتطبيق الويب الخلفي الخاص بك والمستودع المفرع المقابل.
التحقق من الاتصالات والوصول إلى التطبيقات
الآن أنت جاهز لفحص الاتصالات والوصول إلى تطبيقات الويب الخاصة بك في الواجهة الأمامية والخلفية.
حاول التصفح مباشرة إلى تطبيق الويب الخلفي الخاص بك مع عنوانه المناسب،
https://<backend-app-name>.azurewebsites.net.يجب أن ترى رسالة المتصفح التالية:
إذا استطعت الوصول إلى التطبيق، تحقق من إعدادك:
تأكد من أن نقطة النهاية الخاصة مضبوطة بشكل صحيح.
تأكد من أن قيود الوصول لتطبيقك مضبوطة على رفض كل حركة المرور لتطبيق الويب الرئيسي.
الآن جرب تصفح التطبيق المباشر على الويب الخاص بك مع رابط الرابط الخاص به.
https://<frontend-app-name>.azurewebsites.netعندما ينجح الاتصال، ترى الصفحة التالية:
في مربع العنوان، أدخل رابط تطبيق الويب الخلفي الخاص بك،
https://<backend-app-name>.azurewebsites.net، واختر الجلب.إذا قمت بإعداد الاتصالات بشكل صحيح، يتم تحديث الصفحة لعرض محتوى الرسائل من تطبيق الويب الخلفي:
جميع حركة المرور الصادرة من تطبيق الويب الأمامي تمر عبر الشبكة الافتراضية. يتصل تطبيق الويب الأمامي بشكل آمن بتطبيق الويب الخلفي من خلال نقطة النهاية الخاصة.
إذا كان هناك خطأ في اتصالاتك، سترى رسالة الخطأ 403 - المحظور في المخرج.
إنشاء جلسة SSH وفتح غلاف عن بعد
تحقق من أن تطبيق الويب في الواجهة الأمامية يصل إلى تطبيق الويب الخلفي عبر الرابط الخاص باستخدام SSH إلى مثيل واجهة أمامية.
أنشئ جلسة SSH إلى حاوية الويب في تطبيقك وافتح shell عن بعد في متصفحك:
az webapp ssh --resource-group $resourceGroupName --name $frontendAppNameلمزيد من المعلومات، راجع مرجع أوامر ssh في az webapp .
بعد فتح الشل في متصفحك، تأكد من أن تطبيق الويب الخلفي الخاص بك يتم الوصول إليه باستخدام عنوان IP الخاص بتطبيق الويب الخلفي.
في الأوامر التالية، استبدل
<placeholder>قيم المعلمات بمعلومات موردك الخاص.شغل الأمر
nslookup:nslookup <backend-app-name>.azurewebsites.netشغل
curlالأمر للتحقق من محتوى الموقع مرة أخرى:curl https://<backend-app-name>.azurewebsites.net
يجب أن
nslookupيحل الأمر إلى عنوان IP الخاص بتطبيق الويب الخلفي الخاص بك. يجب أن يكون عنوان IP الخاص عنوانا من شبكتك الظاهرية.يمكنك تأكيد عنوان IP الخاص بك من خلال بوابة Azure. اذهب إلى صفحة إعدادات>شبكة التطبيقات الخلفية الخاصة بك.
كرر نفس
nslookupالشيء والأوامرcurlمن طرفية أخرى (واحدة ليست جلسة SSH على مثيلات الواجهة الأمامية لديك).
يعيد الأمر
nslookupعنوان IP العام لتطبيق الويب الخلفي. نظرا لأن الوصول العام إلى تطبيق الويب الخلفي معطل، إذا حاولت الوصول إلى عنوان IP العام، تظهر لك رسالة خطأ رفض الوصول. هذا الخطأ يعني أن الموقع غير متاح من الإنترنت العام، وهو السلوك المقصود.nslookupالأمر لا يحل إلى عنوان IP الخاص لأن العنوان قابل للحل فقط من داخل الشبكة الافتراضية عبر منطقة DNS الخاصة. فقط تطبيق الويب الأمامي موجود داخل الشبكة الافتراضية. إذا حاولت تشغيلcurlالأمر على تطبيق الويب الخلفي من الطرفية الخارجية، فإن ملف HTML المرتجع يحتوي على رسالة الخطأ 403: ممنوع - التطبيق الذي حاولت الوصول إليه قد حظر وصولك. بعض الأجهزة تعرض نفس HTML كما تظهر صفحة الخطأ عند محاولة الوصول المباشر إلى تطبيق الويب الخلفي.
تنظيف الموارد
في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تتوقع احتياجك لهذه الموارد في المستقبل، فاحذف مجموعة الموارد من خلال تشغيل الأمر التالي في Cloud Shell.
استبدل قيمة المعلمة <placeholder> بمعلومات مصدرك الخاص:
az group delete --name <resource-group>
قد يستغرق تنفيذ هذا الأمر عدة دقائق.
الأسئلة الشائعة
في هذا الدرس، قمت بنشر بنية تحتية أساسية لدعم تطبيق ويب آمن من المستوى N. توفر خدمة التطبيقات ميزات تساعدك على ضمان تشغيل تطبيقات تتبع أفضل الممارسات والتوصيات الأمنية.
يحتوي هذا القسم على إجابات على الأسئلة الشائعة التي يمكن أن تساعدك في تأمين تطبيقاتك بشكل أكبر ونشر وإدارة مواردك وفقا لأفضل الممارسات.
النشر باستخدام طرق أخرى غير القاعدة الرئيسية للخدمة
في هذا الدرس، قمت بتعطيل المصادقة الأساسية. لا يمكنك المصادقة مع موقع SCM الخلفي باستخدام اسم مستخدم وكلمة مرور، أو باستخدام ملف تعريف للنشر. ومع ذلك، بدلا من المصادقة باستخدام مبدأ الخدمة، يمكنك استخدام بيانات اعتماد OpenID Connect .
تكوين نشر GitHub Actions في App Service
يقوم Azure بإنشاء ملف سير عمل تلقائيا في مستودعك. الالتزامات الجديدة في المستودع والفرع المحدد تنشر باستمرار في تطبيق خدمة التطبيقات الخاص بك. يمكنك تتبع الالتزامات والنشر في تبويب Logs في GitHub.
تتم إضافة ملف سير عمل افتراضي يستخدم ملف تعريف نشر للمصادقة على App Service إلى مستودع GitHub الخاص بك. يمكنك عرض هذا الملف بالانتقال إلى <repo-name>/.github/workflows/ الدليل.
تأكد من الوصول الآمن للجمهور إلى موقع SCM الخلفي
عندما تقوم بقفل الوصول إلى FTP وSCM، يمكنك التأكد من أن المبادئ المدعومة Microsoft Entra فقط هي التي يمكنها الوصول إلى نقطة نهاية SCM، حتى لو كانت النقطة متاحة للجمهور. يساعدك هذا الإعداد على طمأنتك بأن تطبيق الويب الخلفي لا يزال آمنا.
نشر بدون موقع SCM مفتوح في الواجهة الخلفية
إذا كنت قلقا بشأن تمكين الوصول العام إلى موقع SCM، أو لديك قيود سياسية، فكر في خيارات نشر خدمة التطبيقات الأخرى مثل التشغيل من حزمة ZIP.
نشر هذه البنية المعمارية باستخدام قالب
يمكن نشر الموارد التي أنشأتها في هذا الدرس باستخدام قالب Azure Resource Manager (قالب ARM) أو قالب Bicep. application المتصل بملف Bicep تطبيق ويب خلفي يسمح لك بإنشاء حل تطبيق آمن من المستوى N.
لتعلم كيفية نشر قوالب ARM و Bicep، راجع نشر ملفات Bicep باستخدام Azure CLI.