Integrace služby API Management do interní virtuální sítě se službou Application Gateway

PLATÍ PRO: Vývojář | Premium

Službu Azure API Management můžete nakonfigurovat ve virtuální síti v interním režimu, takže je přístupná jenom ve virtuální síti. Aplikace Azure Gateway je platforma jako služba (PaaS), která funguje jako nástroj pro vyrovnávání zatížení vrstvy 7. Funguje jako služba reverzního proxy serveru a poskytuje mezi svými nabídkami Azure Web Application Firewall (WAF).

Kombinací API Management zřízených v interní virtuální síti s front-endem Application Gateway můžete:

  • Použít stejný API Management prostředek pro použití interními i externími spotřebiteli.
  • Použít jeden prostředek API Management a mít podmnožinu API definovanou v API Management k dispozici pro externí uživatele.
  • Zapnout a vypnout přístup na API Management z veřejného internetu.

Pokyny k architektuře najdete tady:

Poznámka:

Tento článek byl aktualizován tak, aby používal skladovou položku služby Application Gateway WAF_v2.

Požadavky

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Začněte tím, že si projdete téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Pokud chcete postupovat podle kroků popsaných v tomto článku, musíte mít:

  • Aktivní předplatné Azure

    Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

  • Certifikáty

    • Soubory PFX (Personal Information Exchange) pro vlastní názvy hostitelů služby API Management: brána, portál pro vývojáře a koncový bod správy.
    • Soubor certifikátu (CER) pro kořenový certifikát certifikátů PFX.

    Další informace najdete v tématu Certifikáty pro back-end. Pro účely testování volitelně vygenerujte certifikáty podepsané svým držitelem.

  • Nejnovější verze Azure PowerShellu

Scénář

V tomto článku se dozvíte, jak používat jednu instanci služby API Management pro interní i externí uživatele a zajistit, aby fungovala jako jediný front-end pro místní i cloudová rozhraní API. Vytvoříte instanci služby API Management novějšího typu s jedním tenantem verze 2 (stv2). Naučíte se používat veřejné a privátní naslouchací procesy ve službě Application Gateway. Víte, jak zpřístupnit pouze podmnožinu vašich rozhraní API pro externí spotřebu pomocí funkcí směrování dostupných ve službě Application Gateway. V příkladu jsou rozhraní API zvýrazněná zeleně.

V prvním příkladu nastavení se všechna vaše rozhraní API spravují jenom z vaší virtuální sítě. Interní uživatelé mají přístup ke všem interním a externím rozhraním API. Provoz se nikdy nedostane na internet. Vysoce výkonné připojení je možné doručovat prostřednictvím okruhů Azure ExpressRoute. V tomto příkladu jsou interní spotřebitelé zvýraznění oranžovou barvou.

Diagram znázorňující trasu adresy URL

Co je potřeba k integraci služby API Management a služby Application Gateway?

  • Fond back-endových serverů: Tento fond serverů je interní virtuální IP adresa API Management.
  • Nastavení fondu back-end serverů: Každý fond má nastavení, jako je port, protokol a spřažení na základě souborů cookie. Tato nastavení se používají na všechny servery v rámci fondu.
  • Front-endový port: Tento veřejný port se otevře ve službě Application Gateway. Když na něj dorazí datový přenos, přesměruje se na některý back-end server.
  • Naslouchací proces: Naslouchací proces má front-endový port, protokol (Http nebo Https, tyto hodnoty rozlišují malá a velká písmena) a název certifikátu TLS (Transport Layer Security) (pokud konfigurujete přesměrování zpracování TLS).
  • Pravidlo: Pravidlo sváže naslouchací proces s fondem back-endového serveru.
  • Vlastní sonda stavu: Application Gateway ve výchozím nastavení používá sondy založené na IP adresách k zjištění, které servery jsou BackendAddressPool aktivní. API Management reaguje pouze na požadavky se správnou hlavičkou hostitele, takže výchozí sondy selžou. Definujete vlastní sondu stavu, která pomůže službě Application Gateway zjistit, že služba je aktivní a měla by předávat požadavky.
  • Vlastní certifikáty domény: Pokud chcete získat přístup ke službě API Management z internetu, vytvořte záznamy DNS (Domain Name System) pro mapování názvů hostitelů na front-endovou IP adresu služby Application Gateway. Toto mapování zajišťuje, že hlavička hostitele a certifikát odeslaný do API Management jsou platné. V tomto příkladu použijeme tři certifikáty. Jsou určené pro bránu API Management (back-end), portál pro vývojáře a koncový bod správy.

