إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذه المقالة سوف تكون تطبيق خدمة التطبيقات من خلال شبكة آمنة واتصال معزول عن الشبكات إلى الخدمات الخلفية. السيناريو المستخدم كمثال في البرنامج التعليمي: تأمين اتصال الخدمة المعرفية من خدمة التطبيقات باستخدام مفتاح Vault . عند الانتهاء، يكون لديك تطبيق App Service يصل إلى كل من Key Vault وخدمات Azure الذكاء الاصطناعي من خلال شبكة Azure الظاهرية، ولا يسمح لنسبة استخدام الشبكة الأخرى بالوصول إلى هذه الموارد الخلفية. سيتم عزل كل نسبة استخدام الشبكة داخل شبكتك الظاهرية باستخدام تكامل الشبكة الظاهرية ونقاط النهاية الخاصة.
كخدمة متعددة المستأجرين، تتشارك حركة نقل البيانات من تطبيقك لخدمة التطبيقات إلى خدمات أخرى في Azure نفس البيئة مع تطبيقات أخرى أو اشتراكات أخرى. بينما يمكن تشفير نقل البيانات نفسها، قد تتطلب بعض السيناريوهات مستوى إضافي من الأمان عن طريق عزل الاتصال الخلفي عن حركة نقل شبكة أخرى. عادةً ما تكون هذه السيناريوهات متاحة للمؤسسات الكبيرة التي تتمتع بمستوى عالٍ من الخبرة، ولكن خدمة التطبيقات تضعها في متناول اليد من خلال تكامل الشبكة الظاهرية.

