Integrera API Management i ett internt virtuellt nätverk med Application Gateway

GÄLLER FÖR: Utvecklare | Premium

Du kan konfigurera Azure API Management i ett virtuellt nätverk i internt läge, vilket gör det endast tillgängligt i det virtuella nätverket. Azure Application Gateway är en paaS (plattform som en tjänst) som fungerar som en Layer-7-lastbalanserare. Den fungerar som en omvänd proxytjänst och tillhandahåller bland sina erbjudanden Azure Web Application Firewall (WAF).

Genom att kombinera API Management som etablerats i ett internt virtuellt nätverk med klientprogrammet Application Gateway kan du:

  • Använd samma API Management-resurs för förbrukning av både interna konsumenter och externa konsumenter.
  • Använd en enda API Management-resurs och ha en delmängd API:er definierade i API Management som är tillgängliga för externa konsumenter.
  • Ange ett nyckelfärdigt sätt att växla på eller av åtkomst till API Management från offentligt internet.

Arkitekturvägledning finns i:

Kommentar

Den här artikeln har uppdaterats för att använda Application Gateway WAF_v2 SKU.

Förutsättningar

Kommentar

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Information om hur du kommer igång finns i Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Om du vill följa stegen som beskrivs i den här artikeln måste du ha:

Scenario

I den här artikeln får du lära dig hur du använder en enda API Management-instans för interna och externa konsumenter och får den att fungera som en enda klientdel för både lokala API:er och moln-API:er. Du skapar en API Management-instans av den nyare typen av enskild klientorganisation version 2 (stv2). Du lär dig hur du använder offentliga och privata lyssnare i Application Gateway. Du förstår hur du endast exponerar en delmängd av dina API:er för extern förbrukning med hjälp av routningsfunktioner som är tillgängliga i Application Gateway. I exemplet är API:erna markerade i grönt.

I det första installationsexemplet hanteras alla dina API:er endast inifrån det virtuella nätverket. Interna konsumenter kan komma åt alla dina interna och externa API:er. Trafiken går aldrig ut till Internet. Anslutningar med höga prestanda kan levereras via Azure ExpressRoute-kretsar. I exemplet är de interna konsumenterna markerade i orange.

Diagram som visar URL-vägen.

Vad krävs för att integrera API Management och Application Gateway?

  • Serverpool för backend: Den här serverpoolen är den interna virtuella IP-adressen för API Management.
  • Inställningar för backend-serverpool: Varje pool har inställningar som port, protokoll och cookiebaserad tillhörighet. Dessa inställningar är knutna till alla servrar i poolen.
  • Klientdelsport: Den här offentliga porten öppnas på programgatewayen. Trafiken som kommer omdirigeras till en av backend-servrarna.
  • Lyssnare: Lyssnaren har en klientdelsport, ett protokoll (Http eller Https, dessa värden är skiftlägeskänsliga) och TLS-certifikatnamnet (om du konfigurerar TLS-avlastning).
  • Regel: Regeln binder en lyssnare till en serverpool för backend.
  • Anpassad hälsoavsökning: Application Gateway använder som standard IP-adressbaserade avsökningar för att ta reda på vilka servrar BackendAddressPool som är aktiva. API Management svarar bara på begäranden med rätt värdrubrik, så standardavsökningarna misslyckas. Du definierar en anpassad hälsoavsökning som hjälper programgatewayen att avgöra om tjänsten är aktiv och bör vidarebefordra begäranden.
  • Anpassade domäncertifikat: Om du vill få åtkomst till API Management från Internet skapar du DNS-poster (Domain Name System) för att mappa dess värdnamn till Application Gateway-klientdelens IP-adress. Den här mappningen säkerställer att värdrubriken och certifikatet som skickas till API Management är giltiga. I det här exemplet använder vi tre certifikat. De är till för API Managements gateway (serverdelen), utvecklarportalen och hanteringsslutpunkten.

Exponera utvecklarportalen och hanteringsslutpunkten externt via Application Gateway

I den här artikeln exponerar vi även utvecklarportalen och hanteringsslutpunkten för externa målgrupper via programgatewayen. Extra steg krävs för att skapa en lyssnare, avsökning, inställningar och regler för varje slutpunkt. All information finns i respektive steg. Om du behöver exponera v2-konfigurationsslutpunkten för den lokalt installerade gatewayen följer du liknande steg (visas inte).

Om du använder Microsoft Entra-ID eller autentisering från tredje part aktiverar du funktionen cookiebaserad sessionstillhörighet i Application Gateway.

Varning

Om du vill förhindra att Application Gateway WAF bryter nedladdningen av OpenAPI-specifikationer i utvecklarportalen inaktiverar du brandväggsregeln 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination".

Application Gateway WAF-regler som kan bryta mot portalens funktioner är:

  • 920300, 920330, 931130, 942100, 942110, 942180, 942200, 942260, , , 942340för 942370 det administrativa läget
  • 942200, 942260, 942370, , 942440 942430för den publicerade portalen

Ange variabler

I den här guiden måste du definiera flera variabler. Namngivning baseras på förkortningsvägledningen för 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