Zveřejnění portálu pro vývojáře a koncového bodu pro správu externě prostřednictvím služby Application Gateway

V tomto článku také zveřejníme portál pro vývojáře a koncový bod správy externím cílovým skupinám prostřednictvím aplikační brány. K vytvoření naslouchacího procesu, sondy, nastavení a pravidel pro každý koncový bod jsou potřeba další kroky. Všechny podrobnosti jsou uvedeny v příslušných krocích.

Pokud používáte Microsoft Entra ID nebo ověřování třetí strany, povolte ve službě Application Gateway funkci spřažení relací na základě souborů cookie.

Upozorňující

Chcete-li zabránit waF služby Application Gateway v narušení stahování specifikací OpenAPI na portálu pro vývojáře, zakažte pravidlo 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"brány firewall .

Mezi pravidla WAF služby Application Gateway, která můžou narušit funkčnost portálu, patří:

  • 920300, 920330, , 942100942200931130942180942260942110942340pro 942370 administrativní režim
  • 942200, 942260, 942370, 942430942440 pro publikovaný portál

Nastavení proměnných

V této příručce je potřeba definovat několik proměnných. Pojmenování vychází z pokynů pro zkratku architektury přechodu na cloud.

# 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

Vytvořte skupinu prostředků pro Resource Manager

Vytvoření skupiny prostředků pro Azure Resource Manager:

  1. Přihlaste se do Azure.

    Connect-AzAccount
    
  2. Ověřte se pomocí svých přihlašovacích údajů.

  3. Vyberte požadované předplatné.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Vytvořte skupinu prostředků. Pokud používáte existující skupinu prostředků, můžete tento krok přeskočit.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

Resource Manager vyžaduje, aby všechny skupiny prostředků určily umístění. Toto umístění slouží jako výchozí umístění pro prostředky v příslušné skupině prostředků. Ujistěte se, že všechny příkazy pro vytvoření aplikační brány používají stejnou skupinu prostředků.

Vytvoření virtuální sítě a podsítě pro službu Application Gateway

Následující příklad ukazuje, jak vytvořit virtuální síť pomocí Resource Manageru. Virtuální síť v tomto příkladu se skládá z samostatných podsítí pro Službu Application Gateway a API Management.

  1. Nastavte IP adresy služby Application Gateway.

    Poznámka:

    Protože budou veřejné a privátní naslouchací procesy, potřebujeme veřejnou a privátní IP adresu. Statická veřejná IP adresa musí být vytvořená, zatímco privátní IP adresa musí být vybraná z podsítě přidružené ke službě Application Gateway. Privátní IP adresa byla vybrána libovolně.

    $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. Vytvořte skupinu zabezpečení sítě (NSG) a pravidla skupiny zabezpečení sítě pro podsíť služby Application Gateway.

    $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. Vytvořte skupinu zabezpečení sítě (NSG) a pravidla skupiny zabezpečení sítě pro podsíť služby API Management. Api Management stv2 vyžaduje několik konkrétních pravidel 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. Přiřaďte rozsah adres 10.0.0.0/24 k proměnné podsítě, která se má použít pro Službu Application Gateway při vytváření virtuální sítě.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. Přiřaďte rozsah adres 10.0.1.0/24 k proměnné podsítě, která se má použít pro api Management při vytváření virtuální sítě.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. Vytvořte virtuální síť s názvem vnet-contoso. Použijte předponu 10.0.0.0/16 s podsítěmi 10.0.0.0/24 a 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. Přiřaďte proměnné podsítě pro další kroky.

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

Vytvoření instance služby API Management ve virtuální síti

