Delen via


API Management integreren in een intern virtueel netwerk met Application Gateway

VAN TOEPASSING OP: Ontwikkelaar | Premium

U kunt Azure API Management configureren in een virtueel netwerk in de interne modus, waardoor het alleen toegankelijk is binnen het virtuele netwerk. Azure-toepassing Gateway is een PaaS -platform als een service (Platform as a Service) die fungeert als een Layer-7 load balancer. Het fungeert als een omgekeerde proxyservice en biedt onder andere Azure Web Application Firewall (WAF).

Door API Management dat in een intern virtueel netwerk is ingericht te combineren met de Application Gateway-front-end, kunt u het volgende doen:

  • Gebruik dezelfde API Management-resource voor gebruik door zowel interne als externe consumenten.
  • Gebruik één API Management-resource en laat een subset van API's die in API Management zijn gedefinieerd beschikbaar voor externe consumenten.
  • Bied een kant-en-klare manier om toegang tot API Management van het openbare internet in of uit te schakelen.

Zie voor architectuurrichtlijnen:

Notitie

Dit artikel is bijgewerkt voor het gebruik van de Application Gateway WAF_v2 SKU.

Vereisten

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Als u de stappen wilt volgen die in dit artikel worden beschreven, moet u het volgende hebben:

  • Een actief Azure-abonnement

    Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

  • Certificaten

    • PFX-bestanden (Personal Information Exchange) voor aangepaste hostnamen van API Management: gateway, ontwikkelaarsportal en beheereindpunt.
    • Een certificaatbestand (CER) voor het basiscertificaat van de PFX-certificaten.

    Zie Certificaten voor de back-end voor meer informatie. Voor testdoeleinden kunt u desgewenst zelfondertekende certificaten genereren.

  • De nieuwste versie van Azure PowerShell

Scenario

In dit artikel leert u hoe u één API Management-exemplaar gebruikt voor interne en externe consumenten en deze als één front-end voor zowel on-premises als cloud-API's kunt fungeren. U maakt een API Management-exemplaar van het nieuwere type versie 2 (stv2). U leert hoe u openbare en persoonlijke listeners gebruikt in Application Gateway. U begrijpt hoe u alleen een subset van uw API's beschikbaar maakt voor extern verbruik met behulp van routeringsfunctionaliteit die beschikbaar is in Application Gateway. In het voorbeeld zijn de API's groen gemarkeerd.

In het eerste installatievoorbeeld worden alle API's alleen beheerd vanuit uw virtuele netwerk. Interne consumenten hebben toegang tot al uw interne en externe API's. Verkeer gaat nooit naar internet. Connectiviteit met hoge prestaties kan worden geleverd via Azure ExpressRoute-circuits. In het voorbeeld worden de interne consumenten oranje gemarkeerd.

Diagram met de URL-route.

Wat is vereist voor het integreren van API Management en Application Gateway?

  • Back-endservergroep: deze servergroep is het interne virtuele IP-adres van API Management.
  • Back-endserverpoolinstellingen: elke pool heeft instellingen, zoals voor de poort, het protocol en de op cookies gebaseerde affiniteit. Deze instellingen worden toegepast op alle servers in de pool.
  • Front-endpoort: deze openbare poort wordt geopend op de toepassingsgateway. Verkeer dat via deze poort binnenkomt, wordt vervolgens omgeleid naar een van de back-endservers.
  • Listener: De listener heeft een front-endpoort, een protocol (Http of Https, deze waarden zijn hoofdlettergevoelig) en de TLS-certificaatnaam (Transport Layer Security) (als u TLS-offload configureert).
  • Regel: de regel verbindt een listener met een back-endservergroep.
  • Aangepaste statustest: Application Gateway gebruikt standaard tests op basis van IP-adressen om erachter te komen welke servers BackendAddressPool actief zijn. API Management reageert alleen op aanvragen met de juiste hostheader, zodat de standaardtests mislukken. U definieert een aangepaste statustest om de toepassingsgateway te helpen bepalen of de service actief is en aanvragen moet doorsturen.
  • Aangepaste domeincertificaten: voor toegang tot API Management via internet maakt u DNS-records (Domain Name System) om de hostnamen toe te wijzen aan het front-end-IP-adres van Application Gateway. Deze toewijzing zorgt ervoor dat de host-header en het certificaat dat naar API Management worden verzonden, geldig zijn. In dit voorbeeld gebruiken we drie certificaten. Ze zijn voor de gateway van API Management (de back-end), de ontwikkelaarsportal en het beheereindpunt.

