المساعدة في تأمين روبوت قناة Microsoft Teams وتطبيق الويب خلف جدار حماية

Azure App Service
Azure Web Application Firewall

يساعد هذا السيناريو المثال على تأمين الاتصال بتطبيق ويب لروبوت قناة Microsoft Teams باستخدام Azure Private Link ونقطة نهاية Azure الخاصة. في الوقت نفسه، فإنه يمكن القنوات في عميل Teams من الاتصال بالروبوت من خلال عنوان IP الذي يتم عرضه من خلال مثيل Azure Firewall.

بناء الأنظمة

رسم تخطيطي يوضح المخطط الانسيابي من Teams إلى Azure Firewall.

قم بتنزيل ملف Visio لهذه البنية.

تدفق البيانات

  • تمكّن Azure Virtual Network الاتصالات بين موارد Azure. تستخدم الشبكة الظاهرية في هذا المثال مساحة العنوان 10.0.0.0/16، وتحتوي على ثلاث شبكات فرعية لاستخدامها من قبل المكونات المطلوبة للسيناريو:

    • Azure Firewall Subnet (10.0.1.0/26).

    • Virtual Network Integration Subnet (10.0.2.0/24)، والتي تُستخدم لتوجيه مسار نسبة استخدام الشبكة من نقطة النهارية الخاصة للدردشة الآلية إلى جدار الحماية.

    • Private Endpoint Subnet (10.0.3.0/24)، والذي يُستخدم في توجيه مسار نسبة استخدام الشبكة من جدار الحماية إلى نقطة النهاية الخاصة للدردشة الآلية.

  • يكشف Azure Firewallعنوان IP عام منفرد والذي يمكن للعملاء استخدامه للتواصل مع خدمات الدردشة الآلية الأساسية. عادة ما يتم وضع جدار حماية في شبكته الظاهرية الخاصة، وهو نمط شائع لبنى النظام المحوري ، ولكن هذا المثال المبسط ينشر جميع الخدمات والموارد في شبكة ظاهرية واحدة. يوضع مثيل Azure Firewall في الشبكة الظاهرية الخاصة به.

  • يحدد جدول التوجيه المسارات التي تأخذها نسبة استخدام الشبكة داخل الشبكة الظاهرية. يضمن أن نسبة استخدام الشبكة القادمة من وإلى الروبوت تمر عبر جدار الحماية.

    • يوجه المسار الافتراضي مع بادئة العنوان 0.0.0.0/0 Azure لتوجيه نسبة استخدام الشبكة التي ليست ضمن بادئة العنوان لأي مسار آخر إلى الشبكة الفرعية حيث يتم نشر مثيل Azure Firewall. في هذا المثال، هذا هو المسار الوحيد.

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

  • تتكون خدمة الروبوت من خطة خدمة تطبيق الروبوت وخدمة التطبيق وتسجيل قنوات الروبوت.

    • تحتوي خدمة التطبيق على مجال مخصص مسجل يشير إلى عنوان IP لجدار الحماية. بهذه الطريقة، يمكن الوصول إلى خدمة التطبيق فقط من خلال جدار الحماية.
  • خدمة Azure Private Link للوصول الوارد إلى خدمة تطبيق الروبوت عبر نقطة نهاية خاصة ل Azure.

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

المكونات

البدائل

  • يمكن أن توفر App Service Environment بيئة معزولة ومخصصة بالكامل لتشغيل تطبيقات App Service بشكل آمن على نطاق واسع. لا يستخدم هذا المثال بيئة خدمة التطبيقات لتقليل التكاليف، ولكن يمكن أن تدعمها بنية العينة، مع التعديلات.

تفاصيل السيناريو

تسمح الدردشات الآلية لمستخدمي Teams بالتفاعل مع خدمات الويب سواء من خلال رسالة نصية والبطاقات التفاعلية ووحدات المهام. تمنحك Microsoft Bot Framework وخدمات Azure Bot مجموعة أدوات سهلة الاستخدام لإنشاء تلك الدردشات الآلية وإدارتها.

يمكنك تطوير الروبوتات باستخدام مجموعة متنوعة من اللغات، مثل C# وJavaScript وPython. بعد تطويرها، يمكنك نشرها في Azure. أحد المكونات الرئيسية للروبوت هو تطبيق الويب، الذي يحتوي على المنطق الأساسي والواجهة التي يتواصل معها المستخدمون. أحد المتطلبات الرئيسية لعمل الدردشة الآلية هو أنه يجب أن يعرض نقطة نهاية HTTPS يمكن الوصول إليها بشكل عام.