Následující příklad ukazuje, jak vytvořit instanci služby API Management ve virtuální síti nakonfigurované pouze pro interní přístup.

  1. Api Management stv2 vyžaduje veřejnou IP adresu s jedinečným DomainNameLabel.

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Vytvořte objekt virtuální sítě SLUŽBY API Management pomocí podsítě $apimSubnetData , kterou jste vytvořili.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Vytvořte instanci služby API Management ve virtuální síti. Tento příklad vytvoří službu ve vrstvě služby Developer. Nahraďte jedinečný název instance služby API Management.

    $apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName -Organization $apimOrganization `
        -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType "Internal" -Sku "Developer" -PublicIpAddressId $apimPublicIpAddressId.Id
    

Vytvoření a aktivace instance služby API Management v této úrovni může trvat 30 až 40 minut. Po úspěšném provedení předchozího příkazu se podívejte na konfiguraci DNS potřebnou pro přístup ke službě API Management interní virtuální sítě, abyste k ní potvrdili přístup.

Nastavení vlastních názvů domén ve službě API Management

Nastavení vlastních názvů domén ve službě API Management:

  1. Inicializuje následující proměnné s podrobnostmi o certifikátech s privátními klíči pro domény a důvěryhodný kořenový certifikát. V tomto příkladu použijeme api.contoso.net, portal.contoso.neta 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. Vytvořte a nastavte Hostname objekty konfigurace pro koncové body služby API Management.

    $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
    

Konfigurace privátní zóny pro překlad DNS ve virtuální síti

Konfigurace privátní zóny DNS pro překlad DNS ve virtuální síti:

  1. Vytvořte privátní zónu DNS a propojte virtuální síť.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. Vytvořte záznamy A pro názvy vlastních hostitelů domény, které se mapují na privátní IP adresu služby API Management.

    $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)
    

Vytvoření konfigurace aplikační brány

Před vytvořením aplikační brány je nutné nastavit všechny položky konfigurace. Následující kroky vytvoří položky konfigurace potřebné pro prostředek služby Application Gateway.

  1. Vytvořte konfiguraci PROTOKOLU IP služby Application Gateway s názvem gatewayIP01. Při spuštění služby Application Gateway se předá IP adresa z nakonfigurované podsítě a síťový provoz se bude směrovat na IP adresy ve fondu back-end IP adres. Uvědomte si, že každá instance vyžaduje jednu IP adresu.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. Nakonfigurujte stejný front-endový port pro veřejný a privátní koncový bod IP adresy. Tento port je port, ke kterému se uživatelé připojují. Použitím stejného portu pro oba zajistíme, aby se interní i externí požadavky mohly provádět na stejný port.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. Nakonfigurujte dvě front-endové IP adresy – jednu veřejnou a jednu soukromou. Privátní IP adresa se přebírá z podsítě služby Application Gateway, která byla první, která se vytvořila v indexu 0.

    $fipconfig01 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP
    
    $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP `
      -Subnet $vnet.Subnets[0]
    
  4. Nakonfigurujte certifikáty pro aplikační bránu. Používají se k dešifrování a opětovnému šifrování provozu, který prochází.

    Poznámka:

    Application Gateway podporuje definování vlastních možností protokolu TLS, zakázání určitých verzí protokolu TLS a určení šifrovacích sad a pořadí předvoleb. Další informace o konfigurovatelných možnostech protokolu TLS najdete v přehledu zásad PROTOKOLU 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. Vytvořte naslouchací procesy HTTP pro aplikační bránu. Přiřaďte jim konfiguraci front-endové IP adresy, port a certifikáty 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. Vytvořte vlastní sondy do koncového bodu domény brány služby API Management ContosoApi . Cesta /status-0123456789abcdef je výchozí koncový bod stavu hostovaný ve všech instancích služby API Management. Nastavte api.contoso.net ho jako vlastní název hostitele sondy a zabezpečte ho pomocí certifikátu TLS/SSL.

    Poznámka:

    Název contosoapi.azure-api.net hostitele je výchozí název hostitele proxy nakonfigurovaný při vytvoření služby contosoapi ve veřejném 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. Nakonfigurujte důvěryhodný kořenový certifikát back-endových certifikátů. Tento certifikát ověřuje pravost back-endových certifikátů.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. Nakonfigurujte nastavení back-endu HTTP pro aplikační bránu, včetně limitu časového limitu pro požadavky back-endu, po kterém se zruší. Tato hodnota se liší od časového limitu sondy.

    $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. Nakonfigurujte back-endový fond IP adres pro každý koncový bod služby API Management pomocí příslušného názvu domény.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. Vytvořte pravidla směrování pro aplikační bránu, která budou používat základní směrování.

    # 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
    

    Tip

    Změňte -RuleType a směrujte, abyste omezili přístup na určité stránky portálu pro vývojáře.

  11. Nakonfigurujte počet instancí a velikost pro službu Application Gateway. V tomto příkladu používáme WAF_v2 SKU pro zvýšení zabezpečení prostředku služby API Management.

    Pro produkční úlohy použijte minimálně dvě instance (Kapacita). Můžete chtít použít pouze jednu instanci pro neprodukční scénáře nebo pro obecné experimentování. Další informace najdete v tématu o cenách služby Aplikace Azure Gateway.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. Nakonfigurujte režim WAF.

    Tip

    Po krátkou dobu během instalace a testování pravidel brány firewall můžete chtít nakonfigurovat režim Detekce, který monitoruje a protokoluje výstrahy hrozeb, ale neblokuje provoz. Před přechodem do režimu Prevence pak můžete provést jakékoli aktualizace pravidel brány firewall, které brání narušení a útokům, které pravidla detekují.

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. Vzhledem k tomu, že protokol TLS 1.0 je aktuálně výchozí, nastavte aplikační bránu tak, aby používala jednu z posledních zásad protokolu TLS 1.2.

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

