إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
في هذا المقال، تقوم بتكوين تطبيق خدمة التطبيقات مع اتصال آمن ومعزول من الشبكة إلى خدمات الخلفية. السيناريو النموذجي المستخدم هو في Tutorial: اتصال الخدمة المعرفية الآمنة من خدمة التطبيقات باستخدام Key Vault. عند الانتهاء، سيكون لديك تطبيق خدمة التطبيقات الذي يصل إلى كل من Key Vault وأدوات Foundry عبر شبكة افتراضية لجهاز Azure. لا يسمح لأي حركة مرور أخرى بالوصول إلى تلك الموارد الخلفية. سيتم عزل جميع حركة المرور داخل شبكتك الافتراضية عبر تكامل الشبكة الافتراضيةونقاط النهاية الخاصة.
في خدمة متعددة المستأجرين، تشارك حركة المرور الصادرة من تطبيق خدمة التطبيقات إلى خدمات Azure الأخرى نفس البيئة مع تطبيقات أخرى أو حتى اشتراكات أخرى. على الرغم من إمكانية تشفير حركة المرور نفسها، قد تتطلب بعض السيناريوهات مستوى إضافيا من الأمان عبر عزل الاتصالات الخلفية عن حركة مرور الشبكة الأخرى. عادة ما تكون هذه السيناريوهات متاحة للمؤسسات الكبيرة ذات الخبرة العالية، لكن App Service تضعها في متناول اليد من خلال تكامل الشبكة الافتراضية.
في هذه البنية:
- حركة المرور العامة إلى الخدمات الخلفية محجوبة.
- يتم توجيه حركة المرور الصادرة من خدمة التطبيقات إلى الشبكة الافتراضية ويمكنها الوصول إلى الخدمات الخلفية.
- يمكن لخدمة التطبيقات تنفيذ حل DNS لخدمات الخلفية عبر مناطق DNS الخاصة.
ستتعلم كيفية:
- أنشئ شبكة افتراضية وشبكات فرعية لتكامل الشبكة الافتراضية في خدمة التطبيقات
- إنشاء مناطق DNS خاصة
- إنشاء نقاط نهاية خاصة
- تكوين تكامل الشبكة الافتراضية في خدمة التطبيقات
المتطلبات المسبقه
الدرس الكامل: الاتصال الآمن بالخدمة الإدراكية من خدمة التطبيقات باستخدام Key Vault وإنشاء تطبيق كاشف اللغة.
تأكد من تعيين المتغيرات البيئية التالية من التعليم: اتصال الخدمة المعرفية الآمنة من خدمة التطبيقات باستخدام Key Vault:
groupName=myKVResourceGroup region=canadacentral csResourceName=<cs-resource-name> appName=<app-name> vaultName=<vault-name> planName=<plan-name> csResourceKVUri=<cs-resource-kv-uri> csKeyKVUri=<cs-key-kv-uri>
قم بإنشاء شبكة اتصال ظاهرية وشبكات فرعية
أنشئ شبكة ظاهرية. استبدل <اسم> الشبكة الافتراضية باسم فريد.
# Save the virtual network name as a 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أنشئ شبكة فرعية لتكامل الشبكة الافتراضية في خدمة التطبيقات.
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 --private-endpoint-network-policies Enabledبالنسبة لخدمة التطبيقات، التوصية هي أن يكون لشبكة تكامل الشبكة الافتراضية كتلة
/26CIDR على الأقل. (انظر متطلبات تكامل الشبكة الفرعية.)/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 --private-endpoint-network-policies Disabledبالنسبة لشبكات النقاط النهائية الخاصة، تحتاج إلى تعطيل سياسات شبكة النقاط النهائية الخاصة.
إنشاء مناطق DNS خاصة
نظرا لأن موارد Key Vault وأدوات Foundry الخاصة بك ستكون موجودة خلف نقاط نهاية خاصة، تحتاج إلى تحديد مناطق DNS خاصة لها. تستخدم هذه المناطق لاستضافة سجلات DNS لنقاط النهاية الخاصة وتسمح للعملاء بالعثور على خدمات الخلفية بالاسم.
أنشئ منطقتين خاصتين لنظام DNS، واحدة لموارد أدوات الصبك وأخرى لخزنة المفاتيح.
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 Private Endpoint DNS.
اربط مناطق 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
إنشاء نقاط نهاية خاصة
في الشبكة الفرعية الخاصة لنقطة النهاية في شبكتك الافتراضية، أنشئ نقطة نهاية خاصة لمورد أدوات Foundry الخاص بك.
# Get Foundry Tools 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 لنقطة النهاية الخاصة بأدوات Foundry. مجموعة منطقة DNS هي رابط بين منطقة DNS الخاصة ونقطة النهاية الخاصة. يساعدك هذا الرابط على تحديث منطقة 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حجب حركة المرور العامة إلى مورد أدوات Foundry.
az rest --uri $csResourceId?api-version=2024-10-01 --method PATCH --body '{"properties":{"publicNetworkAccess":"Disabled"}}' --headers 'Content-Type=application/json' # Repeat the following command until the output is "Succeeded" az cognitiveservices account show --resource-group $groupName --name $csResourceName --query properties.provisioningStateملاحظة
تأكد من أن حالة التوفير لتغييرك هي
"Succeeded". يمكنك بعد ذلك ملاحظة تغير السلوك في التطبيق النموذجي. لا يزال بإمكانك تحميل التطبيق، لكن إذا حاولت اختيار زر الاكتشاف ، تظهرHTTP 500لك خطأ. فقد التطبيق اتصاله بمورد أدوات الصاهر من خلال الشبكات المشتركة.كرر الخطوات السابقة لخزنة المفاتيح.
# Create a private endpoint for the 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 a 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 the key vault az keyvault update --name $vaultName --default-action Denyأجبرك على إعادة استعادة إشارات خزنة المفاتيح فوريا في تطبيقك عن طريق إعادة ضبط إعدادات التطبيق. (لمزيد من المعلومات، انظر التناوب.)
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.)
az appservice plan update --name $planName --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 NAT Gateway أو Azure Firewall.
في المتصفح، اذهب وانتظر
<app-name>.azurewebsites.netحتى يبدأ التكامل في المشاهد. إذا ظهرت لك رسالة خطأ في HTTP 500، انتظر بضع دقائق وحاول مرة أخرى. إذا تمكنت من تحميل الصفحة والحصول على نتائج الكشف، فأنت تتصل بنقطة نهاية أدوات Foundry باستخدام مراجع خزنة المفاتيح.ملاحظة
إذا استمريت في ظهور أخطاء HTTP 500 لفترة طويلة، قد يساعد إجبار مراجع خزنة المفاتيح على إعادة السحب مرة أخرى:
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 (على سبيل المثال، Key Vault). كل هذه الأدوات تقوم باستدعاءات واجهة برمجة التطبيقات REST للوصول إلى الموارد عبر الإنترنت العام، وهي محجوبة بواسطة إعدادك. إليك بعض الخيارات للوصول إلى الموارد المغلقة:
- بالنسبة ل Key Vault، أضف عنوان IP العام لجهازك المحلي لعرض أو تحديث الأسرار المحمية بنقاط النهاية الخاصة.
- إذا تم تمديد شبكتك المحلية إلى شبكة Azure الافتراضية عبر بوابة VPN أو Azure ExpressRoute، يمكنك إدارة الموارد المحمية الخاصة بالنقطة النهائية مباشرة من شبكتك المحلية.
- إدارة الموارد الخاصة المحمية بنقطة النهاية من خادم القفز في الشبكة الافتراضية.
- نشر Cloud Shell في الشبكة الافتراضية.
تنظيف الموارد
في الخطوات السابقة، أنشأت موارد Azure في مجموعة موارد. إذا لم تكن تتوقع الحاجة لهذه الموارد في المستقبل، احذف مجموعة الموارد بتشغيل الأمر التالي في Cloud Shell:
az group delete --name $groupName
قد يستغرق تشغيل هذا الأمر دقيقة.