De ontwikkelaarsportal en het beheereindpunt extern beschikbaar maken via Application Gateway

In dit artikel maken we ook de ontwikkelaarsportal en het beheereindpunt beschikbaar voor externe doelgroepen via de toepassingsgateway. Er zijn extra stappen nodig voor het maken van een listener, test, instellingen en regels voor elk eindpunt. Alle details worden gegeven in hun respectieve stappen. Als u het v2-configuratie-eindpunt van de zelf-hostende gateway beschikbaar wilt maken, volgt u vergelijkbare stappen (niet weergegeven).

Als u Microsoft Entra ID of verificatie van derden gebruikt, schakelt u de functie sessieaffiniteit op basis van cookies in Application Gateway in.

Waarschuwing

Als u wilt voorkomen dat Application Gateway WAF het downloaden van OpenAPI-specificaties in de ontwikkelaarsportal onderbreekt, schakelt u de firewallregel 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"uit.

Waf-regels voor Application Gateway die de functionaliteit van de portal kunnen verbreken, zijn onder andere:

  • 920300, , 920330931130, 942100, , 942110, 942180, 942200, 942340942260942370 voor de beheermodus
  • 942200, , 942260942370, , 942430voor 942440 de gepubliceerde portal

Variabelen instellen

In deze handleiding moet u verschillende variabelen definiëren. Naamgeving is gebaseerd op de richtlijnen voor afkortingen van Cloud Adoption Framework.

# These variables must be changed.
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e"      # 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

Een resourcegroep maken voor Resource Manager

Een resourcegroep maken voor Azure Resource Manager:

  1. Meld u aan bij Azure.

    Connect-AzAccount
    
  2. Verifieer met uw referenties.

  3. Selecteer het gewenste abonnement.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Maak een resourcegroep. U kunt deze stap overslaan als u een bestaande resourcegroep gebruikt.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

Resource Manager vereist dat alle resourcegroepen een locatie opgeven. Deze locatie wordt gebruikt als de standaardlocatie voor resources in die resourcegroep. Zorg ervoor dat alle opdrachten voor het maken van een toepassingsgateway dezelfde resourcegroep gebruiken.

Een virtueel netwerk en een subnet maken voor de toepassingsgateway

In het volgende voorbeeld ziet u hoe u een virtueel netwerk maakt met Resource Manager. Het virtuele netwerk in dit voorbeeld bestaat uit afzonderlijke subnetten voor Application Gateway en API Management.

  1. Stel de IP-adressen van application gateway in.

    Notitie

    Omdat er openbare en persoonlijke listeners zijn, hebben we een openbaar en een privé-IP-adres nodig. Het statische, openbare IP-adres moet worden gemaakt, terwijl het privé-IP-adres moet worden geselecteerd in het subnet dat is gekoppeld aan de toepassingsgateway. Het privé-IP-adres is willekeurig geselecteerd.

    $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. Maak een netwerkbeveiligingsgroep (NSG) en NSG-regels voor het Application Gateway-subnet.

    $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. Maak een netwerkbeveiligingsgroep (NSG) en NSG-regels voor het API Management-subnet. API Management stv2 vereist verschillende specifieke NSG-regels.

    $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. Wijs het adresbereik 10.0.0.0/24 toe aan de subnetvariabele die moet worden gebruikt voor Application Gateway terwijl u een virtueel netwerk maakt.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. Wijs het adresbereik 10.0.1.0/24 toe aan de subnetvariabele die moet worden gebruikt voor API Management terwijl u een virtueel netwerk maakt.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. Maak een virtueel netwerk met de naam vnet-contoso. Gebruik het voorvoegsel 10.0.0.0/16 met subnetten 10.0.0.0/24 en 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. Wijs subnetvariabelen toe voor de volgende stappen.

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

Een API Management-exemplaar maken in een virtueel netwerk

