تنفيذ بنية أمان متعددة الطبقات مع بيئات خدمة التطبيقات
هام
تتناول هذه المقالة الإصدار 1 من بيئة خدمة التطبيق. سيتم إيقاف تشغيل الإصدار 1 من بيئة خدمة التطبيقات في 31 أغسطس 2024. هناك إصدار جديد من بيئة خدمة التطبيقات أسهل في الاستخدام ويعمل على بنية تحتية أكثر قوة. لمعرفة المزيد حول الإصدار الجديد، ابدأ بمقدمة حول بيئة خدمة التطبيق. إذا كنت تستخدم حاليا الإصدار 1 من بيئة خدمة التطبيق، فيرجى اتباع الخطوات الواردة في هذه المقالة للترحيل إلى الإصدار الجديد.
نظرا لأن بيئات خدمة التطبيقات توفر بيئة وقت تشغيل معزولة يتم نشرها في شبكة افتراضية، يمكن للمطورين إنشاء بنية أمان متعددة الطبقات توفر مستويات مختلفة من الوصول إلى الشبكة لكل طبقة تطبيق فعلية.
تتمثل الرغبة الشائعة في إخفاء النهايات الخلفية لواجهة برمجة التطبيقات من الوصول العام إلى الإنترنت ، والسماح فقط باستدعاء واجهات برمجة التطبيقات بواسطة تطبيقات الويب الأولية. يمكن استخدام مجموعات أمان الشبكة (NSGs) على الشبكات الفرعية التي تحتوي على بيئات خدمة التطبيقات لتقييد الوصول العام إلى تطبيقات واجهة برمجة التطبيقات.
يوضح الرسم التخطيطي أدناه مثالا على البنية مع تطبيق يستند إلى WebAPI تم نشره على بيئة خدمة التطبيق. تقوم ثلاثة مثيلات منفصلة لتطبيق الويب، يتم نشرها في ثلاث بيئات منفصلة لخدمة التطبيقات، بإجراء مكالمات خلفية إلى تطبيق WebAPI نفسه.