Skapa en resursgrupp för Resource Manager

Så här skapar du en resursgrupp för Azure Resource Manager:

  1. Logga in på Azure.

    Connect-AzAccount
    
  2. Autentisera med dina autentiseringsuppgifter.

  3. Välj den prenumeration som du vill använda.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Skapa en resursgrupp. Du kan hoppa över det här steget om du använder en befintlig resursgrupp.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

Resource Manager kräver att alla resursgrupper anger en plats. Den här platsen används som standard för resurserna i den resursgruppen. Kontrollera att alla kommandon för att skapa en programgateway använder samma resursgrupp.

Skapa ett virtuellt nätverk och ett undernät för programgatewayen

Följande exempel illustrerar hur du skapar ett virtuellt nätverk med hjälp av Resource Manager. Det virtuella nätverket i det här exemplet består av separata undernät för Application Gateway och API Management.

  1. Ange IP-adresserna för Application Gateway.

    Kommentar

    Eftersom det kommer att finnas offentliga och privata lyssnare behöver vi en offentlig och en privat IP-adress. Den statiska offentliga IP-adressen måste skapas medan den privata IP-adressen måste väljas från det undernät som är associerat med programgatewayen. Den privata IP-adressen har valts godtyckligt.

    $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. Skapa en nätverkssäkerhetsgrupp (NSG) och NSG-regler för Application Gateway-undernätet.

    $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. Skapa en nätverkssäkerhetsgrupp (NSG) och NSG-regler för API Management-undernätet. API Management stv2 kräver flera specifika NSG-regler.

    $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. Tilldela adressintervallet 10.0.0.0/24 till undernätsvariabeln som ska användas för Application Gateway när du skapar ett virtuellt nätverk.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. Tilldela adressintervallet 10.0.1.0/24 till undernätsvariabeln som ska användas för API Management när du skapar ett virtuellt nätverk.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. Skapa ett virtuellt nätverk med namnet vnet-contoso. Använd prefixet 10.0.0.0/16 med undernäten 10.0.0.0/24 och 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. Tilldela undernätsvariabler för nästa steg.

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

Skapa en API Management-instans i ett virtuellt nätverk

I följande exempel visas hur du skapar en API Management-instans i ett virtuellt nätverk som endast har konfigurerats för intern åtkomst.

  1. API Management stv2 kräver en offentlig IP-adress med en unik DomainNameLabel.

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Skapa ett virtuellt API Management-nätverksobjekt med hjälp av det undernät $apimSubnetData som du skapade.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Skapa en API Management-instans i det virtuella nätverket. Det här exemplet skapar tjänsten på nivån Utvecklartjänst. Ersätt ett unikt namn för din API Management-instans.

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

Det kan ta mellan 30 och 40 minuter att skapa och aktivera en API Management-instans på den här nivån. När föregående kommando har slutförts kan du läsa DNS-konfiguration som krävs för att få åtkomst till API Management-tjänsten för internt virtuellt nätverk för att bekräfta åtkomsten till den.

Konfigurera anpassade domännamn i API Management

Så här konfigurerar du anpassade domännamn i API Management:

  1. Initiera följande variabler med information om certifikaten med privata nycklar för domänerna och det betrodda rotcertifikatet. I det här exemplet använder api.contoso.netvi , portal.contoso.netoch 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. Skapa och ange konfigurationsobjekten Hostname för API Management-slutpunkterna.

    $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
    

Konfigurera en privat zon för DNS-matchning i det virtuella nätverket

Så här konfigurerar du en privat DNS-zon för DNS-matchning i det virtuella nätverket:

  1. Skapa en privat DNS-zon och länka det virtuella nätverket.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. Skapa A-poster för de anpassade domännamnen som mappas till den privata IP-adressen för 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)
    

Skapa konfiguration av application gateway