In het volgende voorbeeld ziet u hoe u een API Management-exemplaar maakt in een virtueel netwerk dat alleen is geconfigureerd voor interne toegang.

  1. API Management stv2 vereist een openbaar IP-adres met een uniek DomainNameLabel.

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Maak een virtueel API Management-netwerkobject met behulp van het subnet $apimSubnetData dat u hebt gemaakt.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Maak een API Management-exemplaar in het virtuele netwerk. In dit voorbeeld wordt de service gemaakt in de servicelaag Developer. Vervang een unieke naam voor uw API Management-exemplaar.

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

Het kan 30 tot 40 minuten duren voordat een API Management-exemplaar in deze laag is gemaakt en geactiveerd. Nadat de vorige opdracht is geslaagd, raadpleegt u de DNS-configuratie die is vereist voor toegang tot de API Management-service van het interne virtuele netwerk om de toegang te bevestigen.

Aangepaste domeinnamen instellen in API Management

Aangepaste domeinnamen instellen in API Management:

  1. Initialiseer de volgende variabelen met de details van de certificaten met persoonlijke sleutels voor de domeinen en het vertrouwde basiscertificaat. In dit voorbeeld gebruiken api.contoso.netwe , portal.contoso.neten 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. Maak en stel de Hostname configuratieobjecten voor de API Management-eindpunten in.

    $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
    

Een privézone configureren voor DNS-omzetting in het virtuele netwerk

Een privé-DNS-zone configureren voor DNS-omzetting in het virtuele netwerk:

  1. Maak een privé-DNS-zone en koppel het virtuele netwerk.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. Maak A-records voor de aangepaste domeinnamen die zijn toegewezen aan het privé-IP-adres van 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)
    

Configuratie van toepassingsgateway maken