Vytvoření brány Application Gateway

  1. Vytvořte aplikační bránu se všemi objekty konfigurace z předchozích kroků. Vytvoření instance může trvat 15 minut.

    $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. Ověřte stav back-endů služby API Management.

    Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
    

Ujistěte se, že stav každého back-endového fondu je v pořádku. Pokud potřebujete vyřešit potíže s back-endem nebo back-endem s neznámým stavem, přečtěte si téma Řešení potíží se stavem back-endu ve službě Application Gateway.

Vytvoření záznamů DNS pro přístup ke koncovým bodům služby API Management z internetu

Po vytvoření aplikační brány nakonfigurujte komunikaci se službou API Management z internetu. Vytvořte záznamy DNS A, které mapují názvy hostitelů koncových bodů služby API Management, které jste nakonfigurovali na statickou veřejnou IP adresu služby Application Gateway. V tomto článku jsou příklady názvů hostitelů api.contoso.net, portal.contoso.neta management.contoso.net.

ověřování Připojení ivity

Pro účely rychlého testování zvažte dočasné změny souboru hostitelů počítače položkami, které mapují veřejnou IP adresu služby Application Gateway na názvy hostitelů koncových bodů služby API Management:

  1. Upravte soubory hostitelů. Pokud je například veřejná IP adresa 172.203.129.101aplikační brány , může být 172.203.129.101 api.contoso.netpoložka .
  2. Spusťte příkaz curl na koncovém bodu stavu služby API Management (stejná cesta, která byla použita pro sondu stavu dříve): curl -v https://api.contoso.net/status-0123456789abcdef Měla by se vrátit 200 Service Operational stav, který značí úspěšnou komunikaci se službou API Management prostřednictvím služby Application Gateway.

Důležité informace o DNS

Služba Application Gateway teď má privátní a veřejné cesty. Použití stejných domén a portů vytvoří situaci DNS rozděleného mozku, ve které by měl být externí překladač DNS nastavený tak, aby přeložil api.contoso.net na externí IP adresu služby Application Gateway, zatímco interní překladač DNS by měl přeložit stejnou doménu na interní IP adresu služby Application Gateway. Toto nastavení poskytuje výhodu v tom, že aplikace nemusí měnit doménu nebo port pro interní nebo externí cílení aplikací a rozhraní API. Odpovědnost za cílení je odpovídajícím způsobem odložena na překladače DNS.

Shrnutí

Služba API Management nakonfigurovaná ve virtuální síti poskytuje jedno rozhraní brány pro všechna nakonfigurovaná rozhraní API bez ohledu na to, jestli jsou hostovaná místně nebo v cloudu. Integrace služby Application Gateway se službou API Management poskytuje flexibilitu selektivního povolení dostupnosti konkrétních rozhraní API na internetu. Integrace také poskytuje WAF jako front-end vaší instanci služby API Management.

Další kroky