دمج 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 من تشغيل وإيقاف الإنترنت العام.

للحصول على إرشادات معمارية، راجع:

إشعار

تم تحديث هذه المقالة لاستخدام Application Gateway WAF_v2 SKU.

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

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

لاتباع الخطوات الموضحة في هذه المقالة، يجب أن يتوفر لديك ما يلي:

السيناريو

في هذه المقالة، تتعلم كيفية استخدام مثال واحد لـ APIM للمستهلكين الداخليين والخارجيين وجعلها تعمل كواجهة أمامية واحدة لكل من واجهات برمجة التطبيقات الموجودة في المباني وواجهات برمجة التطبيقات السحابية. يمكنك إنشاء مثيل APIM من نوع الإصدار 2 من المستأجر الفردي الأحدث (stv2). ستتعلم كيفية استخدام وحدات الاستماع العامة والخاصة في Application Gateway. أنت تفهم كيفية عرض مجموعة فرعية فقط من واجهات برمجة التطبيقات للاستهلاك الخارجي باستخدام وظيفة التوجيه المتوفرة في Application Gateway. في المثال، يتم تسليط الضوء على API باللون الأخضر.

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

مخطط يوضح طريق URL

ما هو المطلوب لدمج 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:

  1. تسجيل الدخول إلى أزور.

    Connect-AzAccount
    
  2. المصادقة باستخدام بيانات الاعتماد الخاصة بك.

  3. حدد الاشتراك الذي تريده.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. قم بإنشاء مجموعة موارد. يمكنك تخطي هذه الخطوة إذا كنت تستخدم مجموعة موارد موجودة.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

ويشترط Azure Resource Manager أن تحدد جميع مجموعات الموارد موقعا. يتم استخدام هذا الموقع باعتباره الموقع الافتراضي للموارد في مجموعة الموارد تلك. تأكد من أن كافة الأوامر لإنشاء بوابة تطبيق تستخدم نفس مجموعة الموارد.

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

يبين المثال التالي كيفية إنشاء شبكة افتراضية باستخدام Azure Resource Manager. تتكوّن شبكة الاتصال الظاهرية في هذا المثال من شبكات فرعية منفصلة لـ Application Gateway وAPI Management.

  1. تعيين عناوين 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
    
  2. إنشاء مجموعة أمان شبكة (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
    
  3. إنشاء مجموعة أمان شبكة (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
    
  4. قم بتعيين نطاق العنوان 10.0.0.0/24 لمتغير الشبكة الفرعية ليتم استخدامه لـ Application Gateway أثناء إنشاء شبكة افتراضية.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. قم بتعيين نطاق العنوان 10.0.1.0/24 لمتغير الشبكة الفرعية ليتم استخدامه لـ APIM أثناء إنشاء شبكة افتراضية.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. إنشاء شبكة ظاهرية باسم 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
    
  7. تعيين متغيرات الشبكة الفرعية للخطوات التالية.

    $appGatewaySubnetData = $vnet.Subnets[0]
    $apimSubnetData = $vnet.Subnets[1]
    

قم بإنشاء خدمة APIM داخل الشبكة الظاهرية

يوضح المثال التالي كيفية إنشاء مثال APIM في شبكة افتراضية مهيأة للوصول الداخلي فحسب.

  1. يتطلب API Management stv2 عنوان IP عاما مع فريد DomainNameLabel.

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. إنشاء عنصر شبكة ظاهري لـ APIM باستخدام الشبكة الفرعية $apimSubnetData التي تم إنشاؤها أعلاه.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. قم بإنشاء خدمة 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:

  1. تهيئة المتغيرات التالية باستخدام تفاصيل الشهادات باستخدام مفاتيح خاصة للمجالات و الشهادة الجذر الموثوق بها. في هذا المثال، نستخدم 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
    
  2. قم بإنشاء 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 في الشبكة الافتراضية:

  1. قم بإنشاء منطقة DNS خاصة وربط شبكة الاتصال الظاهرية.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. قم بإنشاء سجلات-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.

  1. قم بإنشاء تكوين Application Gateway IP المسمى gatewayIP01. عندما يبدأ Application Gateway، فإنه يلتقط عنوان IP من الشبكة الفرعية المكونة ويوجه نسبة استخدام الشبكة إلى عناوين IP في تجمع IP الخلفي. ضع في اعتبارك أن كل مثيل يأخذ عنوان IP واحدًا.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. تكوين نفس منفذ الواجهة الأمامية لنقطة نهاية IP العامة والخاصة. هذا المنفذ هو الذي يتصل به المستخدمون. باستخدام نفس المنفذ لكليهما، نضمن إمكانية إجراء الطلبات الداخلية والخارجية إلى نفس المنفذ.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. تكوين عنواني 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]
    
  4. تكوين شهادة بوابة التطبيق. يتم استخدامها لفك تشفير وإعادة تشفير نسبة استخدام الشبكة التي تمر عبرها.

    إشعار

    يدعم 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
    
  5. قم بإنشاء مستمعي 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
    
  6. قم بإنشاء مجسات مخصصة لنقطة نهاية نطاق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
    
  7. تكوين شهادة الجذر الموثوق بها لشهادات الواجهة الخلفية. تتحقق هذه الشهادة من صحة شهادات الواجهة الخلفية.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. تكوين إعدادات الواجهة الخلفية ل 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
    
  9. تكوين تجمع عناوين IP الخلفية لكل نقطة نهاية APIM باستخدام اسم المجال الخاص بها.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. إنشاء قواعد التوجيه لبوابة التطبيق لاستخدام التوجيه الأساسي.

    # 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والتوجيه لتقييد الوصول إلى صفحات معينة من بوابة المطور.

  11. تكوين عدد المثيلات وحجم بوابة التطبيق. في هذا المثال، نستخدم SKU WAF_v2 لزيادة أمان مورد APIM.

    استخدام ما لا يقل عن حالتين (القدرة الإنتاجية) لأعباء العمل الإنتاجية. قد ترغب في استخدام مثال واحد فقط لسيناريوهات عدم الإنتاج أو للتجارب العامة. للمزيد من المعلومات، راجع تسعير Application Gateway.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. تكوين وضع WAF.

    تلميح

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

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. نظرًا لأن TLS 1.0 هو الافتراضي حاليًا، ضبط بوابة التطبيق لاستخدام إحدى سياسة TLS 1.2 الأخيرة.

    $policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
    

إنشاء بوابة تطبيق

  1. قم بإنشاء بوابة التطبيق تحتوي على كافة عناصر التكوين من الخطوات السابق ذكرها. قد يستغرق إنشاء مثيل 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
    
  2. تأكد من الحالة الصحية للنهايات الخلفية لإدارة واجهة برمجة التطبيقات.

    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:

  1. تعديل ملفات المضيفين. على سبيل المثال، إذا كان IP العام لبوابة التطبيق هو 172.203.129.101، فقد يكون 172.203.129.101 api.contoso.netالإدخال .
  2. تنفيذ أمر 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 الخاص بك.

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