Alle configuratie-items moeten worden ingesteld voordat u de toepassingsgateway maakt. Met de volgende stappen maakt u de configuratie-items die nodig zijn voor een Application Gateway-resource.

  1. Maak een APPLICATION Gateway IP-configuratie met de naam gatewayIP01. Wanneer de toepassingsgateway wordt geopend, wordt er een IP-adres opgehaald via het geconfigureerde subnet en wordt het netwerkverkeer omgeleid naar de IP-adressen in de groep met back-end-IP's. Onthoud dat elk exemplaar één IP-adres gebruikt.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. Configureer dezelfde front-endpoort voor het openbare en privé-IP-eindpunt. Deze poort is de poort waarmee gebruikers verbinding maken. Door dezelfde poort te gebruiken voor beide zorgen we ervoor dat interne en externe aanvragen naar dezelfde poort kunnen worden gedaan.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. Configureer twee front-end-IP-adressen: één openbaar en één privé. Het privé-IP-adres wordt opgehaald uit het subnet van de toepassingsgateway, de eerste die bij index 0 moet worden gemaakt.

    $fipconfig01 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP
    
    $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP `
      -Subnet $vnet.Subnets[0]
    
  4. Configureer de certificaten voor de toepassingsgateway. Ze worden gebruikt om het verkeer dat wordt doorgegeven, te ontsleutelen en opnieuw te ontsleutelen.

    Notitie

    Application Gateway ondersteunt het definiëren van aangepaste TLS-opties, het uitschakelen van bepaalde TLS-protocolversies en het opgeven van coderingssuites en de volgorde van voorkeur. Zie het overzicht van TLS-beleid voor meer informatie over configureerbare TLS-opties.

    $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. Maak de HTTP-listeners voor de toepassingsgateway. Wijs de front-end-IP-configuratie, poort en TLS/SSL-certificaten eraan toe.

    # 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. Maak aangepaste tests voor het eindpunt van het API Management-gatewaydomein ContosoApi . Het pad /status-0123456789abcdef is een standaardstatuseindpunt dat wordt gehost op alle exemplaren van API Management. Stel api.contoso.net deze in als een aangepaste hostnaam voor de test om deze te beveiligen met het TLS/SSL-certificaat.

    Notitie

    De hostnaam is de standaardhostnaam contosoapi.azure-api.net van de proxy die is geconfigureerd wanneer een service met de naam contosoapi wordt gemaakt in openbare 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. Configureer het vertrouwde basiscertificaat van de back-endcertificaten. Dit certificaat controleert de echtheid van de back-endcertificaten.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. Configureer back-endinstellingen voor de toepassingsgateway, inclusief een time-outlimiet voor back-endaanvragen, waarna ze worden geannuleerd. Deze waarde verschilt van de time-out van de test.

    $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. Configureer een back-end-IP-adresgroep voor elk API Management-eindpunt met behulp van de bijbehorende domeinnaam.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. Maak routeringsregels voor de toepassingsgateway om basisroutering te gebruiken.

    # 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

    Wijzig -RuleType en routering om de toegang tot bepaalde pagina's van de ontwikkelaarsportal te beperken.

  11. Configureer het aantal exemplaren en de grootte voor de toepassingsgateway. In dit voorbeeld gebruiken we WAF_v2 SKU voor een betere beveiliging van de API Management-resource.

    Gebruik minimaal twee exemplaren (capaciteit) voor productieworkloads. Mogelijk wilt u slechts één exemplaar gebruiken voor niet-productiescenario's of voor algemene experimenten. Zie Azure-toepassing Gateway-prijzen voor meer informatie.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. Configureer de WAF-modus.

    Tip

    Gedurende een korte periode tijdens de installatie en om uw firewallregels te testen, kunt u de detectiemodus configureren, die bedreigingswaarschuwingen bewaakt en registreert, maar verkeer niet blokkeert. Vervolgens kunt u eventuele updates aan firewallregels aanbrengen voordat u overgaat naar de modus Preventie, waardoor inbraak en aanvallen die door de regels worden gedetecteerd, worden geblokkeerd.

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. Omdat TLS 1.0 momenteel de standaardwaarde is, stelt u de toepassingsgateway in op een van de recente TLS 1.2-beleidsregels.

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

Een toepassingsgateway maken

  1. Maak een toepassingsgateway met alle configuratieobjecten uit de voorgaande stappen. Het kan 15 minuten duren voordat een exemplaar is gemaakt.

    $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. Controleer de status van de BACK-ends van API Management.

    Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
    

Zorg ervoor dat de status van elke back-endpool in orde is. Als u een beschadigde back-end of een back-end met een onbekende status wilt oplossen, raadpleegt u Problemen met de back-endstatus in Application Gateway oplossen.

DNS-records maken voor toegang tot API Management-eindpunten via internet

Nadat de toepassingsgateway is gemaakt, configureert u communicatie met API Management vanaf internet. Maak DNS A-records die elk van de hostnamen van het API Management-eindpunt toewijzen die u hebt geconfigureerd voor het statische openbare IP-adres van de toepassingsgateway. In dit artikel zijn api.contoso.netvoorbeeldhostnamen , portal.contoso.neten management.contoso.net.

Verbinding maken iviteitsverificatie

Voor snelle testdoeleinden kunt u het hostsbestand van uw computer tijdelijk wijzigen met vermeldingen die het openbare IP-adres van de toepassingsgateway toewijzen aan de hostnamen van het API Management-eindpunt:

  1. Wijzig de hosts-bestanden. Als het openbare IP-adres van de toepassingsgateway bijvoorbeeld is 172.203.129.101, kan de vermelding zijn 172.203.129.101 api.contoso.net.
  2. Voer een curl-opdracht uit op het statuseindpunt van API Management (hetzelfde pad dat eerder is gebruikt voor de statustest): curl -v https://api.contoso.net/status-0123456789abcdef Hiermee wordt een 200 Service Operational status geretourneerd die aangeeft dat de communicatie met API Management via Application Gateway is geslaagd.

DNS-overwegingen

De Application Gateway heeft nu privé- en openbare paden. Als u dezelfde domeinen en poorten gebruikt, ontstaat er een split-brain DNS-situatie waarin een externe DNS-resolver moet worden ingesteld om te worden omgezet api.contoso.net in het externe IP-adres van de toepassingsgateway, terwijl een interne DNS-resolver hetzelfde domein moet omzetten in het interne IP-adres van de toepassingsgateway. Deze installatie biedt een voordeel dat toepassingen geen domein of poort hoeven te wijzigen voor interne of externe targeting van toepassingen en API's. De verantwoordelijkheid voor targeting wordt op de juiste wijze uitgesteld naar de DNS-resolvers.

Samenvatting

API Management geconfigureerd in een virtueel netwerk biedt één gatewayinterface voor alle geconfigureerde API's, ongeacht of deze on-premises of in de cloud worden gehost. De integratie van Application Gateway met API Management biedt u de flexibiliteit om bepaalde API's selectief toegankelijk te maken op internet. Integratie biedt ook een WAF als front-end aan uw API Management-exemplaar.

Volgende stappen