يتطلب نهج InfoSec عادة أن تمر جميع نسبة استخدام الشبكة الواردة إلى تطبيقات الويب عبر جدار حماية الشركة. وهذا يعني أن جميع حركة المرور التي تنتقل إلى روبوت، والاستجابات من الروبوت، يجب أن توجه من خلال جدار حماية الشركة، كما هو الحال مع أي تطبيق ويب آخر.

حالات الاستخدام المحتملة

يمكن للمؤسسات استخدام الروبوتات لمستخدمي الأجهزة المحمولة وسطح المكتب. تشمل بعض الأمثلة ما يلي:

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

الاعتبارات

مراقبة‬

على الرغم من عدم تنفيذ المراقبة في هذا السيناريو المثال، يمكن لخدمة تطبيق الروبوت الاستفادة من خدمات Azure Monitor لمراقبة توفرها وأدائها.

قابلية التوسع

تتم استضافة الدردشات الآلية المستخدمة في هذا السيناريو على Azure App Service. ونتيجة لذلك، يمكنك استخدام ميزات التحجيم التلقائي القياسية لخدمة التطبيقات لتوسيع نطاق عدد المثيلات التي تشغل الروبوت تلقائيا، ما يسمح للروبوت بمواكبة الطلب. لمزيد من المعلومات حول التحجيم التلقائي، راجع أفضل ممارسات التحجيم التلقائي.

للحصول على مواضيع قابلية التوسع الأخرى، راجع قائمة التحقق من كفاءة أداء مركز تصميم Azure.

DevOps

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

الأمان

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

نشر هذا السيناريو

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

يلزم أن يكون لديك حساب Azure مفعّل. في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