تشير علامات الجمع الخضراء إلى أن مجموعة أمان الشبكة على الشبكة الفرعية التي تحتوي على "apiase" تسمح بالمكالمات الواردة من تطبيقات الويب الأولية ، وكذلك المكالمات من نفسها. ومع ذلك ، فإن نفس مجموعة أمان الشبكة تمنع صراحة الوصول إلى حركة المرور الواردة العامة من الإنترنت.
يتجول الجزء المتبقي من هذه المقالة خلال الخطوات اللازمة لتكوين مجموعة أمان الشبكة على الشبكة الفرعية التي تحتوي على "apiase".
تحديد سلوك الشبكة
لمعرفة قواعد أمان الشبكة المطلوبة، تحتاج إلى تحديد عملاء الشبكة الذين سيسمح لهم بالوصول إلى بيئة خدمة التطبيقات التي تحتوي على تطبيق واجهة برمجة التطبيقات، والعملاء الذين سيتم حظرهم.
نظرا لأنه يتم تطبيق مجموعات أمان الشبكة (NSGs) على الشبكات الفرعية، ويتم نشر بيئات خدمة التطبيقات في شبكات فرعية، تنطبق القواعد الواردة في NSG على جميع التطبيقات التي تعمل على بيئة خدمة التطبيق. باستخدام بنية النموذج لهذه المقالة، بمجرد تطبيق مجموعة أمان شبكة على الشبكة الفرعية التي تحتوي على "apiase"، ستتم حماية جميع التطبيقات التي تعمل على بيئة خدمة التطبيقات "apiase" بنفس مجموعة قواعد الأمان.
- تحديد عنوان IP الصادر للمتصلين في المنبع: ما هو عنوان IP أو عناوين المتصلين في المنبع؟ يجب السماح لهذه العناوين صراحة بالوصول إليها في مجموعة موردي المواد النووية. نظرا لأن المكالمات بين بيئات خدمة التطبيقات تعتبر مكالمات "إنترنت" ، فيجب السماح بعنوان IP الصادر المعين لكل من بيئات خدمة التطبيقات الثلاثة في المنبع بالوصول في NSG للشبكة الفرعية "apiase". لمزيد من المعلومات حول تحديد عنوان IP الصادر للتطبيقات التي تعمل في بيئة خدمة تطبيق، راجع مقالة نظرة عامة على بنية الشبكة .
- هل سيحتاج تطبيق واجهة برمجة التطبيقات الخلفية إلى الاتصال بنفسه؟ النقطة التي يتم تجاهلها والدقيقة في بعض الأحيان هي السيناريو الذي يحتاج فيه التطبيق الخلفي إلى استدعاء نفسه. إذا احتاج تطبيق واجهة برمجة التطبيقات الخلفي على بيئة خدمة التطبيقات إلى استدعاء نفسه، التعامل معه أيضا على أنه مكالمة إنترنت. في بنية النموذج ، يتطلب ذلك السماح بالوصول من عنوان IP الصادر لبيئة خدمة التطبيق "apiase" أيضا.
إعداد مجموعة أمان الشبكة
بمجرد معرفة مجموعة عناوين IP الصادرة ، فإن الخطوة التالية هي إنشاء مجموعة أمان شبكة. يمكن إنشاء مجموعات أمان الشبكة لكل من الشبكات الافتراضية المستندة إلى Resource Manager ، وكذلك الشبكات الافتراضية الكلاسيكية. توضح الأمثلة أدناه إنشاء وتكوين NSG على شبكة افتراضية كلاسيكية باستخدام PowerShell.
بالنسبة لبنية العينة ، تقع البيئات في جنوب وسط الولايات المتحدة ، لذلك يتم إنشاء NSG فارغ في تلك المنطقة:
New-AzureNetworkSecurityGroup -Name "RestrictBackendApi" -Location "South Central US"
-Label "Only allow web frontend and loopback traffic"
أولا ، تتم إضافة قاعدة السماح الصريحة للبنية الأساسية لإدارة Azure كما هو موضح في المقالة حول حركة المرور الواردة لبيئات خدمة التطبيقات.
#Open ports for access by Azure management infrastructure
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW AzureMngmt"
-Type Inbound -Priority 100 -Action Allow -SourceAddressPrefix 'INTERNET' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '454-455' -Protocol TCP
بعد ذلك، تتم إضافة قاعدتين للسماح بمكالمات HTTP وHTTPS من بيئة خدمة التطبيق الأولية الأولى ("fe1ase").
#Grant access to requests from the first upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe1ase"
-Type Inbound -Priority 200 -Action Allow -SourceAddressPrefix '65.52.xx.xyz' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe1ase"
-Type Inbound -Priority 300 -Action Allow -SourceAddressPrefix '65.52.xx.xyz' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP
اشطف وكرر لبيئات خدمة التطبيقات الثانية والثالثة في مرحلة ما قبل الإنتاج ("fe2ase" و "fe3ase").
#Grant access to requests from the second upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe2ase"
-Type Inbound -Priority 400 -Action Allow -SourceAddressPrefix '191.238.xyz.abc' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe2ase"
-Type Inbound -Priority 500 -Action Allow -SourceAddressPrefix '191.238.xyz.abc' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP
#Grant access to requests from the third upstream web front-end
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP fe3ase"
-Type Inbound -Priority 600 -Action Allow -SourceAddressPrefix '23.98.abc.xyz' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS fe3ase"
-Type Inbound -Priority 700 -Action Allow -SourceAddressPrefix '23.98.abc.xyz' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP
أخيرا ، امنح حق الوصول إلى عنوان IP الصادر لبيئة خدمة التطبيقات الخاصة بواجهة برمجة التطبيقات الخلفية حتى تتمكن من الاتصال مرة أخرى بنفسها.
#Allow apps on the apiase environment to call back into itself
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTP apiase"
-Type Inbound -Priority 800 -Action Allow -SourceAddressPrefix '70.37.xyz.abc' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '80' -Protocol TCP
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityRule -Name "ALLOW HTTPS apiase"
-Type Inbound -Priority 900 -Action Allow -SourceAddressPrefix '70.37.xyz.abc' -SourcePortRange '*'
-DestinationAddressPrefix '*' -DestinationPortRange '443' -Protocol TCP
لا توجد قواعد أخرى لأمن الشبكة مطلوبة ، لأن كل NSG لديها مجموعة من القواعد الافتراضية التي تمنع الوصول الوارد من الإنترنت ، بشكل افتراضي.
يتم عرض القائمة الكاملة للقواعد في مجموعة أمان الشبكة أدناه. لاحظ كيف تحظر القاعدة الأخيرة، التي تم تمييزها، الوصول الوارد من جميع المتصلين، بخلاف المتصلين الذين تم منحهم حق الوصول بشكل صريح.

الخطوة الأخيرة هي تطبيق NSG على الشبكة الفرعية التي تحتوي على بيئة خدمة التطبيق "apiase".
#Apply the NSG to the backend API subnet
Get-AzureNetworkSecurityGroup -Name "RestrictBackendApi" | Set-AzureNetworkSecurityGroupToSubnet
-VirtualNetworkName 'yourvnetnamehere' -SubnetName 'API-ASE-Subnet'
مع تطبيق NSG على الشبكة الفرعية ، يسمح فقط لبيئات خدمة التطبيقات الثلاثة في المنبع ، وبيئة خدمة التطبيقات التي تحتوي على الواجهة الخلفية لواجهة برمجة التطبيقات ، بالاتصال ببيئة "apiase".
روابط ومعلومات إضافية
معلومات حول مجموعات أمان الشبكة.
فهم عناوين IP الصادرة وبيئات خدمة التطبيقات.
منافذ الشبكة المستخدمة من قبل بيئات خدمة التطبيق.
ملاحظة
إذا كنت ترغب في بدء استخدام Azure App Service قبل الاشتراك في حساب Azure، فانتقل إلى تجربة خدمة التطبيقات، حيث يمكنك على الفور إنشاء تطبيق ويب مبتدئ قصير الأجل في App Service. لا توجد بطاقات ائتمان مطلوبة؛ لا توجد التزامات.