البرنامج التعليمي: عزل الاتصال الخلفي في خدمة التطبيقات Azure مع تكامل الشبكة الظاهرية

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

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

scenario architecture

من خلال هذا البناء:

  • تحظر حركة نقل البيانات العامة إلى الخدمات الخلفية.
  • يتم توجيه نسبة استخدام الشبكة الصادرة من خدمة التطبيقات إلى الشبكة الظاهرية ويمكن أن تصل إلى خدمات النهاية الخلفية.
  • تملك خدمة التطبيقات القدرة على تدقيق نظام أسماء النطاقات (DNS) في الخدمات الخلفية من خلال مناطق خاصة بنظام أسماء النطاقات.

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

  • إنشاء شبكة ظاهرية وشبكات فرعية لتكامل الشبكة الظاهرية لـ App Service
  • إنشاء مناطق خاصة بنظام أسماء النطاقات
  • إنشاء نقاط نهاية خاصة
  • تكوين تكامل الشبكة الظاهرية في خدمة التطبيقات

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

يفترض البرنامج التعليمي أنك قد اطلعت علىالبرنامج التعليمي: تأمين اتصال الخدمة المعرفية من خدمة التطبيقات باستخدام مفتاح Vault وإنشاء تطبيق يتعرف على اللغة.

يستمر هذا البرنامج التعليمي في استخدام متغيرات البيئة التالية من البرنامج التعليمي السابق. تأكد من إعدادها بشكل صحيح.

    groupName=myKVResourceGroup
    region=westeurope
    csResourceName=<cs-resource-name>
    appName=<app-name>
    vaultName=<vault-name>

إنشاء الشبكة الظاهرية والشبكات الفرعية

  1. أنشئ شبكة ظاهرية. استبدل <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
    
  2. قم بإنشاء شبكة فرعية لتكامل الشبكة الظاهرية لـ 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 أنه تم تفويض الشبكة الفرعية لتكامل الشبكة الظاهرية لخدمة التطبيقات.

  3. أنشئ شبكة فرعية أخرى لنقاط النهاية الخاصة.

    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 الخاصة لها. يتم استخدام هذه المناطق لاستضافة سجلات نظام أسماء النطاقات الخاصة بنقاط النهاية الخاصة والسماح للعملاء بالبحث عن الخدمات الخلفية حسب الاسم.

  1. إنشاء منطقتين 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

  2. اربط مناطق 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
    

إنشاء نقاط نهاية خاصة

  1. في الشبكة الفرعية الخاصة بنقطة النهاية الخاصة بشبكتك الظاهرية، قم بإنشاء نقطة نهاية خاصة للخدمة المعرفية الخاصة بك.

    # 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
    
  2. إنشاء مجموعة منطقة 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
    
  3. حظر حركة المرور العامة إلى مورد خدمات 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 الذكاء الاصطناعي من خلال الشبكات المشتركة.

  4. كرر الخطوات أعلاه لمفتاح 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
    
  5. افرض إعادة إحضار فوريةلمراجع مفتاح 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 ، لأن البوابة تصل إلى هذه الأسرار من خلال الإنترنت العام (راجعإدارة الموارد المؤمنة).

تكوين تكامل الشبكة الظاهرية في التطبيق الخاص بك

  1. قم بترقية التطبيق إلى مستوى أسعار مدعوم (راجع دمج تطبيقك مع Azure Virtual Network).

    az appservice plan update --name $appName --resource-group $groupName --sku S1
    
  2. لا علاقة لها بالسيناريو المعروض ولكن من المهم أيضاً فرض HTTPS على الطلبات الواردة.

    az webapp update --resource-group $groupName --name $appName --https-only
    
  3. قم بتمكين تكامل الشبكة الظاهرية على تطبيقك.

    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.

  4. في المستعرض، انتقل إلى<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

ربما يستغرق الأمر بضع دقائق للتشغيل.

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