معاينة

  1. قم بتشغيل أوامر Azure CLI التالية في Azure Cloud Shell أو واجهة التوزيع المفضل لديك.

    تنشئ هذه المجموعة من الأوامر مجموعة الموارد الضرورية والشبكة الظاهرية والشبكات الفرعية المطلوبة لهذه المعاينة. نطاق IP المستخدم من قبل Teams هو 52.112.0.0/14,52.122.0.0/15.

    # Declare variables (bash syntax)
    export PREFIX='SecureBot'
    export RG_NAME='rg-'${PREFIX}
    export VNET_NAME='vnet-'${PREFIX}
    export SUBNET_INT_NAME='VnetIntegrationSubnet'
    export SUBNET_PVT_NAME='PrivateEndpointSubnet'
    export LOCATION='eastus'
    export TEAMS_IP_RANGE='52.112.0.0/14 52.122.0.0/15'
    export FIREWALL_NAME='afw-'${LOCATION}'-'${PREFIX}
    
    # Create a resource group
    az group create --name ${RG_NAME} --location ${LOCATION}
    
    # Create a virtual network with a subnet for the firewall
    az network vnet create \
    --name ${VNET_NAME} \
    --resource-group ${RG_NAME} \
    --location ${LOCATION} \
    --address-prefix 10.0.0.0/16 \
    --subnet-name AzureFirewallSubnet \
    --subnet-prefix 10.0.1.0/26
    
    # Add a subnet for the Virtual network integration
    az network vnet subnet create \
    --name ${SUBNET_INT_NAME} \
    --resource-group ${RG_NAME} \
    --vnet-name ${VNET_NAME} \
    --address-prefix 10.0.2.0/24
    
    # Add a subnet where the private endpoint will be deployed for the app service
    az network vnet subnet create \
    --name ${SUBNET_PVT_NAME} \
    --resource-group ${RG_NAME} \
    --vnet-name ${VNET_NAME} \
    --address-prefix 10.0.3.0/24
    

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

    عند اكتمال النشر، يجب أن تشاهد الشبكات الفرعية التالية داخل شبكتك الظاهرية:

    لقطة شاشة لجزء

  2. نشر مثيل Azure Firewall في الشبكة الفرعية لجدار الحماية التي قمت بإنشائها في الخطوة 1 عن طريق تشغيل أوامر CLI التالية:

    # Create a firewall
    az network firewall create \
        --name ${FIREWALL_NAME} \
        --resource-group ${RG_NAME} \
        --location ${LOCATION}
    
    # Create a public IP for the firewall
    az network public-ip create \
        --name ${FIREWALL_NAME}-pip \
        --resource-group ${RG_NAME} \
        --location ${LOCATION} \
        --allocation-method static \
        --sku standard
    
    # Associate the IP with the firewall
    az network firewall ip-config create \
        --firewall-name ${FIREWALL_NAME} \
        --name ${FIREWALL_NAME}-Config \
        --public-ip-address ${FIREWALL_NAME}-pip \
        --resource-group ${RG_NAME} \
        --vnet-name ${VNET_NAME}
    
    # Update the firewall
    az network firewall update \
        --name ${FIREWALL_NAME} \
        --resource-group ${RG_NAME}
    
    # Get the public IP address for the firewall and take note of it for later use
    az network public-ip show \
        --name ${FIREWALL_NAME}-pip \
        --resource-group ${RG_NAME}
    

    يجب أن يبدو تكوين جدار الحماية الخاص بك كما يلي:

    لقطة شاشة لتكوين جدار حماية fw-SecureBot.

  3. إنشاء روبوت أساسي.

  4. انشر الروبوت الأساسي في مجموعة الموارد التي قمت بإنشائها في الخطوة 1.

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

    إشعار

    حدد خطة App Service التي تدعم Azure Private Link.

  5. تعيين مجال مخصص إلى خدمة التطبيق التي قمت بنشرها إلى مجموعة الموارد في الخطوة 3.

    تتطلب هذه الخطوة الوصول إلى جهة تسجيل المجالات، وتتطلب منك إضافة سجل A إلى المجال المخصص الذي يشير إلى IP العام لجدار الحماية الذي أنشأته في الخطوة 2.

  6. تأمين المجال المخصص المعين إما عن طريق تحميل شهادة موجودة للمجال أو شراء شهادة خدمة التطبيقات في Azure واستيرادها. يمكنك القيام بذلك باتباع الخطوات الواردة في تأمين اسم DNS مخصص مع ربط TLS/SSL في Azure App Service.

    يجب أن يكون لديك الآن روبوت يعمل بكامل طاقته يمكنك إضافته إلى قناة في Teams أو اختباره من خلال Web Chat باستخدام التوجيهات الموجودة في وثائق Bot Framework SDK.

    إشعار

    في هذه المرحلة، لا يزال الوصول إلى خدمة تطبيق الروبوت متاحا للجمهور عبر كل من azurewebsites.net عنوان URL وعلى عنوان URL المخصص الذي قمت بتكوينه. في الخطوات التالية، ستستخدم نقاط النهاية الخاصة لتعطيل الوصول العام. ستقوم أيضا بتكوين جدار الحماية للسماح لخدمة الروبوت بالاتصال فقط بعملاء Teams.

  7. قم بتشغيل البرنامج النصي Azure CLI التالي لنشر وتكوين نقطة النهاية الخاصة. تنفذ هذه الخطوة أيضا تكامل الشبكة الظاهرية لخدمة تطبيق الروبوت، والتي تربطها بالشبكة الفرعية لتكامل الشبكة الظاهرية.

    # Disable private endpoint network policies (this step is not required if you're using the Azure portal)
    az network vnet subnet update \
      --name ${SUBNET_PVT_NAME} \
      --resource-group ${RG_NAME} \
      --vnet-name ${VNET_NAME} \
      --disable-private-endpoint-network-policies true
    
    # Create the private endpoint, being sure to copy the correct resource ID from your deployment of the bot app service
    # The ID can be viewed by using the following CLI command:
    # az resource show --name wapp-securebot --resource-group rg-securebot --resource-type Microsoft.web/sites --query "id" 
    az network private-endpoint create \
      --name pvt-${PREFIX}Endpoint \
      --resource-group ${RG_NAME} \
      --location ${LOCATION} \
      --vnet-name ${VNET_NAME} \
      --subnet ${SUBNET_PVT_NAME} \
      --connection-name conn-${PREFIX} \
      --private-connection-resource-id /subscriptions/cad87d9e-c941-4519-a638-c9804a0577b9/resourceGroups/rg-securebot/providers/Microsoft.Web/sites/wapp-securebot \
      --group-id sites
    
    # Create a private DNS zone to resolve the name of the app service
    az network private-dns zone create \
      --name ${PREFIX}privatelink.azurewebsites.net \
      --resource-group ${RG_NAME}
    
    az network private-dns link vnet create \
      --name ${PREFIX}-DNSLink \
      --resource-group ${RG_NAME} \
      --registration-enabled false \
      --virtual-network ${VNET_NAME} \
      --zone-name ${PREFIX}privatelink.azurewebsites.net
    
    az network private-endpoint dns-zone-group create \
      --name chatBotZoneGroup \
      --resource-group ${RG_NAME} \
      --endpoint-name pvt-${PREFIX}Endpoint \
      --private-dns-zone ${PREFIX}privatelink.azurewebsites.net \
      --zone-name ${PREFIX}privatelink.azurewebsites.net
    
    # Establish virtual network integration for outbound traffic
    az webapp vnet-integration add \
      -g ${RG_NAME} \
      -n wapp-${PREFIX} \
      --vnet ${VNET_NAME} \
      --subnet ${SUBNET_INT_NAME}
    

    بعد تشغيل هذه الأوامر، يجب أن ترى الموارد التالية في مجموعة الموارد الخاصة بك:

    لقطة شاشة تعرض قائمة بالموارد في مجموعة موارد.

    يجب أن يبدو خيار تكامل VNet ضمن قسم الشبكات في خدمة التطبيق كما يلي:

    لقطة شاشة لخيارات

    لقطة شاشة لخيار

    لقطة شاشة لجزء

  8. بعد ذلك، يمكنك إنشاء جدول توجيه للتأكد من أن نسبة استخدام الشبكة من وإلى كل شبكة فرعية تمر عبر جدار الحماية. ستحتاج إلى عنوان IP الخاص لجدار الحماية الذي قمت بإنشائه في الخطوة السابقة.

    # Create a route table
    az network route-table create \
      -g ${RG_NAME} \
      -n rt-${PREFIX}RouteTable
    
    # Create a default route with 0.0.0.0/0 prefix and the next hop as the Azure firewall virtual appliance to inspect all traffic. Make sure you use your firewall's internal IP address instead of 10.0.1.4
    az network route-table route create -g ${RG_NAME} \
      --route-table-name rt-${PREFIX}RouteTable -n default \
      --next-hop-type VirtualAppliance \
      --address-prefix 0.0.0.0/0 \
      --next-hop-ip-address 10.0.1.4
    
    # Associate the two subnets with the route table
    az network vnet subnet update -g ${RG_NAME} \
      -n ${SUBNET_INT_NAME} --vnet-name ${VNET_NAME} \
      --route-table rt-${PREFIX}RouteTable
    
    az network vnet subnet update -g ${RG_NAME} \
      -n ${SUBNET_PVT_NAME} \
      --vnet-name ${VNET_NAME} \
      --route-table rt-${PREFIX}RouteTable
    

    بعد تشغيل الأوامر، يجب أن يبدو مورد جدول التوجيه كما يلي:

    لقطة شاشة لجزء rt-SecureBotRouteTable.

    بعد إنشاء جدول التوجيه، يمكنك إضافة قواعد إلى جدار الحماية لتسليم نسبة استخدام الشبكة من عنوان IP العام إلى خدمة تطبيق الروبوت، ولتقييد نسبة استخدام الشبكة من أي نقطة نهاية أخرى غير Microsoft Teams. بالإضافة إلى ذلك، ستسمح بنسبة استخدام الشبكة بين الشبكة الظاهرية وخدمات Azure Bot أو معرف Microsoft Entra باستخدام علامات الخدمة.

  9. شغّل الأوامر التالية:

    # Create a NAT rule collection and a single rule. The source address is the public IP range of Microsoft Teams
    # Destination address is that of the firewall. 
    # The translated address is that of the app service's private link.
    az network firewall nat-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-nat-rules \
      --priority 200 \
      --action DNAT \
      --source-addresses ${TEAMS_IP_RANGE} \
      --dest-addr 23.100.26.84 \
      --destination-ports 443 \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-ip2appservice \
      --protocols TCP \
      --translated-address 10.0.3.4 \
      --translated-port 443
    
    # Create a network rule collection and add three rules to it. 
    # The first one is an outbound network rule to only allow traffic to the Teams IP range.
    # The source address is that of the virtual network address space, destination is the Teams IP range.
    az network firewall network-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-network-rules \
      --priority 200 \
      --action Allow \
      --source-addresses 10.0.0.0/16 \
      --dest-addr ${TEAMS_IP_RANGE} \
      --destination-ports 443 \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-OutboundTeamsTraffic \
      --protocols TCP
    
    # This rule will enable traffic to all IP addresses associated with Azure AD service tag
    az network firewall network-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-network-rules \
      --source-addresses 10.0.0.0/16 \
      --dest-addr AzureActiveDirectory \
      --destination-ports '*' \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-AzureAD \
      --protocols TCP
    
    # This rule will enable traffic to all IP addresses associated with Azure Bot Services service tag
    az network firewall network-rule create \
      --resource-group ${RG_NAME} \
      --collection-name coll-${PREFIX}-network-rules \
      --source-addresses 10.0.0.0/16 \
      --dest-addr AzureBotService \
      --destination-ports '*' \
      --firewall-name ${FIREWALL_NAME} \
      --name rl-AzureBotService \
      --protocols TCP
    

    بعد تشغيل الأوامر، ستبدو قواعد جدار الحماية الخاصة بك كما يلي:

    لقطة شاشة لجزء

    لقطة شاشة لجزء

  10. تأكد من أن الروبوت الخاص بك يمكن الوصول إليه فقط من قناة في Teams، وأن جميع نسبة استخدام الشبكة من وإلى خدمة تطبيق الروبوت تمر عبر جدار الحماية الخاص بك.

المساهمون

تحتفظ Microsoft بهذه المقالة. وهي مكتوبة في الأصل من قبل المساهمين التاليين.

الكاتب الرئيسي:

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