من خلال هذا البناء:
- تحظر حركة نقل البيانات العامة إلى الخدمات الخلفية.
- يتم توجيه نسبة استخدام الشبكة الصادرة من خدمة التطبيقات إلى الشبكة الظاهرية ويمكن أن تصل إلى خدمات النهاية الخلفية.
- تملك خدمة التطبيقات القدرة على تدقيق نظام أسماء النطاقات (DNS) في الخدمات الخلفية من خلال مناطق خاصة بنظام أسماء النطاقات.
سوف تتعلم ما يلي:
- إنشاء شبكة ظاهرية وشبكات فرعية لتكامل الشبكة الظاهرية لـ App Service
- إنشاء مناطق خاصة بنظام أسماء النطاقات
- إنشاء نقاط نهاية خاصة
- تكوين تكامل الشبكة الظاهرية في خدمة التطبيقات
المتطلبات الأساسية
يفترض البرنامج التعليمي أنك قد اطلعت علىالبرنامج التعليمي: تأمين اتصال الخدمة المعرفية من خدمة التطبيقات باستخدام مفتاح Vault وإنشاء تطبيق يتعرف على اللغة.
يستمر هذا البرنامج التعليمي في استخدام متغيرات البيئة التالية من البرنامج التعليمي السابق. تأكد من إعدادها بشكل صحيح.
groupName=myKVResourceGroup
region=westeurope
csResourceName=<cs-resource-name>
appName=<app-name>
vaultName=<vault-name>
إنشاء الشبكة الظاهرية والشبكات الفرعية
أنشئ شبكة ظاهرية. استبدل <virtual-network-name> باسم فريد.
# Save vnet name as variable for convenience vnetName=<virtual-network-name> az network vnet create --resource-group $groupName --location $region --name $vnetName --address-prefixes 10.0.0.0/16قم بإنشاء شبكة فرعية لتكامل الشبكة الظاهرية لـ App Service.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name vnet-integration-subnet --address-prefixes 10.0.0.0/24 --delegations Microsoft.Web/serverfarms --disable-private-endpoint-network-policies falseبالنسبة لخدمة التطبيقات، يوصى بأن يكون للشبكة الفرعية لتكامل الشبكة الظاهرية كتلة CIDR من
/26كحد أدنى (راجع متطلبات الشبكة الفرعية لتكامل الشبكة الظاهرية)./24أكثر من كافي. يحدد--delegations Microsoft.Web/serverfarmsأنه تم تفويض الشبكة الفرعية لتكامل الشبكة الظاهرية لخدمة التطبيقات.أنشئ شبكة فرعية أخرى لنقاط النهاية الخاصة.
az network vnet subnet create --resource-group $groupName --vnet-name $vnetName --name private-endpoint-subnet --address-prefixes 10.0.1.0/24 --disable-private-endpoint-network-policies trueبالنسبة للشبكات الفرعية الخاصة بنقطة النهاية، يجبتعطيل سياسة شبكة نقطة النهاية الخاصة.
إنشاء مناطق خاصة بنظام أسماء النطاقات
نظرا لأن موارد خدمات Key Vault وAzure الذكاء الاصطناعي ستقف خلف نقاط النهاية الخاصة، فأنت بحاجة إلى تحديد مناطق DNS الخاصة لها. يتم استخدام هذه المناطق لاستضافة سجلات نظام أسماء النطاقات الخاصة بنقاط النهاية الخاصة والسماح للعملاء بالبحث عن الخدمات الخلفية حسب الاسم.
إنشاء منطقتين DNS خاصتين، واحدة لمورد خدمات Azure الذكاء الاصطناعي والأخرى لمخزن المفاتيح الخاص بك.
az network private-dns zone create --resource-group $groupName --name privatelink.cognitiveservices.azure.com az network private-dns zone create --resource-group $groupName --name privatelink.vaultcore.azure.netلمزيد من المعلومات حول هذه الإعدادات، راجع تكوين نظام أسماء النطاقات لنقطة نهاية خاصة في Azure
اربط مناطق DNS الخاصة بالشبكة الظاهرية.
az network private-dns link vnet create --resource-group $groupName --name cognitiveservices-zonelink --zone-name privatelink.cognitiveservices.azure.com --virtual-network $vnetName --registration-enabled False az network private-dns link vnet create --resource-group $groupName --name vaultcore-zonelink --zone-name privatelink.vaultcore.azure.net --virtual-network $vnetName --registration-enabled False
إنشاء نقاط نهاية خاصة
في الشبكة الفرعية الخاصة بنقطة النهاية الخاصة بشبكتك الظاهرية، قم بإنشاء نقطة نهاية خاصة للخدمة المعرفية الخاصة بك.
# Get Cognitive Services resource ID csResourceId=$(az cognitiveservices account show --resource-group $groupName --name $csResourceName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securecstext-pe --location $region --connection-name securecstext-pc --private-connection-resource-id $csResourceId --group-id account --vnet-name $vnetName --subnet private-endpoint-subnetإنشاء مجموعة منطقة DNS لنقطة النهاية الخاصة لخدمات Azure الذكاء الاصطناعي. مجموعة منطقة نظام أسماء النطاقات هي ارتباط بين منطقة نظام أسماء النطاقات الخاصة ونقطة النهاية الخاصة. يساعدك هذا الارتباط على التحديث التلقائي لمنطقة DNS الخاصة عندما يكون هناك تحديث لنقطة النهاية الخاصة.
az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securecstext-pe --name securecstext-zg --private-dns-zone privatelink.cognitiveservices.azure.com --zone-name privatelink.cognitiveservices.azure.comحظر حركة المرور العامة إلى مورد خدمات Azure الذكاء الاصطناعي.
az rest --uri $csResourceId?api-version=2021-04-30 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat following command until output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateإشعار
تأكد من أن حالة توفير التغيير الخاص بك هي
"Succeeded". ثم يمكنك مراقبة تغير السلوك في عينة التطبيق. لا يزال بإمكانك تحميل التطبيق، ولكن إذا حاولت النقر فوق زر كشف سيظهر لكHTTP 500خطأ. فقد التطبيق اتصاله إلى مورد خدمات Azure الذكاء الاصطناعي من خلال الشبكات المشتركة.كرر الخطوات أعلاه لمفتاح vault.
# Create private endpoint for key vault vaultResourceId=$(az keyvault show --name $vaultName --query id --output tsv) az network private-endpoint create --resource-group $groupName --name securekeyvault-pe --location $region --connection-name securekeyvault-pc --private-connection-resource-id $vaultResourceId --group-id vault --vnet-name $vnetName --subnet private-endpoint-subnet # Create DNS zone group for the endpoint az network private-endpoint dns-zone-group create --resource-group $groupName --endpoint-name securekeyvault-pe --name securekeyvault-zg --private-dns-zone privatelink.vaultcore.azure.net --zone-name privatelink.vaultcore.azure.net # Block public traffic to key vault az keyvault update --name $vaultName --default-action Denyافرض إعادة إحضار فوريةلمراجع مفتاح vault في التطبيق عن طريق إعادة ضبط إعدادات التطبيق (لمزيد من المعلومات، راجع التدوير).
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"إشعار
مرة أخرى، يمكنك ملاحظة تغيير السلوك في عينة التطبيق. لم يعد بإمكانك تحميل التطبيق لأنه فقد القدرة على الوصول إلى مراجع مفتاح vault. فقد التطبيق اتصاله بمفتاح vault من خلال الشبكات المشتركة.
لا يمكن الوصول إلى نقطتي النهاية الخاصتين إلا للعملاء داخل الشبكة الظاهرية التي أنشأتها. لا يمكنك حتى الوصول إلى أسرار مفتاح vault من خلال صفحةالأسرار في بوابة Azure ، لأن البوابة تصل إلى هذه الأسرار من خلال الإنترنت العام (راجعإدارة الموارد المؤمنة).
تكوين تكامل الشبكة الظاهرية في التطبيق الخاص بك
قم بترقية التطبيق إلى مستوى أسعار مدعوم (راجع دمج تطبيقك مع Azure Virtual Network).
az appservice plan update --name $appName --resource-group $groupName --sku S1لا علاقة لها بالسيناريو المعروض ولكن من المهم أيضاً فرض HTTPS على الطلبات الواردة.
az webapp update --resource-group $groupName --name $appName --https-onlyقم بتمكين تكامل الشبكة الظاهرية على تطبيقك.
az webapp vnet-integration add --resource-group $groupName --name $appName --vnet $vnetName --subnet vnet-integration-subnetيسمح تكامل الشبكة الظاهرية لنسبة استخدام الشبكة الصادرة بالتدفق مباشرة إلى الشبكة الظاهرية. بشكل ظاهري، يتم توجيه حركة مرور IP المحلية المحددة في RFC-1918 فقط إلى الشبكة الظاهرية، وهو ما تحتاجه لنقاط النهاية الخاصة. لتوجيه نسبة استخدام الشبكة بالكامل إلى الشبكة الظاهرية، راجع إدارة توجيه تكامل الشبكة الظاهرية. يمكن أيضاً استخدام توجيه جميع حركات المرور إذا كنت تريد توجيه نسبة استخدام الشبكة على الإنترنت عبر شبكتك الظاهرية، على سبيل المثال من خلال Azure Virtual Network NAT أو Azure Firewall.
في المستعرض، انتقل إلى
<app-name>.azurewebsites.netمرة أخرى وانتظر حتى يسري مفعول التكامل. إذا حدث خطأ HTTP 500، فانتظر بضع دقائق وحاول مرة أخرى. إذا كان بإمكانك تحميل الصفحة والحصول على نتائج الكشف، فأنت تتصل بنقطة نهاية خدمات Azure الذكاء الاصطناعي مع مراجع خزنة المفاتيح.إشعار
إذا استمر ظهور أخطاء HTTP 500 بعد فترة طويلة، فيمكنك اللجوء إلى فرض إعادة إدراجمراجع مفتاح vault مرة أخرى، على النحو التالي:
az webapp config appsettings set --resource-group $groupName --name $appName --settings CS_ACCOUNT_NAME="@Microsoft.KeyVault(SecretUri=$csResourceKVUri)" CS_ACCOUNT_KEY="@Microsoft.KeyVault(SecretUri=$csKeyKVUri)"
إدارة الموارد المؤمنة
قد لا تتمكن من إدارة موارد نقطة النهاية الخاصة المحمية من خلال مدخل(Azure) أو Azure CLI أو Azure PowerShell (على سبيل المثال، مفتاح Vault)، وذلك بناءً على السيناريو الذي تستخدمه. هذه الأدوات كلها تجعل REST API يحاول الوصول إلى الموارد من خلال شبكة الانترنت العامة، والتي يحظرها تكوينك. فيما يلي نستعرض الخيارات المتاحة للوصول إلى الموارد المؤمنة:
- بالنسبة إلى مفتاح Vault، أضف بروتوكول الإنترنت العام لجهازك المحلي لعرض أسرار الحماية الخاصة بنقطة النهاية أو تحديثها.
- إذا تم توسيع الشبكة المحلية الخاصة بك إلى Azure Virtual Network من خلال بوابة VPN أو ExpressRoute، يمكنك إدارة الموارد المحمية الخاصة بنقطة النهاية الخاصة مباشرةً من الشبكة المحلية الخاصة بك.
- إدارة الموارد المحمية الخاصة بنقطة النهاية من خادم انتقال في الشبكة الظاهرية.
- قم بتوزيع Cloud Shell في الشبكة الظاهرية.
تنظيف الموارد
في الخطوات السابقة، أنشأت موارد Azure في إحدى مجموعات الموارد. إذا لم تتوقع احتياجك لهذه الموارد في المستقبل، فاحذف مجموعة الموارد من خلال تشغيل الأمر التالي في Cloud Shell:
az group delete --name $groupName
ربما يستغرق الأمر بضع دقائق للتشغيل.