Alla konfigurationsobjekt måste konfigureras innan du skapar programgatewayen. Följande steg skapar de konfigurationsobjekt som behövs för en Application Gateway-resurs.

  1. Skapa en Application Gateway IP-konfiguration med namnet gatewayIP01. När Application Gateway startar hämtar den en IP-adress från det konfigurerade undernätet och dirigerar nätverkstrafik till IP-adresserna i backend-IP-poolen. Tänk på att varje instans använder en IP-adress.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. Konfigurera samma klientdelsport för den offentliga och privata IP-slutpunkten. Den här porten är den som användarna ansluter till. Genom att använda samma port för både ser vi till att interna och externa begäranden kan göras till samma port.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. Konfigurera två IP-adresser för klientdelen – en offentlig och en privat. Den privata IP-adressen hämtas från programgatewayens undernät, som var det första som skapades vid index 0.

    $fipconfig01 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP
    
    $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP `
      -Subnet $vnet.Subnets[0]
    
  4. Konfigurera certifikaten för programgatewayen. De används för att dekryptera och omkryptera trafiken som passerar.

    Kommentar

    Application Gateway har stöd för att definiera anpassade TLS-alternativ, inaktivera vissa TLS-protokollversioner och ange chiffersviter och prioritetsordning. Mer information om konfigurerbara TLS-alternativ finns i översikten över TLS-princip.

    $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. Skapa HTTP-lyssnare för programgatewayen. Tilldela klientdelens IP-konfiguration, port och TLS/SSL-certifikat till dem.

    # 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. Skapa anpassade avsökningar till API Management-gatewayens ContosoApi domänslutpunkt. Sökvägen /status-0123456789abcdef är en standardhälsoslutpunkt som finns på alla instanser av API Management. Ange api.contoso.net som ett anpassat värdnamn för avsökningen för att skydda det med TLS/SSL-certifikatet.

    Kommentar

    Värdnamnet contosoapi.azure-api.net är standardnamnet för proxyvärden som konfigureras när en tjänst med namnet contosoapi skapas i offentliga 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. Konfigurera serverdelscertifikatens betrodda rotcertifikat. Det här certifikatet verifierar serverdelscertifikatens äkthet.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. Konfigurera HTTP-serverdelsinställningar för programgatewayen, inklusive en tidsgräns för serverdelsbegäranden, varefter de avbryts. Det här värdet skiljer sig från tidsgränsen för avsökningen.

    $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. Konfigurera en IP-adresspool för serverdelen för varje API Management-slutpunkt med hjälp av dess respektive domännamn.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. Skapa routningsregler för programgatewayen för att använda grundläggande routning.

    # 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
    

    Dricks

    Ändra -RuleType och dirigera för att begränsa åtkomsten till vissa sidor i utvecklarportalen.

  11. Konfigurera antalet instanser av och storleken på programgatewayen. I det här exemplet använder vi WAF_v2 SKU för ökad säkerhet för API Management-resursen.

    Använd minst två instanser (kapacitet) för produktionsarbetsbelastningar. Du kanske bara vill använda en instans för icke-produktionsscenarier eller för allmänna experiment. Mer information finns i Priser för Azure Application Gateway.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. Konfigurera WAF-läget.

    Dricks

    Under en kort period under installationen och för att testa brandväggsreglerna kanske du vill konfigurera läget "Identifiering", som övervakar och loggar hotaviseringar men inte blockerar trafik. Du kan sedan göra alla uppdateringar av brandväggsregler innan du övergår till "Förebyggande" läge, vilket blockerar intrång och attacker som reglerna identifierar.

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. Eftersom TLS 1.0 för närvarande är standard anger du att programgatewayen ska använda en av de senaste TLS 1.2-principerna.

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

Skapa en programgateway

  1. Skapa en programgateway med alla konfigurationsobjekt från föregående steg. Det kan ta 15 minuter att skapa en instans.

    $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. Bekräfta hälsostatusen för API Management-serverdelarna.

    Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
    

Kontrollera att hälsostatusen för varje serverdelspool är Felfri. Om du behöver felsöka en felaktig serverdel eller en serverdel med okänd hälsostatus kan du läsa Felsöka problem med serverdelshälsa i Application Gateway.

Skapa DNS-poster för åtkomst till API Management-slutpunkter från Internet

När programgatewayen har skapats konfigurerar du kommunikation till API Management från Internet. Skapa DNS A-poster som mappar vart och ett av de API Management-slutpunktsvärdnamn som du har konfigurerat till programgatewayens statiska offentliga IP-adress. I den här artikeln är api.contoso.netexempelvärdnamnen , portal.contoso.netoch management.contoso.net.

verifiering av Anslut ivitet

I snabbtestningssyfte kan du överväga att tillfälligt ändra datorns värdfil med poster som mappar programgatewayens offentliga IP-adress till VÄRDnamnen för API Management-slutpunkten:

  1. Ändra värdfilerna. Om till exempel programgatewayens offentliga IP-adress är 172.203.129.101kan posten vara 172.203.129.101 api.contoso.net.
  2. Kör ett curl-kommando mot API Managements statusslutpunkt (samma sökväg som användes för hälsoavsökningen tidigare): curl -v https://api.contoso.net/status-0123456789abcdef Detta bör returnera en 200 Service Operational status som indikerar lyckad kommunikation till API Management via Application Gateway.

DNS-överväganden

Application Gateway har nu privata och offentliga vägar. Med samma domäner och portar skapas en DNS-situation med delad hjärna där en extern DNS-matchare ska ställas in för att matcha api.contoso.net mot programgatewayens externa IP-adress, medan en intern DNS-matchare bör matcha samma domän med programgatewayens interna IP-adress. Den här konfigurationen ger en fördel eftersom program inte behöver ändra domän eller port för intern eller extern inriktning av program och API:er. Ansvaret för att rikta in sig skjuts upp på lämpligt sätt till DNS-matcharna.

Sammanfattning

API Management som konfigurerats i ett virtuellt nätverk tillhandahåller ett enda gatewaygränssnitt för alla konfigurerade API:er, oavsett om de finns lokalt eller i molnet. Genom att integrera Application Gateway med API Management får du flexibiliteten att selektivt göra vissa API:er tillgängliga på Internet. Integrering ger också en WAF som klientdel till din API Management-instans.

Nästa steg