Integrowanie usługi API Management w wewnętrznej sieci wirtualnej z usługą Application Gateway

DOTYCZY: Developer | Premium

Usługę Azure API Management można skonfigurować w sieci wirtualnej w trybie wewnętrznym, co sprawia, że jest ona dostępna tylko w sieci wirtualnej. aplikacja systemu Azure Gateway to platforma jako usługa (PaaS), która działa jako moduł równoważenia obciążenia warstwy 7. Działa jako usługa zwrotnego serwera proxy i oferuje między innymi usługę Azure Web Application Firewall (WAF).

Łącząc usługę API Management aprowizowaną w wewnętrznej sieci wirtualnej z frontonem usługi Application Gateway, można:

  • Wykorzystaj ten sam zasób usługi API Management do użycia zarówno przez użytkowników wewnętrznych, jak i zewnętrznych.
  • Użyj pojedynczego zasobu usługi API Management i określ podzestaw interfejsów API w usłudze API Management dostępnych dla użytkowników zewnętrznych.
  • Zapewnij gotowy sposób włączania i wyłączania dostępu do usługi API Management z publicznej sieci internetowej.

Aby uzyskać wskazówki dotyczące architektury, zobacz:

Uwaga

Ten artykuł został zaktualizowany w celu korzystania z jednostki SKU usługi Application Gateway WAF_v2.

Wymagania wstępne

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Aby wykonać kroki opisane w tym artykule, musisz mieć następujące elementy:

  • Aktywna subskrypcja platformy Azure

    Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

  • Certyfikaty

    • Pliki wymiany informacji osobistych (PFX) dla niestandardowych nazw hostów usługi API Management: bramy, portalu dla deweloperów i punktu końcowego zarządzania.
    • Plik certyfikatu (CER) dla certyfikatu głównego certyfikatów PFX.

    Aby uzyskać więcej informacji, zobacz Certyfikaty dla zaplecza. W celach testowych opcjonalnie wygeneruj certyfikaty z podpisem własnym.

  • Najnowsza wersja usługi Azure PowerShell

Scenariusz

Z tego artykułu dowiesz się, jak używać pojedynczego wystąpienia usługi API Management dla użytkowników wewnętrznych i zewnętrznych, i uczynić go pojedynczym frontonem zarówno dla interfejsów API lokalnych, jak i w chmurze. Tworzysz wystąpienie usługi API Management nowszej wersji 2 (stv2). Dowiesz się, jak używać odbiorników publicznych i prywatnych w usłudze Application Gateway. Rozumiesz, jak uwidocznić tylko podzbiór interfejsów API na potrzeby użycia zewnętrznego przy użyciu funkcji routingu dostępnej w usłudze Application Gateway. W tym przykładzie interfejsy API są wyróżnione kolorem zielonym.

W pierwszym przykładzie konfiguracji wszystkie interfejsy API są zarządzane tylko z poziomu sieci wirtualnej. Użytkownicy wewnętrzni mogą uzyskiwać dostęp do wszystkich wewnętrznych i zewnętrznych interfejsów API. Ruch nigdy nie wychodzi do Internetu. Łączność o wysokiej wydajności można dostarczać za pośrednictwem obwodów usługi Azure ExpressRoute. W tym przykładzie odbiorcy wewnętrzni są wyróżniani kolorem pomarańczowym.

Diagram przedstawiający trasę adresu URL.

Co jest wymagane do zintegrowania usług API Management i Application Gateway?

  • Pula serwerów zaplecza: ta pula serwerów jest wewnętrznym wirtualnym adresem IP usługi API Management.
  • Ustawienia puli serwerów zaplecza: każda pula ma ustawienia, takie jak port, protokół i koligacja oparta na plikach cookie. Te ustawienia są stosowane względem wszystkich serwerów w puli.
  • Port frontonu: ten publiczny port jest otwarty w bramie aplikacji. Ruch, który tu trafia, jest następnie przekierowywany do jednego z serwerów zaplecza.
  • Odbiornik: Odbiornik ma port frontonu, protokół (Http lub Https, te wartości są uwzględniane wielkości liter) i nazwę certyfikatu Transport Layer Security (TLS) (jeśli konfiguruje odciążanie protokołu TLS).
  • Reguła: reguła wiąże odbiornik z pulą serwerów zaplecza.
  • Niestandardowa sonda kondycji: usługa Application Gateway domyślnie używa sond opartych na adresach IP, aby ustalić, które serwery są BackendAddressPool aktywne. Usługa API Management odpowiada tylko na żądania z poprawnym nagłówkiem hosta, dlatego domyślne sondy kończą się niepowodzeniem. Zdefiniuj niestandardową sondę kondycji, aby ułatwić bramie aplikacji określenie, czy usługa jest aktywna i powinna przekazywać żądania.
  • Niestandardowe certyfikaty domeny: aby uzyskać dostęp do usługi API Management z Internetu, utwórz rekordy systemu nazw domen (DNS), aby zamapować nazwy hostów na adres IP frontonu usługi Application Gateway. To mapowanie gwarantuje, że nagłówek hosta i certyfikat wysłany do usługi API Management są prawidłowe. W tym przykładzie używamy trzech certyfikatów. Są one przeznaczone dla bramy usługi API Management (zaplecza), portalu deweloperów i punktu końcowego zarządzania.

Udostępnianie portalu deweloperów i punktu końcowego zarządzania zewnętrznie za pośrednictwem usługi Application Gateway

W tym artykule uwidaczniamy również portal deweloperów i punkt końcowy zarządzania zewnętrznych odbiorców za pośrednictwem bramy aplikacji. Aby utworzyć odbiornik, sondę, ustawienia i reguły dla każdego punktu końcowego, potrzebne są dodatkowe kroki. Wszystkie szczegóły są podane w odpowiednich krokach.

Jeśli używasz identyfikatora Entra firmy Microsoft lub uwierzytelniania innej firmy, włącz funkcję koligacji sesji opartej na plikach cookie w usłudze Application Gateway.

Ostrzeżenie

Aby zapobiec zerwaniu pobierania specyfikacji interfejsu OpenAPI usługi Application Gateway w portalu dla deweloperów, wyłącz regułę 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"zapory .

Reguły zapory aplikacji internetowej usługi Application Gateway, które mogą spowodować przerwanie działania portalu, obejmują:

  • 920300, 920330, 931130942180942260942110942200942100, 942340942370 dla trybu administracyjnego
  • 942200, , 942260, 942430942370, 942440 dla opublikowanego portalu

Ustawianie zmiennych

W tym przewodniku należy zdefiniować kilka zmiennych. Nazewnictwo jest oparte na wskazówkach dotyczących skrótów przewodnika 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

Tworzenie grupy zasobów dla usługi Resource Manager

Aby utworzyć grupę zasobów dla usługi Azure Resource Manager:

  1. Zaloguj się do Azure.

    Connect-AzAccount
    
  2. Uwierzytelnij się przy użyciu poświadczeń.

  3. Wybierz odpowiednią subskrypcję.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Utwórz grupę zasobów. Jeśli używasz istniejącej grupy zasobów, możesz pominąć ten krok.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

Usługa Resource Manager wymaga określenia lokalizacji przez wszystkie grupy zasobów. Ta lokalizacja będzie używana jako domyślna lokalizacja dla zasobów w danej grupie zasobów. Upewnij się, że wszystkie polecenia do utworzenia bramy aplikacji używają tej samej grupy zasobów.

Tworzenie sieci wirtualnej i podsieci dla bramy aplikacji

W poniższym przykładzie pokazano, jak utworzyć sieć wirtualną przy użyciu usługi Resource Manager. Sieć wirtualna w tym przykładzie składa się z oddzielnych podsieci dla usługi Application Gateway i usługi API Management.

  1. Ustaw adresy IP usługi Application Gateway.

    Uwaga

    Ponieważ będą dostępne odbiorniki publiczne i prywatne, potrzebujemy publicznego i prywatnego adresu IP. Statyczny publiczny adres IP musi zostać utworzony, natomiast prywatny adres IP musi zostać wybrany z podsieci skojarzonej z bramą aplikacji. Prywatny adres IP został wybrany arbitralnie.

    $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. Utwórz sieciową grupę zabezpieczeń i reguły sieciowej grupy zabezpieczeń dla podsieci usługi 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. Utwórz sieciową grupę zabezpieczeń i reguły sieciowej grupy zabezpieczeń dla podsieci usługi API Management. Usługa API Management stv2 wymaga kilku określonych reguł sieciowej grupy zabezpieczeń.

    $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. Przypisz zakres adresów 10.0.0.0/24 do zmiennej podsieci, która ma być używana dla usługi Application Gateway podczas tworzenia sieci wirtualnej.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. Przypisz zakres adresów 10.0.1.0/24 do zmiennej podsieci, która ma być używana w usłudze API Management podczas tworzenia sieci wirtualnej.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. Utwórz sieć wirtualną o nazwie vnet-contoso. Użyj prefiksu 10.0.0.0/16 z podsieciami 10.0.0.0/24 i 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. Przypisz zmienne podsieci do następnych kroków.

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

Tworzenie wystąpienia usługi API Management w sieci wirtualnej

W poniższym przykładzie pokazano, jak utworzyć wystąpienie usługi API Management w sieci wirtualnej skonfigurowanej tylko na potrzeby dostępu wewnętrznego.

  1. Usługa API Management stv2 wymaga publicznego adresu IP z unikatowym DomainNameLabeladresem .

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Utwórz obiekt sieci wirtualnej usługi API Management przy użyciu utworzonej podsieci $apimSubnetData .

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Utwórz wystąpienie usługi API Management w sieci wirtualnej. W tym przykładzie utworzono usługę w warstwie usługi Deweloper. Zastąp unikatową nazwę wystąpienia usługi API Management.

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

Utworzenie i aktywowanie wystąpienia usługi API Management w tej warstwie może potrwać od 30 do 40 minut. Po pomyślnym wykonaniu poprzedniego polecenia zobacz Konfiguracja DNS wymagana do uzyskania dostępu do wewnętrznej usługi API Management sieci wirtualnej w celu potwierdzenia dostępu do niego.

Konfigurowanie niestandardowych nazw domen w usłudze API Management

Aby skonfigurować niestandardowe nazwy domen w usłudze API Management:

  1. Zainicjuj następujące zmienne przy użyciu szczegółów certyfikatów z kluczami prywatnymi dla domen i zaufanego certyfikatu głównego. W tym przykładzie używamy wartości api.contoso.net, portal.contoso.neti 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. Utwórz i ustaw Hostname obiekty konfiguracji dla punktów końcowych usługi 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
    

Konfigurowanie strefy prywatnej na potrzeby rozpoznawania nazw DNS w sieci wirtualnej

Aby skonfigurować prywatną strefę DNS na potrzeby rozpoznawania nazw DNS w sieci wirtualnej:

  1. Utwórz prywatną strefę DNS i połącz sieć wirtualną.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. Utwórz rekordy A dla niestandardowych nazw hostów domeny mapujących na prywatny adres IP usługi 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)
    

Tworzenie konfiguracji bramy aplikacji

Przed utworzeniem bramy aplikacji należy skonfigurować wszystkie elementy konfiguracji. Poniższe kroki umożliwiają utworzenie elementów konfiguracji wymaganych dla zasobu usługi Application Gateway.

  1. Utwórz konfigurację adresu IP usługi Application Gateway o nazwie gatewayIP01. Uruchomiona usługa Application Gateway wybierze adres IP ze skonfigurowanej podsieci i skieruje ruch sieciowy do adresów IP w puli adresów IP zaplecza. Pamiętaj, że każde wystąpienie będzie mieć jeden adres IP.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. Skonfiguruj ten sam port frontonu dla publicznego i prywatnego punktu końcowego adresu IP. Ten port jest tym, z którymi użytkownicy nawiązują połączenie. Korzystając z tego samego portu dla obu tych opcji, upewniamy się, że żądania wewnętrzne i zewnętrzne mogą być wysyłane do tego samego portu.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. Skonfiguruj dwa adresy IP frontonu — jeden publiczny i jeden prywatny. Prywatny adres IP jest pobierany z podsieci bramy aplikacji, która była pierwszą, która została utworzona w indeksie 0.

    $fipconfig01 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP
    
    $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP `
      -Subnet $vnet.Subnets[0]
    
  4. Skonfiguruj certyfikaty dla bramy aplikacji. Są one używane do odszyfrowywania i ponownego szyfrowania ruchu, który przechodzi.

    Uwaga

    Usługa Application Gateway obsługuje definiowanie niestandardowych opcji protokołu TLS, wyłączanie niektórych wersji protokołu TLS oraz określanie zestawów szyfrowania i kolejności preferencji. Aby dowiedzieć się więcej na temat konfigurowalnych opcji protokołu TLS, zobacz Omówienie zasad PROTOKOŁU 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. Utwórz odbiorniki HTTP dla bramy aplikacji. Przypisz do nich konfigurację, port i certyfikaty TLS/SSL frontonu.

    # 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. Utwórz niestandardowe sondy w punkcie końcowym domeny bramy usługi API Management ContosoApi . Ścieżka /status-0123456789abcdef jest domyślnym punktem końcowym kondycji hostowanym we wszystkich wystąpieniach usługi API Management. Ustaw api.contoso.net jako niestandardową nazwę hosta sondy, aby zabezpieczyć go za pomocą certyfikatu TLS/SSL.

    Uwaga

    Nazwa contosoapi.azure-api.net hosta to domyślna nazwa hosta serwera proxy skonfigurowana podczas tworzenia usługi o nazwie contosoapi w publicznej platformie 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. Skonfiguruj zaufany certyfikat główny certyfikatów zaplecza. Ten certyfikat weryfikuje autentyczność certyfikatów zaplecza.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. Skonfiguruj ustawienia zaplecza HTTP dla bramy aplikacji, w tym limit czasu dla żądań zaplecza, po którym zostaną anulowane. Ta wartość różni się od limitu czasu 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. Skonfiguruj pulę adresów IP zaplecza dla każdego punktu końcowego usługi API Management przy użyciu odpowiedniej nazwy domeny.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. Utwórz reguły routingu dla bramy aplikacji, aby używać routingu podstawowego.

    # 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
    

    Napiwek

    Zmień -RuleType i routing, aby ograniczyć dostęp do niektórych stron portalu deweloperów.

  11. Skonfiguruj liczbę wystąpień i rozmiar bramy aplikacji. W tym przykładzie używamy jednostki SKU WAF_v2 w celu zwiększenia bezpieczeństwa zasobu usługi API Management.

    Użyj co najmniej dwóch wystąpień (pojemność) dla obciążeń produkcyjnych. Możesz użyć tylko jednego wystąpienia w scenariuszach nieprodukcyjnych lub w przypadku eksperymentów ogólnych. Aby uzyskać więcej informacji, zobacz cennik usługi aplikacja systemu Azure Gateway.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. Skonfiguruj tryb zapory aplikacji internetowej.

    Napiwek

    Przez krótki okres podczas konfigurowania i testowania reguł zapory możesz skonfigurować tryb "Wykrywanie", który monitoruje i rejestruje alerty o zagrożeniach, ale nie blokuje ruchu. Następnie można wprowadzić wszelkie aktualizacje reguł zapory przed przejściem do trybu "Zapobieganie", który blokuje włamania i ataki wykrywane przez reguły.

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. Ponieważ protokół TLS 1.0 jest obecnie domyślny, ustaw bramę aplikacji tak, aby korzystała z jednej z ostatnich zasad protokołu TLS 1.2.

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

Tworzenie bramy aplikacji

  1. Utwórz bramę aplikacji ze wszystkimi obiektami konfiguracji z poprzednich kroków. Utworzenie wystąpienia może potrwać 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. Potwierdź stan kondycji zaplecza usługi API Management.

    Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
    

Upewnij się, że stan kondycji każdej puli zaplecza ma wartość W dobrej kondycji. Jeśli musisz rozwiązać problemy z zapleczem w złej kondycji lub zapleczem z nieznanym stanem kondycji, zobacz Rozwiązywanie problemów z kondycją zaplecza w usłudze Application Gateway.

Tworzenie rekordów DNS w celu uzyskania dostępu do punktów końcowych usługi API Management z Internetu

Po utworzeniu bramy aplikacji skonfiguruj komunikację z usługą API Management z Internetu. Utwórz rekordy A-DNS mapujące każdą z nazw hostów punktu końcowego usługi API Management skonfigurowanych na statyczny publiczny adres IP bramy aplikacji. W tym artykule przykładowe nazwy hostów to api.contoso.net, portal.contoso.neti management.contoso.net.

weryfikacja Połączenie ivity

W celach szybkiego testowania rozważ tymczasowe zmianę pliku hostów komputera przy użyciu wpisów mapujących publiczny adres IP bramy aplikacji na nazwy hostów punktu końcowego usługi API Management:

  1. Zmodyfikuj pliki hostów. Jeśli na przykład publiczny adres IP bramy aplikacji to 172.203.129.101, wpis może mieć wartość 172.203.129.101 api.contoso.net.
  2. Wykonaj polecenie curl względem punktu końcowego stanu usługi API Management (ta sama ścieżka, która została użyta wcześniej dla sondy kondycji): curl -v https://api.contoso.net/status-0123456789abcdef powinno to zwrócić stan, który wskazuje pomyślną komunikację 200 Service Operational z usługą API Management za pośrednictwem usługi Application Gateway.

Zagadnienia dotyczące systemu DNS

Usługa Application Gateway ma teraz prywatne i publiczne ścieżki. Użycie tych samych domen i portów tworzy sytuację DNS z podziałem mózgu, w której należy ustawić zewnętrzny program rozpoznawania nazw DNS w celu rozpoznania api.contoso.net zewnętrznego adresu IP bramy aplikacji, podczas gdy wewnętrzny program rozpoznawania nazw DNS powinien rozpoznać tę samą domenę na wewnętrzny adres IP bramy aplikacji. Ta konfiguracja zapewnia zaletę, że aplikacje nie muszą zmieniać domeny ani portu dla wewnętrznych lub zewnętrznych elementów docelowych aplikacji i interfejsów API. Odpowiedzialność za określanie wartości docelowej jest odpowiednio odroczona do rozpoznawania nazw DNS.

Podsumowanie

Usługa API Management skonfigurowana w sieci wirtualnej udostępnia jeden interfejs bramy dla wszystkich skonfigurowanych interfejsów API, niezależnie od tego, czy są hostowane lokalnie, czy w chmurze. Integracja usługi Application Gateway z usługą API Management zapewnia elastyczność selektywnego włączania dostępu do określonych interfejsów API w Internecie. Integracja zapewnia również zaporę aplikacji internetowej jako fronton wystąpienia usługi API Management.

Następne kroki