دمج API Management في شبكة ظاهرية داخلية مع Application Gateway
ينطبق على: المطور | بريميوم
يمكنك تكوين Azure APIM في شبكة افتراضية في الوضع الداخلي، مما يجعلها متاحة داخل الشبكة الافتراضية فحسب. Azure Application Gateway هي منصة كخدمة (PaaS) تعمل كموازن تحميل Layer-7. تعمل كخدمة بالوكالة العكسية وتوفر من بين عروضها Azure Web Application Firewall (WAF).
عن طريق دمج API Management التي تم تكوين إعداداتها في شبكة ظاهرية داخلية مع واجهة Application Gateway الأمامية، يمكنك:
- استخدم نفس مورد API Management للاستهلاك من قبل كل من المستهلكين الداخليين والمستهلكين الخارجيين.
- استخدم مورد API Management واحد واحصل على مجموعة فرعية من واجهات برمجة التطبيقات المعرفة في إدارة API متوفرة للمستهلكين الخارجيين.
- توفير طريقة توزيع للتبديل إلى API Management من تشغيل وإيقاف الإنترنت العام.
للحصول على إرشادات معمارية، راجع:
- التكامل الأساس للمؤسسات: الهيكل المرجعي
- مسرع منطقة هبوط لـ APIM: بنية مرجعية وتوجيه التصميم
إشعار
تم تحديث هذه المقالة لاستخدام Application Gateway WAF_v2 SKU.
المتطلبات الأساسية
إشعار
نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.
لاتباع الخطوات الموضحة في هذه المقالة، يجب أن يتوفر لديك ما يلي:
اشتراك Azure نشط
إذا لم يكن لديك اشتراك في Azure، فأنشئ حساب Azure مجاني قبل أن تبدأ.
الشهادات
- ملفات تبادل المعلومات الشخصية (PFX) لأسماء المضيف المخصصة لإدارة واجهة برمجة التطبيقات: البوابة ومدخل المطور ونقطة نهاية الإدارة.
- ملف شهادة (CER) للشهادة الجذر لشهادات PFX.
لمزيد من المعلومات، راجع شهادات النهاية الخلفية. لأغراض الاختبار، قم بإنشاء الشهادات الموقعة ذاتيًابشكل اختياري.
وإما الإصدار الأحدث من Azure PowerShell
السيناريو
في هذه المقالة، تتعلم كيفية استخدام مثال واحد لـ APIM للمستهلكين الداخليين والخارجيين وجعلها تعمل كواجهة أمامية واحدة لكل من واجهات برمجة التطبيقات الموجودة في المباني وواجهات برمجة التطبيقات السحابية. يمكنك إنشاء مثيل APIM من نوع الإصدار 2 من المستأجر الفردي الأحدث (stv2). ستتعلم كيفية استخدام وحدات الاستماع العامة والخاصة في Application Gateway. أنت تفهم كيفية عرض مجموعة فرعية فقط من واجهات برمجة التطبيقات للاستهلاك الخارجي باستخدام وظيفة التوجيه المتوفرة في Application Gateway. في المثال، يتم تسليط الضوء على API باللون الأخضر.
في مثال الإعداد الأول، تتم إدارة كافة واجهات برمجة التطبيقات الخاصة بك فقط من داخل الشبكة الظاهرية. يمكن للمستهلكين الداخليين الوصول إلى جميع API الداخلية والخارجية. حركة المرور لا تخرج أبدًا إلى الإنترنت. يمكن توصيل الاتصال عالي الأداء عبر دوائر Azure ExpressRoute. في هذا المثال، يتم تسليط الضوء على المستهلكين الداخليين باللون البرتقالي.
ما هو المطلوب لدمج API Management وApplication Gateway؟
- خادم نظام المجموعة الخلفي: هذا هو عنوان IP الظاهري الداخلي لخدمة APIM.
- إعدادات تجمع الخادم الخلفي: يحتوي كل خادم على إعدادات مثل المنفذ والبروتوكول والتقارب القائم على ملفات تعريف الارتباط. يتم تطبيق هذه الإعدادات على كافة الخوادم داخل المجموعة.
- المنفذ الأمامي: يتم فتح هذا المنفذ العام على application gateway. يتم إعادة توجيه نسبة استخدام الشبكة التي تصطدم بها إلى أحد خوادم الخلفية.
- وحدة الاستماع: يحتوي المستمع على منفذ أمامي وبروتوكول (Http أو Https، وهذه القيم حساسة لحالة الأحرف)، واسم شهادة أمان طبقة النقل (TLS) (إذا كان تكوين تفريغ TLS).
- القاعدة: تربط القاعدة المستمع بمجموعة خادم خلفية.
- التحقيق الصحي المخصص: يستخدم Application Gateway، افتراضيًا، تحقيقات قائمة على عنوان IP
BackendAddressPool
لمعرفة الخوادم النشطة. تستجيب APIM للطلبات بعنوان المضيف الصحيح فحسب، لذلك تفشل التحقيقات الافتراضية. حدد تحقيقًا صحيًا مخصصًا لمساعدة بوابة التطبيق على تحديد أن الخدمة حية ويجب إرسال الطلبات. - شهادات المجال المخصصة: للوصول إلى APIM من الإنترنت، قم بإنشاء سجلات نظام أسماء المجالات (DNS) لتعيين أسماء المضيفين الخاصة بها إلى عنوان IP الأمامي لبوابة التطبيق. يضمن هذا التعيين أن رأس المضيف والشهادة المرسلة إلى APIM صالحة. في هذا المثال، نستخدم ثلاث شهادات. تمثل بوابة API Management (الخلفية)، وبوابة المطورين، ونقطة النهاية الإدارية.
عرض بوابة المطور ونقطة النهاية للإدارة خارجيًا من خلال Application Gateway
في هذا الدليل، نعرض أيضًا بوابة المطور ونقطة النهاية للإدارة للخارجية من خلال application gateway. ستحتاج إلى خطوات إضافية لإنشاء وحدة استماع، والفحص، والإعدادات، والقواعد لكل نقطة نهاية. ترد جميع التفاصيل في الخطوات التي اتخذها كل منها. إذا كنت بحاجة إلى عرض نقطة نهاية تكوين v2 للبوابة المستضافة ذاتيا، فاتبع خطوات مماثلة (غير معروضة).
إذا كنت تستخدم معرف Microsoft Entra أو مصادقة جهة خارجية، فمكن ميزة ترابط جلسة العمل المستندة إلى ملفات تعريف الارتباط في بوابة التطبيق.
تحذير
لمنع Application Gateway WAF من تقاطع تنزيل مواصفات OpenAPI في بوابة المطور، قم بتعطيل قاعدة جدار الحماية942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"
.
تشمل قواعد Application Gateway WAF التي قد تكسر وظائف البوابة ما يلي:
920300
،920330
،931130
،942100
،942110
،942180
،942200
،942260
،942340
،942370
للوضع الإداري942200
،942260
،942370
،942430
،942440
للبوابة المنشورة
تعيين المتغيرات
خلال هذا الدليل، تحتاج إلى تحديد عدة متغيرات. تستند التسمية إلى إرشادات اختصار Cloud Adoption Framework.
# These variables must be changed.
$subscriptionId = "00000000-0000-0000-0000-000000000000" # GUID of your Azure subscription
$domain = "contoso.net" # The custom domain for your certificate
$apimServiceName = "apim-contoso" # API Management service instance name, must be globally unique
$apimDomainNameLabel = $apimServiceName # Domain name label for API Management's public IP address, must be globally unique
$apimAdminEmail = "admin@contoso.net" # Administrator's email address - use your email address
$gatewayHostname = "api.$domain" # API gateway host
$portalHostname = "portal.$domain" # API developer portal host
$managementHostname = "management.$domain" # API management endpoint host
$baseCertPath = "C:\Users\Contoso\" # The base path where all certificates are stored
$trustedRootCertCerPath = "${baseCertPath}trustedroot.cer" # Full path to contoso.net trusted root .cer file
$gatewayCertPfxPath = "${baseCertPath}gateway.pfx" # Full path to api.contoso.net .pfx file
$portalCertPfxPath = "${baseCertPath}portal.pfx" # Full path to portal.contoso.net .pfx file
$managementCertPfxPath = "${baseCertPath}management.pfx" # Full path to management.contoso.net .pfx file
$gatewayCertPfxPassword = "certificatePassword123" # Password for api.contoso.net pfx certificate
$portalCertPfxPassword = "certificatePassword123" # Password for portal.contoso.net pfx certificate
$managementCertPfxPassword = "certificatePassword123" # Password for management.contoso.net pfx certificate
# These variables may be changed.
$resGroupName = "rg-apim-agw" # Resource group name that will hold all assets
$location = "West US" # Azure region that will hold all assets
$apimOrganization = "Contoso" # Organization name
$appgwName = "agw-contoso" # The name of the Application Gateway
إنشاء مجموعة الموارد المتعلقة بـAzure Resource Manager
لإنشاء مجموعة الموارد لـ Azure Resource Manager:
تسجيل الدخول إلى أزور.
Connect-AzAccount
المصادقة باستخدام بيانات الاعتماد الخاصة بك.
حدد الاشتراك الذي تريده.
Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
قم بإنشاء مجموعة موارد. يمكنك تخطي هذه الخطوة إذا كنت تستخدم مجموعة موارد موجودة.
New-AzResourceGroup -Name $resGroupName -Location $location
ويشترط Azure Resource Manager أن تحدد جميع مجموعات الموارد موقعا. يتم استخدام هذا الموقع باعتباره الموقع الافتراضي للموارد في مجموعة الموارد تلك. تأكد من أن كافة الأوامر لإنشاء بوابة تطبيق تستخدم نفس مجموعة الموارد.
إنشاء شبكة ظاهرية وشبكة فرعية لبوابة التطبيق
يبين المثال التالي كيفية إنشاء شبكة افتراضية باستخدام Azure Resource Manager. تتكوّن شبكة الاتصال الظاهرية في هذا المثال من شبكات فرعية منفصلة لـ Application Gateway وAPI Management.
تعيين عناوين IP لبوابة التطبيق.
إشعار
نظرا لوجود مستمعين عامين وخاصة، نحتاج إلى عنوان IP عام وخاصة. يجب إنشاء عنوان IP العام الثابت بينما يجب تحديد عنوان IP الخاص من الشبكة الفرعية المقترنة ببوابة التطبيق. تم تحديد عنوان IP الخاص بشكل عشوائي.
$appGatewayExternalIP = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-ag" -location $location -AllocationMethod Static -Sku Standard -Force $appGatewayInternalIP = "10.0.0.100" [String[]]$appGwNsgDestIPs = $appGatewayInternalIP, $appGatewayExternalIP.IpAddress
إنشاء مجموعة أمان شبكة (NSG) وقواعد NSG للشبكة الفرعية لبوابة التطبيق.
$appGwRule1 = New-AzNetworkSecurityRuleConfig -Name appgw-in -Description "AppGw inbound" ` -Access Allow -Protocol * -Direction Inbound -Priority 100 -SourceAddressPrefix ` GatewayManager -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 65200-65535 $appGwRule2 = New-AzNetworkSecurityRuleConfig -Name appgw-in-internet -Description "AppGw inbound Internet" ` -Access Allow -Protocol "TCP" -Direction Inbound -Priority 110 -SourceAddressPrefix ` Internet -SourcePortRange * -DestinationAddressPrefix $appGwNsgDestIPs -DestinationPortRange 443 $appGwNsg = New-AzNetworkSecurityGroup -ResourceGroupName $resGroupName -Location $location -Name ` "nsg-agw" -SecurityRules $appGwRule1, $appGwRule2
إنشاء مجموعة أمان شبكة (NSG) وقواعد NSG للشبكة الفرعية APIM. يتطلب API Management stv2 العديد من قواعد NSG المحددة.
$apimRule1 = New-AzNetworkSecurityRuleConfig -Name APIM-Management -Description "APIM inbound" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix ApiManagement ` -SourcePortRange * -DestinationAddressPrefix VirtualNetwork -DestinationPortRange 3443 $apimRule2 = New-AzNetworkSecurityRuleConfig -Name AllowAppGatewayToAPIM -Description "Allows inbound App Gateway traffic to APIM" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 -SourceAddressPrefix "10.0.0.0/24" ` -SourcePortRange * -DestinationAddressPrefix "10.0.1.0/24" -DestinationPortRange 443 $apimRule3 = New-AzNetworkSecurityRuleConfig -Name AllowAzureLoadBalancer -Description "Allows inbound Azure Infrastructure Load Balancer traffic to APIM" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 120 -SourceAddressPrefix AzureLoadBalancer ` -SourcePortRange * -DestinationAddressPrefix "10.0.1.0/24" -DestinationPortRange 6390 $apimRule4 = New-AzNetworkSecurityRuleConfig -Name AllowKeyVault -Description "Allows outbound traffic to Azure Key Vault" ` -Access Allow -Protocol Tcp -Direction Outbound -Priority 100 -SourceAddressPrefix "10.0.1.0/24" ` -SourcePortRange * -DestinationAddressPrefix AzureKeyVault -DestinationPortRange 443 $apimNsg = New-AzNetworkSecurityGroup -ResourceGroupName $resGroupName -Location $location -Name ` "nsg-apim" -SecurityRules $apimRule1, $apimRule2, $apimRule3, $apimRule4
قم بتعيين نطاق العنوان 10.0.0.0/24 لمتغير الشبكة الفرعية ليتم استخدامه لـ Application Gateway أثناء إنشاء شبكة افتراضية.
$appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
قم بتعيين نطاق العنوان 10.0.1.0/24 لمتغير الشبكة الفرعية ليتم استخدامه لـ APIM أثناء إنشاء شبكة افتراضية.
$apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
إنشاء شبكة ظاهرية باسم vnet-contoso. استخدم البادئة 10.0.0.0/16 مع الشبكات الفرعية 10.0.0.0/24 و10.0.1.0/24.
$vnet = New-AzVirtualNetwork -Name "vnet-contoso" -ResourceGroupName $resGroupName ` -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $appGatewaySubnet,$apimSubnet
تعيين متغيرات الشبكة الفرعية للخطوات التالية.
$appGatewaySubnetData = $vnet.Subnets[0] $apimSubnetData = $vnet.Subnets[1]
قم بإنشاء خدمة APIM داخل الشبكة الظاهرية
يوضح المثال التالي كيفية إنشاء مثال APIM في شبكة افتراضية مهيأة للوصول الداخلي فحسب.
يتطلب API Management stv2 عنوان IP عاما مع فريد
DomainNameLabel
.$apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location ` -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
إنشاء عنصر شبكة ظاهري لـ APIM باستخدام الشبكة الفرعية
$apimSubnetData
التي تم إنشاؤها أعلاه.$apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
قم بإنشاء خدمة APIM داخل الشبكة الظاهرية. ينشئ هذا المثال الخدمة في مستوى خدمة المطوِّر. اسم فريد لخدمة APIM الخاصة بك.
$apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName -Organization $apimOrganization ` -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType "Internal" -Sku "Developer" -PublicIpAddressId $apimPublicIpAddressId.Id
يمكن أن يستغرق إنشاء وتفعيل مثال APIM في هذه الطبقة ما بين 30 و40 دقيقة. بعد نجاح الأمر السابق، راجع تكوين DNS المطلوب للوصول إلى خدمة APIM للشبكة الظاهرية الداخلية لتأكيد الوصول إليها.
إعداد أسماء مجالات مخصصة في API Management
إعداد أسماء مجالات مخصصة ف APIM:
تهيئة المتغيرات التالية باستخدام تفاصيل الشهادات باستخدام مفاتيح خاصة للمجالات و الشهادة الجذر الموثوق بها. في هذا المثال، نستخدم
api.contoso.net
وportal.contoso.net
وmanagement.contoso.net
.$certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -Force
قم بإنشاء
Hostname
عناصر التكوين وتعيينها لنقاط نهاية APIM.$gatewayHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $gatewayHostname ` -HostnameType Proxy -PfxPath $gatewayCertPfxPath -PfxPassword $certGatewayPwd $portalHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $portalHostname ` -HostnameType DeveloperPortal -PfxPath $portalCertPfxPath -PfxPassword $certPortalPwd $managementHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $managementHostname ` -HostnameType Management -PfxPath $managementCertPfxPath -PfxPassword $certManagementPwd $apimService.ProxyCustomHostnameConfiguration = $gatewayHostnameConfig $apimService.PortalCustomHostnameConfiguration = $portalHostnameConfig $apimService.ManagementCustomHostnameConfiguration = $managementHostnameConfig Set-AzApiManagement -InputObject $apimService
تكوين منطقة خاصة لدقة DNS في الشبكة الظاهرية
تكوين منطقة DNS الخاصة لدقة DNS في الشبكة الافتراضية:
قم بإنشاء منطقة DNS خاصة وربط شبكة الاتصال الظاهرية.
$myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain ` -ResourceGroupName $resGroupName -Name "mylink" ` -VirtualNetworkId $vnet.id
قم بإنشاء سجلات-A لأسماء مضيف المجال المخصص التي تحدد عنوان IP الخاص لـ APIM.
$apimIP = $apimService.PrivateIPAddresses[0] New-AzPrivateDnsRecordSet -Name api -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP) New-AzPrivateDnsRecordSet -Name portal -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP) New-AzPrivateDnsRecordSet -Name management -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
إنشاء تكوين بوابة التطبيق
يجب إعداد جميع عناصر التكوين قبل إنشاء بوابة التطبيق. تؤدي الخطوات التالية إلى إنشاء عناصر التكوين المطلوبة لمورد Application Gateway.
قم بإنشاء تكوين Application Gateway IP المسمى gatewayIP01. عندما يبدأ Application Gateway، فإنه يلتقط عنوان IP من الشبكة الفرعية المكونة ويوجه نسبة استخدام الشبكة إلى عناوين IP في تجمع IP الخلفي. ضع في اعتبارك أن كل مثيل يأخذ عنوان IP واحدًا.
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
تكوين نفس منفذ الواجهة الأمامية لنقطة نهاية IP العامة والخاصة. هذا المنفذ هو الذي يتصل به المستخدمون. باستخدام نفس المنفذ لكليهما، نضمن إمكانية إجراء الطلبات الداخلية والخارجية إلى نفس المنفذ.
$fp01 = New-AzApplicationGatewayFrontendPort -Name "port01" -Port 443
تكوين عنواني IP للواجهة الأمامية - واحد عام والآخر خاص. يتم أخذ عنوان IP الخاص من الشبكة الفرعية لبوابة التطبيق، والتي كانت أول من يتم إنشاؤه في الفهرس 0.
$fipconfig01 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP ` -Subnet $vnet.Subnets[0]
تكوين شهادة بوابة التطبيق. يتم استخدامها لفك تشفير وإعادة تشفير نسبة استخدام الشبكة التي تمر عبرها.
إشعار
يدعم Application Gateway تعريف خيارات TLS المخصصة وتعطيل بعض إصدارات بروتوكول TLS المحددة وتحديد مجموعات التشفير وترتيب التفضيل. لمعرفة المزيد حول خيارات TLS القابلة للتكوين، راجع نظرة عامة حول نهج TLS.
$certGateway = New-AzApplicationGatewaySslCertificate -Name "gatewaycert" ` -CertificateFile $gatewayCertPfxPath -Password $certGatewayPwd $certPortal = New-AzApplicationGatewaySslCertificate -Name "portalcert" ` -CertificateFile $portalCertPfxPath -Password $certPortalPwd $certManagement = New-AzApplicationGatewaySslCertificate -Name "managementcert" ` -CertificateFile $managementCertPfxPath -Password $certManagementPwd
قم بإنشاء مستمعي HTTP لبوابة التطبيق. تعيين تكوين IP للواجهة الأمامية والمنفذ وشهادات TLS/SSL لاستخدامها.
# Public/external listeners $gatewayListener = New-AzApplicationGatewayHttpListener -Name "gatewaylistener" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 ` -SslCertificate $certGateway -HostName $gatewayHostname -RequireServerNameIndication true $portalListener = New-AzApplicationGatewayHttpListener -Name "portallistener" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 ` -SslCertificate $certPortal -HostName $portalHostname -RequireServerNameIndication true $managementListener = New-AzApplicationGatewayHttpListener -Name "managementlistener" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 ` -SslCertificate $certManagement -HostName $managementHostname -RequireServerNameIndication true # Private/internal listeners $gatewayListenerPrivate = New-AzApplicationGatewayHttpListener -Name "gatewaylistener-private" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 ` -SslCertificate $certGateway -HostName $gatewayHostname -RequireServerNameIndication true $portalListenerPrivate = New-AzApplicationGatewayHttpListener -Name "portallistener-private" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 ` -SslCertificate $certPortal -HostName $portalHostname -RequireServerNameIndication true $managementListenerPrivate = New-AzApplicationGatewayHttpListener -Name "managementlistener-private" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 ` -SslCertificate $certManagement -HostName $managementHostname -RequireServerNameIndication true
قم بإنشاء مجسات مخصصة لنقطة نهاية نطاق
ContosoApi
بوابة APIM. المسار/status-0123456789abcdef
هو نقطة نهاية صحية افتراضية يتم استضافتها في جميع حالات APIM. التعيينapi.contoso.net
كاسم مضيف مخصص للتحقيق لتأمينه بشهادة TLS/SSL.إشعار
اسم المضيف
contosoapi.azure-api.net
هو اسم المضيف بالوكالة الافتراضي الذي يتم تكوينه عندcontosoapi
إنشاء خدمة مسماة في Azure العامة.$apimGatewayProbe = New-AzApplicationGatewayProbeConfig -Name "apimgatewayprobe" ` -Protocol "Https" -HostName $gatewayHostname -Path "/status-0123456789abcdef" ` -Interval 30 -Timeout 120 -UnhealthyThreshold 8 $apimPortalProbe = New-AzApplicationGatewayProbeConfig -Name "apimportalprobe" ` -Protocol "Https" -HostName $portalHostname -Path "/signin" ` -Interval 60 -Timeout 300 -UnhealthyThreshold 8 $apimManagementProbe = New-AzApplicationGatewayProbeConfig -Name "apimmanagementprobe" ` -Protocol "Https" -HostName $managementHostname -Path "/ServiceStatus" ` -Interval 60 -Timeout 300 -UnhealthyThreshold 8
تكوين شهادة الجذر الموثوق بها لشهادات الواجهة الخلفية. تتحقق هذه الشهادة من صحة شهادات الواجهة الخلفية.
$trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate ` -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
تكوين إعدادات الواجهة الخلفية ل HTTP لبوابة التطبيق، بما في ذلك حد المهلة لطلبات الواجهة الخلفية، وبعد ذلك يتم إلغاؤها. تختلف هذه القيمة عن مهلة الفحص.
$apimPoolGatewaySetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolGatewaySetting" ` -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimGatewayProbe ` -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180 $apimPoolPortalSetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolPortalSetting" ` -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimPortalProbe ` -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180 $apimPoolManagementSetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolManagementSetting" ` -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimManagementProbe ` -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180
تكوين تجمع عناوين IP الخلفية لكل نقطة نهاية APIM باستخدام اسم المجال الخاص بها.
$apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" ` -BackendFqdns $gatewayHostname $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" ` -BackendFqdns $portalHostname $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" ` -BackendFqdns $managementHostname
إنشاء قواعد التوجيه لبوابة التطبيق لاستخدام التوجيه الأساسي.
# Public/external gateway rules $gatewayRule = New-AzApplicationGatewayRequestRoutingRule -Name "gatewayrule" ` -RuleType Basic -HttpListener $gatewayListener -BackendAddressPool $apimGatewayBackendPool ` -BackendHttpSettings $apimPoolGatewaySetting -Priority 10 $portalRule = New-AzApplicationGatewayRequestRoutingRule -Name "portalrule" ` -RuleType Basic -HttpListener $portalListener -BackendAddressPool $apimPortalBackendPool ` -BackendHttpSettings $apimPoolPortalSetting -Priority 20 $managementRule = New-AzApplicationGatewayRequestRoutingRule -Name "managementrule" ` -RuleType Basic -HttpListener $managementListener -BackendAddressPool $apimManagementBackendPool ` -BackendHttpSettings $apimPoolManagementSetting -Priority 30 # Private/internal gateway rules $gatewayRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "gatewayrule-private" ` -RuleType Basic -HttpListener $gatewayListenerPrivate -BackendAddressPool $apimGatewayBackendPool ` -BackendHttpSettings $apimPoolGatewaySetting -Priority 11 $portalRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "portalrule-private" ` -RuleType Basic -HttpListener $portalListenerPrivate -BackendAddressPool $apimPortalBackendPool ` -BackendHttpSettings $apimPoolPortalSetting -Priority 21 $managementRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "managementrule-private" ` -RuleType Basic -HttpListener $managementListenerPrivate -BackendAddressPool $apimManagementBackendPool ` -BackendHttpSettings $apimPoolManagementSetting -Priority 31
تلميح
التغيير
-RuleType
والتوجيه لتقييد الوصول إلى صفحات معينة من بوابة المطور.تكوين عدد المثيلات وحجم بوابة التطبيق. في هذا المثال، نستخدم SKU WAF_v2 لزيادة أمان مورد APIM.
استخدام ما لا يقل عن حالتين (القدرة الإنتاجية) لأعباء العمل الإنتاجية. قد ترغب في استخدام مثال واحد فقط لسيناريوهات عدم الإنتاج أو للتجارب العامة. للمزيد من المعلومات، راجع تسعير Application Gateway.
$sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
تكوين وضع WAF.
تلميح
لفترة قصيرة أثناء الإعداد واختبار قواعد جدار الحماية، قد تحتاج إلى تكوين وضع "الكشف"، الذي يراقب تنبيهات التهديد ويسجلها ولكنه لا يمنع حركة المرور. يمكنك بعد ذلك إجراء أي تحديثات لقواعد جدار الحماية قبل الانتقال إلى وضع "الوقاية"، الذي يحظر الاختراقات والهجمات التي تكتشفها القواعد.
$config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
نظرًا لأن TLS 1.0 هو الافتراضي حاليًا، ضبط بوابة التطبيق لاستخدام إحدى سياسة TLS 1.2 الأخيرة.
$policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
إنشاء بوابة تطبيق
قم بإنشاء بوابة التطبيق تحتوي على كافة عناصر التكوين من الخطوات السابق ذكرها. قد يستغرق إنشاء مثيل 15 دقيقة.
$appgw = New-AzApplicationGateway ` -Name $appgwName ` -ResourceGroupName $resGroupName ` -Location $location ` -Sku $sku ` -SslPolicy $policy ` -SslCertificates $certGateway, $certPortal, $certManagement ` -TrustedRootCertificate $trustedRootCert ` -BackendAddressPools $apimGatewayBackendPool, $apimPortalBackendPool, $apimManagementBackendPool ` -BackendHttpSettingsCollection $apimPoolGatewaySetting, $apimPoolPortalSetting, $apimPoolManagementSetting ` -GatewayIpConfigurations $gipconfig ` -FrontendIpConfigurations $fipconfig01, $fipconfig02 ` -FrontendPorts $fp01 ` -HttpListeners $gatewayListener, $portalListener, $managementListener, $gatewayListenerPrivate, $portalListenerPrivate, $managementListenerPrivate ` -RequestRoutingRules $gatewayRule, $portalRule, $managementRule, $gatewayRulePrivate, $portalRulePrivate, $managementRulePrivate ` -Probes $apimGatewayProbe, $apimPortalProbe, $apimManagementProbe ` -WebApplicationFirewallConfig $config
تأكد من الحالة الصحية للنهايات الخلفية لإدارة واجهة برمجة التطبيقات.
Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
التأكد من أن الحالة الصحية لكل مجموعة خلفية صحية. إذا كنت بحاجة إلى استكشاف خلل في نهاية خلفية غير صحية أو نهاية خلفية بحالة صحية غير معروفة، فراجع مشكلات صحية خلفية في Application Gateway.
قم بإنشاء سجلات DNS للوصول إلى نقاط نهاية APIM من الإنترنت
بعد إنشاء بوابة التطبيق، قم بتكوين الاتصال ب APIM من الإنترنت. قم بإنشاء تسجيلات-A من DNS التي ترسم خريطة لكل من أسماء مضيف نقطة نهاية APIM التي قمت بتكوينها على عنوان IP العام الثابت لبوابة التطبيق. في هذه المقالة، مثال أسماء المضيف هيapi.contoso.net
، portal.contoso.net
وmanagement.contoso.net
.
التحقق الاتصال
لأغراض الاختبار السريع، ضع في اعتبارك تعديل ملف مضيفي الكمبيوتر مؤقتا بإدخالات تعين عنوان IP العام لبوابة التطبيق إلى أسماء مضيفي نقطة نهاية APIM:
- تعديل ملفات المضيفين. على سبيل المثال، إذا كان IP العام لبوابة التطبيق هو
172.203.129.101
، فقد يكون172.203.129.101 api.contoso.net
الإدخال . - تنفيذ أمر curl مقابل نقطة نهاية حالة APIM (نفس المسار الذي تم استخدامه لفحص السلامة سابقا):
curl -v https://api.contoso.net/status-0123456789abcdef
يجب أن يرجع200 Service Operational
هذا الحالة، ما يشير إلى الاتصال الناجح بإدارة واجهة برمجة التطبيقات من خلال بوابة التطبيق.
اعتبارات DNS
تحتوي بوابة التطبيق الآن على مسارات خاصة وعامة. يؤدي استخدام نفس المجالات والمنافذ إلى إنشاء حالة DNS منقسمة الدماغ حيث يجب تعيين محلل DNS خارجي للحل api.contoso.net
إلى عنوان IP الخارجي لبوابة التطبيق بينما يجب أن يحل محلل DNS الداخلي نفس المجال إلى عنوان IP الداخلي لبوابة التطبيق. يوفر هذا الإعداد ميزة في أن التطبيقات لا تحتاج إلى تغيير المجال أو المنفذ للاستهداف الداخلي أو الخارجي للتطبيقات وواجهات برمجة التطبيقات. يتم تأجيل مسؤولية الاستهداف بشكل مناسب إلى محللي DNS.
الملخص
توفر APIM المكونة في شبكة افتراضية واجهة بوابة واحدة لجميع واجهات برمجة التطبيقات المكونة، سواء تم استضافتها في المبنى أو في السحابة. يوفر لك دمج Application Gateway مع APIM المرونة لتمكين واجهات برمجة التطبيقات الخاصة بشكل انتقائي من الوصول إليها على الإنترنت. يوفر التكامل أيضًا WAF كواجهة أمامية لمثال APIM الخاص بك.
الخطوات التالية
الإعداد باستخدام قالب Azure Resource Manager
تعرف على المزيد حول Application Gateway:
تعرف على المزيد حول APIM والشبكات الافتراضية: