Az API Management integrálása belső virtuális hálózatba az Application Gateway használatával

A KÖVETKEZŐKRE VONATKOZIK: Fejlesztő | Prémium

Az Azure API Managementet belső módban konfigurálhatja egy virtuális hálózaton, ami csak a virtuális hálózaton belül teszi elérhetővé. Azure-alkalmazás Gateway egy szolgáltatásként nyújtott platform (PaaS), amely 7. rétegbeli terheléselosztóként működik. Fordított proxy szolgáltatásként működik, és az Azure Web Application Firewall (WAF) ajánlatai között nyújt.

A belső virtuális hálózatban kiépített API Management és az előtérbeli Application Gateway kombinálásával a következőt teheti:

  • Ugyanazt az API Management-erőforrást használhatja a belső és a külső fogyasztók általi felhasználáshoz.
  • Egyetlen API Management-erőforrást használhat, és a külső fogyasztók számára elérhető API Management szolgáltatásban definiált API-k részhalmazával rendelkezhet.
  • Kulcsrakész megoldást biztosíthat az API Management nyilvános internetről való elérésének be- és kikapcsolásához.

Az architekturális útmutatásért lásd:

Feljegyzés

Ez a cikk az Application Gateway WAF_v2 termékváltozat használatára lett frissítve.

Előfeltételek

Feljegyzés

Javasoljuk, hogy az Azure Az PowerShell modult használja az Azure-ral való interakcióhoz. Az első lépésekhez tekintse meg az Azure PowerShell telepítését ismertető szakaszt. Az Az PowerShell-modulra történő migrálás részleteiről lásd: Az Azure PowerShell migrálása az AzureRM modulból az Az modulba.

A cikkben leírt lépések végrehajtásához a következőket kell tennie:

Eset

Ebből a cikkből megtudhatja, hogyan használhat egyetlen API Management-példányt belső és külső felhasználók számára, és hogyan használható egyetlen kezelőfelületként a helyszíni és a felhőbeli API-k számára is. Az újabb egybérlős 2-es (stv2) verziójú API Management-példányt hozza létre. Megtudhatja, hogyan használhat nyilvános és privát figyelőket az Application Gatewayben. Az Application Gatewayben elérhető útválasztási funkciókkal megtudhatja, hogyan teheti közzé csak az API-k egy részét külső felhasználás céljából. A példában az API-k zöld színnel vannak kiemelve.

Az első beállítási példában az összes API-t csak a virtuális hálózaton belül kezeli a rendszer. A belső felhasználók hozzáférhetnek az összes belső és külső API-hoz. A forgalom soha nem megy ki az internetre. A nagy teljesítményű kapcsolat azure ExpressRoute-kapcsolatcsoportokon keresztül is elérhető. A példában a belső fogyasztók narancssárga színnel vannak kiemelve.

Az URL-útvonalat ábrázoló diagram.

Mi szükséges az API Management és az Application Gateway integrálásához?

  • Háttérkiszolgáló-készlet: Ez a kiszolgálókészlet az API Management belső virtuális IP-címe.
  • Háttér-kiszolgálókészlet beállításai: Minden készlet rendelkezik beállításokkal, például a portra, protokollra vagy cookie-alapú affinitásra vonatkozóan. Ezek a beállítások a készletben található összes kiszolgálóra érvényesek.
  • Előtérbeli port: Ez a nyilvános port meg van nyitva az Application Gatewayen. Az erre a portra érkező forgalmat a rendszer átirányítja az egyik háttérkiszolgálóra.
  • Figyelő: A figyelő előtérporttal, protokollal (Http vagy Https, ezek az értékek megkülönböztetik a kis- és nagybetűket) és a Transport Layer Security (TLS) tanúsítványnévvel rendelkezik (ha a TLS-kiszervezést konfigurálja).
  • Szabály: A szabály egy figyelőt köt egy háttérkiszolgáló-készlethez.
  • Egyéni állapotadat-mintavétel: Az Application Gateway alapértelmezés szerint IP-címalapú mintavételekkel állapítja meg, hogy mely kiszolgálók BackendAddressPool aktívak. Az API Management csak a megfelelő gazdagépfejléccel rendelkező kérelmekre válaszol, ezért az alapértelmezett mintavételek sikertelenek. Definiáljon egy egyéni állapottesztet, amelynek segítségével az Application Gateway meghatározhatja, hogy a szolgáltatás működik-e, és továbbítania kell a kéréseket.
  • Egyéni tartománytanúsítványok: Ha az API Managementet az internetről szeretné elérni, hozzon létre dns-rekordokat a gazdagépneveinek az Application Gateway előtérbeli IP-címére való leképezéséhez. Ez a leképezés biztosítja, hogy a gazdagépfejléc és az API Managementnek elküldött tanúsítvány érvényes legyen. Ebben a példában három tanúsítványt használunk. Ezek az API Management átjárójához (a háttérrendszerhez), a fejlesztői portálhoz és a felügyeleti végponthoz tartoznak.

A fejlesztői portál és a felügyeleti végpont külső elérhetővé tétele az Application Gatewayen keresztül

Ebben a cikkben a fejlesztői portált és a felügyeleti végpontot is elérhetővé tesszük a külső közönség számára az Application Gatewayen keresztül. További lépésekre van szükség a figyelő, a mintavétel, a beállítások és a szabályok minden végponthoz való létrehozásához. Minden részletet a megfelelő lépésekben talál.

Ha Microsoft Entra-azonosítót vagy külső hitelesítést használ, engedélyezze a cookie-alapú munkamenet-affinitás funkciót az Application Gatewayben.

Figyelmeztetés

Ha meg szeretné akadályozni, hogy az Application Gateway WAF feltörje az OpenAPI-specifikációk letöltését a fejlesztői portálon, tiltsa le a tűzfalszabályt 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination".

Az Application Gateway WAF-szabályai, amelyek megszakíthatják a portál funkcióit, a következők:

  • 920300, , 920330931130, 942100, 942110942180, 942200, 942260, , 942340felügyeleti 942370 mód esetén
  • 942200, 942260, 942370, 942430942440 a közzétett portálhoz

Változók beállítása

Ebben az útmutatóban több változót kell definiálnia. Az elnevezés az felhőadaptálási keretrendszer rövidítési útmutatón alapul.

# 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

Erőforráscsoport létrehozása a Resource Managerhez

Erőforráscsoport létrehozása az Azure Resource Managerhez:

  1. Bejelentkezés az Azure-ba.

    Connect-AzAccount
    
  2. Hitelesítés a hitelesítő adatokkal.

  3. Válassza ki a kívánt előfizetést.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Hozzon létre egy erőforráscsoportot. Ezt a lépést kihagyhatja, ha meglévő erőforráscsoportot használ.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

A Resource Manager megköveteli, hogy minden erőforráscsoport adjon meg egy helyet. Ez a hely lesz az erőforráscsoport erőforrásainak alapértelmezett értéke. Győződjön meg arról, hogy az application gateway létrehozásához használt összes parancs ugyanazt az erőforráscsoportot használja.

Virtuális hálózat és alhálózat létrehozása az Application Gateway számára

Az alábbi példa bemutatja, hogyan hozhat létre virtuális hálózatot a Resource Manager használatával. Ebben a példában a virtuális hálózat az Application Gateway és az API Management különálló alhálózataiból áll.

  1. Állítsa be az Application Gateway IP-címeit.

    Feljegyzés

    Mivel lesznek nyilvános és privát figyelők, szükségünk van egy nyilvános és egy privát IP-címre. Létre kell hozni a statikus, nyilvános IP-címet, míg a privát IP-címet az application gatewayhez társított alhálózatból kell kiválasztani. A privát IP-cím tetszőlegesen lett kiválasztva.

    $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. Hozzon létre egy hálózati biztonsági csoportot (NSG) és NSG-szabályokat az Application Gateway alhálózatához.

    $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. Hozzon létre egy hálózati biztonsági csoportot (NSG) és NSG-szabályokat az API Management alhálózathoz. Az API Management stv2 több konkrét NSG-szabályt igényel.

    $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. Rendelje hozzá a 10.0.0.0/24 címtartományt az Application Gatewayhez használandó alhálózati változóhoz virtuális hálózat létrehozásakor.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. Rendelje hozzá a 10.0.1.0/24 címtartományt az API Managementhez használandó alhálózati változóhoz egy virtuális hálózat létrehozásakor.

    $apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
    
  6. Hozzon létre egy vnet-contoso nevű virtuális hálózatot. Használja a 10.0.0.0/16 előtagot a 10.0.0.0/24 és a 10.0.1.0/24 alhálózattal.

    $vnet = New-AzVirtualNetwork -Name "vnet-contoso" -ResourceGroupName $resGroupName `
      -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $appGatewaySubnet,$apimSubnet
    
  7. Alhálózati változók hozzárendelése a következő lépésekhez.

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

API Management-példány létrehozása virtuális hálózaton belül

Az alábbi példa bemutatja, hogyan hozhat létre API Management-példányt egy csak belső hozzáférésre konfigurált virtuális hálózaton.

  1. Az API Management stv2-hez egy egyedi DomainNameLabelnyilvános IP-cím szükséges.

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Hozzon létre egy API Management virtuális hálózati objektumot a létrehozott alhálózat $apimSubnetData használatával.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Hozzon létre egy API Management-példányt a virtuális hálózaton belül. Ez a példa a fejlesztői szolgáltatási szinten hozza létre a szolgáltatást. Cserélje le az API Management-példány egyedi nevét.

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

Ezen a szinten egy API Management-példány létrehozása és aktiválása 30–40 percet is igénybe vehet. Az előző parancs sikeres végrehajtása után tekintse meg a belső virtuális hálózati API Management szolgáltatás eléréséhez szükséges DNS-konfigurációt a hozzáférés megerősítéséhez.

Egyéni tartománynevek beállítása az API Managementben

Egyéni tartománynevek beállítása az API Managementben:

  1. Inicializálja a következő változókat a tartományok titkos kulcsaival és a megbízható főtanúsítvánnyal rendelkező tanúsítványok részleteivel. Ebben a példában az api.contoso.net, portal.contoso.netés management.contoso.neta .

    $certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force
    $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force
    $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -Force
    
  2. Hozza létre és állítsa be az Hostname API Management-végpontok konfigurációs objektumait.

    $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
    

Privát zóna konfigurálása DNS-feloldáshoz a virtuális hálózaton

Privát DNS-zóna konfigurálása DNS-feloldáshoz a virtuális hálózaton:

  1. Hozzon létre egy privát DNS-zónát, és kapcsolja össze a virtuális hálózatot.

    $myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName
    
    $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain `
      -ResourceGroupName $resGroupName -Name "mylink" `
      -VirtualNetworkId $vnet.id
    
  2. Hozzon létre A-rekordokat az egyéni tartomány gazdagépneveihez, amelyek az API Management magánhálózati IP-címére lesznek megfeleltetve.

    $apimIP = $apimService.PrivateIPAddresses[0]
    
    New-AzPrivateDnsRecordSet -Name api -RecordType A -ZoneName $domain `
      -ResourceGroupName $resGroupName -Ttl 3600 `
      -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
    
    New-AzPrivateDnsRecordSet -Name portal -RecordType A -ZoneName $domain `
      -ResourceGroupName $resGroupName -Ttl 3600 `
      -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
    
    New-AzPrivateDnsRecordSet -Name management -RecordType A -ZoneName $domain `
      -ResourceGroupName $resGroupName -Ttl 3600 `
      -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
    

Application Gateway-konfiguráció létrehozása

Az Application Gateway létrehozása előtt minden konfigurációelemet be kell állítani. Az alábbi lépések létrehozzák az Application Gateway-erőforráshoz szükséges konfigurációelemeket.

  1. Hozzon létre egy GatewayIP01 nevű Application Gateway IP-konfigurációt. Amikor az Application Gateway elindul, a konfigurált alhálózatból vesz fel egy IP-címet, és a hálózati forgalmat a háttérbeli IP-készlet IP-címeihez irányítja. Ne feledje, hogy minden példány egy IP-címet vesz fel.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
    
  2. Konfigurálja ugyanazt az előtérbeli portot a nyilvános és a privát IP-végponthoz. Ehhez a porthoz csatlakoznak a felhasználók. Ha ugyanazt a portot használja mindkét porthoz, biztosítjuk, hogy a belső és a külső kérések ugyanarra a portra legyenek küldve.

    $fp01 = New-AzApplicationGatewayFrontendPort -Name "port01"  -Port 443
    
  3. Konfiguráljon két előtérbeli IP-címet – egy nyilvános és egy privát ip-címet. A privát IP-cím az Application Gateway alhálózatából származik, amely a 0. indexnél először lett létrehozva.

    $fipconfig01 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP
    
    $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig `
      -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP `
      -Subnet $vnet.Subnets[0]
    
  4. Konfigurálja az Application Gateway tanúsítványait. Ezek segítségével visszafejtik és újra visszafejtik az áthaladó forgalmat.

    Feljegyzés

    Az Application Gateway támogatja az egyéni TLS-beállítások meghatározását, bizonyos TLS protokollverziók letiltását, valamint a titkosítási csomagok és a beállítások sorrendjének megadását. A konfigurálható TLS-beállításokról a TLS-szabályzat áttekintésében olvashat bővebben.

    $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. Hozza létre az Application Gateway HTTP-figyelőit. Rendelje hozzá az előtérbeli IP-konfigurációt, portot és TLS/SSL-tanúsítványokat.

    # 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. Egyéni mintavételek létrehozása az API Management-átjáró ContosoApi tartományi végpontja számára. Az elérési út /status-0123456789abcdef az API Management összes példányán üzemeltetett alapértelmezett állapotvégpont. Állítsa be api.contoso.net egyéni mintavételi állomásnévként a TLS/SSL-tanúsítvánnyal való biztonságossá tételéhez.

    Feljegyzés

    A gazdagépnév contosoapi.azure-api.net az alapértelmezett proxy gazdagépnév, amely akkor van konfigurálva, ha egy nevesített contosoapi szolgáltatás jön létre a nyilvános Azure-ban.

    $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. Konfigurálja a háttértanúsítványok megbízható főtanúsítványát. Ez a tanúsítvány ellenőrzi a háttértanúsítványok hitelességét.

    $trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate `
      -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
    
  8. Konfigurálja az Application Gateway HTTP-háttérrendszer-beállításait, beleértve a háttérkérelmek időtúllépési korlátját, amely után a rendszer megszakítja őket. Ez az érték eltér a mintavétel időtúllépésétől.

    $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. Konfiguráljon egy háttérBELI IP-címkészletet minden API Management-végponthoz a megfelelő tartománynév használatával.

    $apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" `
      -BackendFqdns $gatewayHostname
    
    $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" `
      -BackendFqdns $portalHostname
    
    $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" `
      -BackendFqdns $managementHostname
    
  10. Hozzon létre útválasztási szabályokat az application gateway számára az egyszerű útválasztás használatához.

    # 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
    

    Tipp.

    Módosítás -RuleType és útválasztás a fejlesztői portál egyes lapjaihoz való hozzáférés korlátozásához.

  11. Konfigurálja az Application Gatewayben a példányok számát és a méretet. Ebben a példában WAF_v2 termékváltozatot használunk az API Management-erőforrás nagyobb biztonsága érdekében.

    Használjon legalább két példányt (kapacitást) az éles számítási feladatokhoz. Előfordulhat, hogy csak egy példányt szeretne használni nem gyártási forgatókönyvekhez vagy általános kísérletezéshez. További információ: Azure-alkalmazás Átjáró díjszabása.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. Konfigurálja a WAF módot.

    Tipp.

    A beállítás és a tűzfalszabályok tesztelése során egy rövid ideig érdemes lehet konfigurálni az "Észlelés" módot, amely figyeli és naplózza a veszélyforrás-riasztásokat, de nem blokkolja a forgalmat. Ezután elvégezheti a tűzfalszabályok frissítését, mielőtt a "Megelőzés" módra vált, amely blokkolja a szabályok által észlelt behatolásokat és támadásokat.

    $config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
    
  13. Mivel jelenleg a TLS 1.0 az alapértelmezett, állítsa be az application gatewayt a legutóbbi TLS 1.2-szabályzat egyikének használatára.

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

Application Gateway létrehozása

  1. Hozzon létre egy Application Gatewayt az előző lépésekben szereplő összes konfigurációs objektummal. Egy példány létrehozása 15 percet is igénybe vehet.

    $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. Ellenőrizze az API Management háttérrendszer állapotának állapotát.

    Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
    

Győződjön meg arról, hogy az egyes háttérkészletek állapota kifogástalan. Ha nem kifogástalan háttérrendszert vagy ismeretlen állapotú háttérrendszert kell elhárítania, olvassa el az Application Gateway háttérállapot-problémáinak hibaelhárításával foglalkozó témakört.

DNS-rekordok létrehozása az API Management-végpontok internetről való eléréséhez

Az Application Gateway létrehozása után konfigurálja a kommunikációt az API Managementtel az internetről. Olyan DNS A-rekordokat hozhat létre, amelyek megfeleltetik az Application Gateway statikus nyilvános IP-címére konfigurált API Management-végpontok állomásneveit. Ebben a cikkben a gazdagépek nevei a következőkapi.contoso.net: és portal.contoso.netmanagement.contoso.net.

Csatlakozás tivitás ellenőrzése

Gyors tesztelés céljából fontolja meg ideiglenesen a számítógép gazdagépfájljának módosítását olyan bejegyzésekkel, amelyek az Application Gateway nyilvános IP-címét az API Management végpont gazdagépneveihez rendelik:

  1. Módosítsa a gazdagépfájlokat. Ha például az Application Gateway nyilvános IP-címe, 172.203.129.101a bejegyzés lehet 172.203.129.101 api.contoso.net.
  2. Végezzen curl-parancsot az API Management állapotvégpontján (ugyanazzal az elérési úttal, amelyet korábban az állapotadat-mintavételhez használt): curl -v https://api.contoso.net/status-0123456789abcdef Ennek egy 200 Service Operational állapotot kell visszaadnia, amely az API Managementtel az Application Gatewayen keresztüli sikeres kommunikációt jelzi.

DNS-szempontok

Az Application Gateway mostantól privát és nyilvános útvonalakat is használ. Ugyanezek a tartományok és portok használata felosztásos DNS-helyzetet hoz létre, amelyben egy külső DNS-feloldót úgy kell beállítani, hogy az az application gateway külső IP-címére legyen feloldva api.contoso.net , míg egy belső DNS-feloldónak ugyanazt a tartományt kell feloldani az Application Gateway belső IP-címére. Ez a beállítás előnye, hogy az alkalmazásoknak nem kell tartományt vagy portot módosítaniuk az alkalmazások és API-k belső vagy külső célzásához. A célzás felelőssége megfelelően halasztható a DNS-feloldókra.

Összegzés

A virtuális hálózaton konfigurált API Management egyetlen átjárófelületet biztosít az összes konfigurált API-hoz, függetlenül attól, hogy azok a helyszínen vagy a felhőben vannak-e üzemeltetve. Az Application Gateway és az API Management integrálása lehetővé teszi, hogy az egyes API-k szelektíven elérhetők legyenek az interneten. Az integráció egy WAF-ot is biztosít az API Management-példány előtérként.

Következő lépések