Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
VAN TOEPASSING OP: Ontwikkelaar | Premie
U kunt Azure API Management configureren in een virtueel netwerk in de interne modus, waardoor het alleen toegankelijk is binnen het virtuele netwerk. Azure Application Gateway is een dienst die als Platform as a Service (PaaS) fungeert en optreedt als een laag-7 load balancer. Het fungeert als een omgekeerde proxyservice en biedt onder andere Azure Web Application Firewall (WAF).
Door API Management dat in een intern virtueel netwerk is ingericht te combineren met de Application Gateway-front-end, kunt u het volgende doen:
- Gebruik dezelfde API Management-resource voor gebruik door zowel interne als externe consumenten.
- Gebruik één API Management-resource en laat een subset van API's die in API Management zijn gedefinieerd beschikbaar voor externe consumenten.
- Bied een kant-en-klare manier om toegang tot API Management van het openbare internet in of uit te schakelen.
Zie voor architectuurrichtlijnen:
- Eenvoudige bedrijfsintegratie: Referentiearchitectuur
- Api Management-landingszoneversneller: Referentiearchitectuur en ontwerprichtlijnen
Notitie
Dit artikel is bijgewerkt voor het gebruik van de Application Gateway WAF_v2 SKU.
Vereisten
Notitie
Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.
Als u de stappen wilt volgen die in dit artikel worden beschreven, moet u het volgende hebben:
Een actief Azure-abonnement
Als u geen Azure-account hebt, maak dan een gratis account aan voordat u begint.
Certificaten
- PFX-bestanden (Personal Information Exchange) voor aangepaste hostnamen van API Management: gateway, ontwikkelaarsportal en beheereindpunt.
- Een certificaatbestand (CER) voor het basiscertificaat van de PFX-certificaten.
Zie Certificaten voor de back-end voor meer informatie. Voor testdoeleinden kunt u desgewenst zelfondertekende certificaten genereren.
De nieuwste versie van Azure PowerShell
Scenariobeschrijving
In dit artikel leert u hoe u één API Management-exemplaar gebruikt voor interne en externe consumenten en deze als één front-end voor zowel on-premises als cloud-API's kunt fungeren. U maakt een API Management-exemplaar en implementeert dit in een virtueel Azure-netwerk. U leert hoe u openbare en persoonlijke listeners gebruikt in Application Gateway. U begrijpt hoe u alleen een subset van uw API's beschikbaar maakt voor extern verbruik met behulp van routeringsfunctionaliteit die beschikbaar is in Application Gateway. In het voorbeeld zijn de API's groen gemarkeerd.
In het eerste installatievoorbeeld worden alle API's alleen beheerd vanuit uw virtuele netwerk. Interne consumenten hebben toegang tot al uw interne en externe API's. Verkeer gaat nooit naar internet. Connectiviteit met hoge prestaties kan worden geleverd via Azure ExpressRoute-circuits. In het voorbeeld worden de interne consumenten oranje gemarkeerd.
Wat is vereist voor het integreren van API Management en Application Gateway?
- Back-endservergroep: deze servergroep is het interne virtuele IP-adres van API Management.
- Back-end serverpool instellingen: Elke pool heeft instellingen zoals poort-, protocol- en op cookies gebaseerde affiniteit. Deze instellingen worden toegepast op alle servers in de pool.
- Front-endpoort: deze openbare poort wordt geopend op de toepassingsgateway. Verkeer dat via deze poort binnenkomt, wordt vervolgens omgeleid naar een van de back-endservers.
- Listener: De listener heeft een front-endpoort, een protocol (HTTP of HTTPS, deze waarden zijn hoofdlettergevoelig) en de TLS-certificaatnaam (Transport Layer Security) (als u TLS-offload configureert).
- Regel: de regel verbindt een listener met een back-endservergroep.
-
Aangepaste statustest: Application Gateway gebruikt standaard tests op basis van IP-adressen om erachter te komen welke servers
BackendAddressPool
actief zijn. API Management reageert alleen op aanvragen met de juiste hostheader, zodat de standaardtests mislukken. U definieert een aangepaste statustest om de toepassingsgateway te helpen bepalen of de service actief is en aanvragen moet doorsturen. - Aangepaste domeincertificaten: voor toegang tot API Management via internet maakt u DNS-records (Domain Name System) om de hostnamen toe te wijzen aan het front-end-IP-adres van Application Gateway. Deze toewijzing zorgt ervoor dat de host-header en het certificaat dat naar API Management worden verzonden, geldig zijn. In dit voorbeeld gebruiken we drie certificaten. Ze zijn voor de gateway van API Management (de back-end), de ontwikkelaarsportal en het beheereindpunt.
De ontwikkelaarsportal en het beheereindpunt extern beschikbaar maken via Application Gateway
In dit artikel maken we ook de ontwikkelaarsportal en het beheereindpunt beschikbaar voor externe doelgroepen via de toepassingsgateway. Er zijn extra stappen nodig voor het maken van een listener, test, instellingen en regels voor elk eindpunt. Alle details worden gegeven in hun respectieve stappen. Als u het v2-configuratie-eindpunt van de zelf-hostende gateway beschikbaar wilt maken, volgt u vergelijkbare stappen (niet weergegeven).
Als u Microsoft Entra ID of verificatie van derden gebruikt, schakelt u de functie sessieaffiniteit op basis van cookies in Application Gateway in.
Waarschuwing
Als u wilt voorkomen dat Application Gateway WAF het downloaden van OpenAPI-specificaties in de ontwikkelaarsportal onderbreekt, schakelt u de firewallregel 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"
uit.
Waf-regels voor Application Gateway die de functionaliteit van de portal kunnen verbreken, zijn onder andere:
-
920300
, ,920330
931130
,942100
, ,942110
,942180
,942200
,942260
942340
942370
voor de beheermodus -
942200
,942260
,942370
,942430
,942440
voor de gepubliceerde portal
Variabelen instellen
In deze handleiding moet u verschillende variabelen definiëren. Naamgeving is gebaseerd op de richtlijnen voor afkortingen van Cloud Adoption Framework.
# These variables must be changed.
$subscriptionId = "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e" # GUID of your Azure subscription
$domain = "contoso.net" # The custom domain for your certificate
$apimServiceName = "apim-contoso" # API Management service instance name, must be globally unique
$apimDomainNameLabel = $apimServiceName # Domain name label for API Management's public IP address, must be globally unique
$apimAdminEmail = "admin@contoso.net" # Administrator's email address - use your email address
$gatewayHostname = "api.$domain" # API gateway host
$portalHostname = "portal.$domain" # API developer portal host
$managementHostname = "management.$domain" # API management endpoint host
$baseCertPath = "C:\Users\Contoso\" # The base path where all certificates are stored
$trustedRootCertCerPath = "${baseCertPath}trustedroot.cer" # Full path to contoso.net trusted root .cer file
$gatewayCertPfxPath = "${baseCertPath}gateway.pfx" # Full path to api.contoso.net .pfx file
$portalCertPfxPath = "${baseCertPath}portal.pfx" # Full path to portal.contoso.net .pfx file
$managementCertPfxPath = "${baseCertPath}management.pfx" # Full path to management.contoso.net .pfx file
$gatewayCertPfxPassword = "certificatePassword123" # Password for api.contoso.net pfx certificate
$portalCertPfxPassword = "certificatePassword123" # Password for portal.contoso.net pfx certificate
$managementCertPfxPassword = "certificatePassword123" # Password for management.contoso.net pfx certificate
# These variables may be changed.
$resGroupName = "rg-apim-agw" # Resource group name that will hold all assets
$location = "West US" # Azure region that will hold all assets
$apimOrganization = "Contoso" # Organization name
$appgwName = "agw-contoso" # The name of the Application Gateway
Een resourcegroep maken voor Resource Manager
Een resourcegroep maken voor Azure Resource Manager:
Meld u aan bij Azure.
Connect-AzAccount
Verifieer met uw referenties.
Selecteer het gewenste abonnement.
Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
Maak een resourcegroep. U kunt deze stap overslaan als u een bestaande resourcegroep gebruikt.
New-AzResourceGroup -Name $resGroupName -Location $location
Resource Manager vereist dat alle resourcegroepen een locatie opgeven. Deze locatie wordt gebruikt als de standaardlocatie voor resources in die resourcegroep. Zorg ervoor dat alle opdrachten voor het maken van een toepassingsgateway dezelfde resourcegroep gebruiken.
Een virtueel netwerk en een subnet maken voor de toepassingsgateway
In het volgende voorbeeld ziet u hoe u een virtueel netwerk maakt met Resource Manager. Het virtuele netwerk in dit voorbeeld bestaat uit afzonderlijke subnetten voor Application Gateway en API Management.
Stel de IP-adressen van application gateway in.
Notitie
Omdat er openbare en persoonlijke listeners zijn, hebben we een openbaar en een privé-IP-adres nodig. Het statische, openbare IP-adres moet worden gemaakt, terwijl het privé-IP-adres moet worden geselecteerd in het subnet dat is gekoppeld aan de toepassingsgateway. Het privé-IP-adres is willekeurig geselecteerd.
$appGatewayExternalIP = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-ag" -location $location -AllocationMethod Static -Sku Standard -Force $appGatewayInternalIP = "10.0.0.100" [String[]]$appGwNsgDestIPs = $appGatewayInternalIP, $appGatewayExternalIP.IpAddress
Maak een netwerkbeveiligingsgroep (NSG) en NSG-regels voor het Application Gateway-subnet.
$appGwRule1 = New-AzNetworkSecurityRuleConfig -Name appgw-in -Description "AppGw inbound" ` -Access Allow -Protocol * -Direction Inbound -Priority 100 -SourceAddressPrefix ` GatewayManager -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 65200-65535 $appGwRule2 = New-AzNetworkSecurityRuleConfig -Name appgw-in-internet -Description "AppGw inbound Internet" ` -Access Allow -Protocol "TCP" -Direction Inbound -Priority 110 -SourceAddressPrefix ` Internet -SourcePortRange * -DestinationAddressPrefix $appGwNsgDestIPs -DestinationPortRange 443 $appGwNsg = New-AzNetworkSecurityGroup -ResourceGroupName $resGroupName -Location $location -Name ` "nsg-agw" -SecurityRules $appGwRule1, $appGwRule2
Maak een netwerkbeveiligingsgroep (NSG) en NSG-regels voor het API Management-subnet. API Management vereist verschillende specifieke NSG-regels.
$apimRule1 = New-AzNetworkSecurityRuleConfig -Name APIM-Management -Description "APIM inbound" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix ApiManagement ` -SourcePortRange * -DestinationAddressPrefix VirtualNetwork -DestinationPortRange 3443 $apimRule2 = New-AzNetworkSecurityRuleConfig -Name AllowAppGatewayToAPIM -Description "Allows inbound App Gateway traffic to APIM" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 110 -SourceAddressPrefix "10.0.0.0/24" ` -SourcePortRange * -DestinationAddressPrefix "10.0.1.0/24" -DestinationPortRange 443 $apimRule3 = New-AzNetworkSecurityRuleConfig -Name AllowAzureLoadBalancer -Description "Allows inbound Azure Infrastructure Load Balancer traffic to APIM" ` -Access Allow -Protocol Tcp -Direction Inbound -Priority 120 -SourceAddressPrefix AzureLoadBalancer ` -SourcePortRange * -DestinationAddressPrefix "10.0.1.0/24" -DestinationPortRange 6390 $apimRule4 = New-AzNetworkSecurityRuleConfig -Name AllowKeyVault -Description "Allows outbound traffic to Azure Key Vault" ` -Access Allow -Protocol Tcp -Direction Outbound -Priority 100 -SourceAddressPrefix "10.0.1.0/24" ` -SourcePortRange * -DestinationAddressPrefix AzureKeyVault -DestinationPortRange 443 $apimNsg = New-AzNetworkSecurityGroup -ResourceGroupName $resGroupName -Location $location -Name ` "nsg-apim" -SecurityRules $apimRule1, $apimRule2, $apimRule3, $apimRule4
Wijs het adresbereik 10.0.0.0/24 toe aan de subnetvariabele die moet worden gebruikt voor Application Gateway terwijl u een virtueel netwerk maakt.
$appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
Wijs het adresbereik 10.0.1.0/24 toe aan de subnetvariabele die moet worden gebruikt voor API Management terwijl u een virtueel netwerk maakt.
$apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"
Maak een virtueel netwerk met de naam vnet-contoso. Gebruik het voorvoegsel 10.0.0.0/16 met subnetten 10.0.0.0/24 en 10.0.1.0/24.
$vnet = New-AzVirtualNetwork -Name "vnet-contoso" -ResourceGroupName $resGroupName ` -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $appGatewaySubnet,$apimSubnet
Wijs subnetvariabelen toe voor de volgende stappen.
$appGatewaySubnetData = $vnet.Subnets[0] $apimSubnetData = $vnet.Subnets[1]
Een API Management-exemplaar maken in een virtueel netwerk
In het volgende voorbeeld ziet u hoe u een API Management-exemplaar maakt in een virtueel netwerk dat alleen is geconfigureerd voor interne toegang.
API Management vereist een openbaar IP-adres met een uniek
DomainNameLabel
.$apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location ` -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
Maak een virtueel API Management-netwerkobject met behulp van het subnet
$apimSubnetData
dat u hebt gemaakt.$apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
Maak een API Management-exemplaar in het virtuele netwerk. In dit voorbeeld wordt de service gemaakt in het service niveau Developer. Vervang een unieke naam voor uw API Management-exemplaar.
$apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName -Organization $apimOrganization ` -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType "Internal" -Sku "Developer" -PublicIpAddressId $apimPublicIpAddressId.Id
Het kan 30 tot 40 minuten duren voordat een API Management-exemplaar in deze laag is gemaakt en geactiveerd. Nadat de vorige opdracht is geslaagd, kijkt u bij de DNS-configuratie die nodig is voor toegang tot de interne virtuele netwerk-API Management-service om toegang te bevestigen.
Aangepaste domeinnamen instellen in API Management
Aangepaste domeinnamen instellen in API Management:
Initialiseer de volgende variabelen met de details van de certificaten met persoonlijke sleutels voor de domeinen en het vertrouwde basiscertificaat. In dit voorbeeld gebruiken
api.contoso.net
we ,portal.contoso.net
enmanagement.contoso.net
.$certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -Force
Maak en stel de
Hostname
configuratieobjecten voor de API Management-eindpunten in.$gatewayHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $gatewayHostname ` -HostnameType Proxy -PfxPath $gatewayCertPfxPath -PfxPassword $certGatewayPwd $portalHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $portalHostname ` -HostnameType DeveloperPortal -PfxPath $portalCertPfxPath -PfxPassword $certPortalPwd $managementHostnameConfig = New-AzApiManagementCustomHostnameConfiguration -Hostname $managementHostname ` -HostnameType Management -PfxPath $managementCertPfxPath -PfxPassword $certManagementPwd $apimService.ProxyCustomHostnameConfiguration = $gatewayHostnameConfig $apimService.PortalCustomHostnameConfiguration = $portalHostnameConfig $apimService.ManagementCustomHostnameConfiguration = $managementHostnameConfig Set-AzApiManagement -InputObject $apimService
Een privézone configureren voor DNS-omzetting in het virtuele netwerk
Een privé-DNS-zone configureren voor DNS-omzetting in het virtuele netwerk:
Maak een privé-DNS-zone en koppel het virtuele netwerk.
$myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain ` -ResourceGroupName $resGroupName -Name "mylink" ` -VirtualNetworkId $vnet.id
Maak A-records voor de aangepaste domeinnamen die zijn toegewezen aan het privé-IP-adres van API Management.
$apimIP = $apimService.PrivateIPAddresses[0] New-AzPrivateDnsRecordSet -Name api -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP) New-AzPrivateDnsRecordSet -Name portal -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP) New-AzPrivateDnsRecordSet -Name management -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
Configuratie van toepassingsgateway maken
Alle configuratie-items moeten worden ingesteld voordat u de toepassingsgateway maakt. Met de volgende stappen maakt u de configuratie-items die nodig zijn voor een Application Gateway-resource.
Maak een APPLICATION Gateway IP-configuratie met de naam gatewayIP01. Wanneer de toepassingsgateway wordt geopend, wordt er een IP-adres opgehaald via het geconfigureerde subnet en wordt het netwerkverkeer omgeleid naar de IP-adressen in de groep met back-end-IP's. Onthoud dat elk exemplaar één IP-adres gebruikt.
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
Configureer dezelfde front-endpoort voor het openbare en privé-IP-eindpunt. Deze poort is de poort waarmee gebruikers verbinding maken. Door dezelfde poort te gebruiken voor beide zorgen we ervoor dat interne en externe aanvragen naar dezelfde poort kunnen worden gedaan.
$fp01 = New-AzApplicationGatewayFrontendPort -Name "port01" -Port 443
Configureer twee front-end-IP-adressen: één openbaar en één privé. Het privé-IP-adres wordt genomen uit het subnet van de toepassingsgateway, dat als eerste bij index 0 werd gemaakt.
$fipconfig01 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP ` -Subnet $vnet.Subnets[0]
Configureer de certificaten voor de toepassingsgateway. Ze worden gebruikt om het verkeer dat wordt doorgegeven, te ontsleutelen en opnieuw te ontsleutelen.
Notitie
Application Gateway ondersteunt het definiëren van aangepaste TLS-opties, het uitschakelen van bepaalde TLS-protocolversies en het opgeven van coderingssuites en de volgorde van voorkeur. Zie het overzicht van TLS-beleid voor meer informatie over configureerbare TLS-opties.
$certGateway = New-AzApplicationGatewaySslCertificate -Name "gatewaycert" ` -CertificateFile $gatewayCertPfxPath -Password $certGatewayPwd $certPortal = New-AzApplicationGatewaySslCertificate -Name "portalcert" ` -CertificateFile $portalCertPfxPath -Password $certPortalPwd $certManagement = New-AzApplicationGatewaySslCertificate -Name "managementcert" ` -CertificateFile $managementCertPfxPath -Password $certManagementPwd
Maak de HTTP-listeners voor de toepassingsgateway. Wijs de front-end-IP-configuratie, poort en TLS/SSL-certificaten eraan toe.
# Public/external listeners $gatewayListener = New-AzApplicationGatewayHttpListener -Name "gatewaylistener" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 ` -SslCertificate $certGateway -HostName $gatewayHostname -RequireServerNameIndication true $portalListener = New-AzApplicationGatewayHttpListener -Name "portallistener" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 ` -SslCertificate $certPortal -HostName $portalHostname -RequireServerNameIndication true $managementListener = New-AzApplicationGatewayHttpListener -Name "managementlistener" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig01 -FrontendPort $fp01 ` -SslCertificate $certManagement -HostName $managementHostname -RequireServerNameIndication true # Private/internal listeners $gatewayListenerPrivate = New-AzApplicationGatewayHttpListener -Name "gatewaylistener-private" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 ` -SslCertificate $certGateway -HostName $gatewayHostname -RequireServerNameIndication true $portalListenerPrivate = New-AzApplicationGatewayHttpListener -Name "portallistener-private" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 ` -SslCertificate $certPortal -HostName $portalHostname -RequireServerNameIndication true $managementListenerPrivate = New-AzApplicationGatewayHttpListener -Name "managementlistener-private" ` -Protocol "Https" -FrontendIPConfiguration $fipconfig02 -FrontendPort $fp01 ` -SslCertificate $certManagement -HostName $managementHostname -RequireServerNameIndication true
Maak aangepaste tests voor het eindpunt van het API Management-gatewaydomein
ContosoApi
. Het pad/status-0123456789abcdef
is een standaardstatuseindpunt dat wordt gehost op alle exemplaren van API Management. Stelapi.contoso.net
deze in als een aangepaste hostnaam voor de test om deze te beveiligen met het TLS/SSL-certificaat.Notitie
De hostnaam
contosoapi.azure-api.net
is de standaard proxy-hostnaam die is geconfigureerd wanneer een service met de naamcontosoapi
wordt gemaakt in Public 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
Configureer het vertrouwde basiscertificaat van de back-endcertificaten. Dit certificaat controleert de echtheid van de back-endcertificaten.
$trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate ` -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
Stel de backend-instellingen voor de toepassingsgateway in, inclusief een time-out limiet voor backend-aanvragen, waarna deze worden geannuleerd. Deze waarde verschilt van de time-out van de test.
$apimPoolGatewaySetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolGatewaySetting" ` -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimGatewayProbe ` -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180 $apimPoolPortalSetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolPortalSetting" ` -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimPortalProbe ` -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180 $apimPoolManagementSetting = New-AzApplicationGatewayBackendHttpSettings -Name "apimPoolManagementSetting" ` -Port 443 -Protocol "Https" -CookieBasedAffinity "Disabled" -Probe $apimManagementProbe ` -TrustedRootCertificate $trustedRootCert -PickHostNameFromBackendAddress -RequestTimeout 180
Configureer een back-end-IP-adresgroep voor elk API Management-eindpunt met behulp van de bijbehorende domeinnaam.
$apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" ` -BackendFqdns $gatewayHostname $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" ` -BackendFqdns $portalHostname $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" ` -BackendFqdns $managementHostname
Maak routeringsregels voor de toepassingsgateway om basisroutering te gebruiken.
# Public/external gateway rules $gatewayRule = New-AzApplicationGatewayRequestRoutingRule -Name "gatewayrule" ` -RuleType Basic -HttpListener $gatewayListener -BackendAddressPool $apimGatewayBackendPool ` -BackendHttpSettings $apimPoolGatewaySetting -Priority 10 $portalRule = New-AzApplicationGatewayRequestRoutingRule -Name "portalrule" ` -RuleType Basic -HttpListener $portalListener -BackendAddressPool $apimPortalBackendPool ` -BackendHttpSettings $apimPoolPortalSetting -Priority 20 $managementRule = New-AzApplicationGatewayRequestRoutingRule -Name "managementrule" ` -RuleType Basic -HttpListener $managementListener -BackendAddressPool $apimManagementBackendPool ` -BackendHttpSettings $apimPoolManagementSetting -Priority 30 # Private/internal gateway rules $gatewayRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "gatewayrule-private" ` -RuleType Basic -HttpListener $gatewayListenerPrivate -BackendAddressPool $apimGatewayBackendPool ` -BackendHttpSettings $apimPoolGatewaySetting -Priority 11 $portalRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "portalrule-private" ` -RuleType Basic -HttpListener $portalListenerPrivate -BackendAddressPool $apimPortalBackendPool ` -BackendHttpSettings $apimPoolPortalSetting -Priority 21 $managementRulePrivate = New-AzApplicationGatewayRequestRoutingRule -Name "managementrule-private" ` -RuleType Basic -HttpListener $managementListenerPrivate -BackendAddressPool $apimManagementBackendPool ` -BackendHttpSettings $apimPoolManagementSetting -Priority 31
Aanbeveling
Wijzig
-RuleType
en routering om de toegang tot bepaalde pagina's van de ontwikkelaarsportal te beperken.Configureer het aantal exemplaren en de grootte voor de toepassingsgateway. In dit voorbeeld gebruiken we WAF_v2 SKU voor een betere beveiliging van de API Management-resource.
Gebruik minimaal twee instanties (capaciteit) voor productie-workloads. Mogelijk wilt u slechts één exemplaar gebruiken voor niet-productiescenario's of voor algemene experimenten. Zie Azure-toepassing Gateway-prijzen voor meer informatie.
$sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
Configureer de WAF-modus.
Aanbeveling
Gedurende een korte periode tijdens de installatie en om uw firewallregels te testen, kunt u de detectiemodus configureren, die bedreigingswaarschuwingen bewaakt en registreert, maar verkeer niet blokkeert. Vervolgens kunt u eventuele updates aan firewallregels aanbrengen voordat u overgaat naar de modus Preventie, waardoor inbraak en aanvallen die door de regels worden gedetecteerd, worden geblokkeerd.
$config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"
Omdat TLS 1.0 momenteel de standaardwaarde is, stelt u de toepassingsgateway in op een van de recente TLS 1.2-beleidsregels.
$policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
Een toepassingsgateway maken
Maak een toepassingsgateway met alle configuratieobjecten uit de voorgaande stappen. Het kan 15 minuten duren voordat een exemplaar is gemaakt.
$appgw = New-AzApplicationGateway ` -Name $appgwName ` -ResourceGroupName $resGroupName ` -Location $location ` -Sku $sku ` -SslPolicy $policy ` -SslCertificates $certGateway, $certPortal, $certManagement ` -TrustedRootCertificate $trustedRootCert ` -BackendAddressPools $apimGatewayBackendPool, $apimPortalBackendPool, $apimManagementBackendPool ` -BackendHttpSettingsCollection $apimPoolGatewaySetting, $apimPoolPortalSetting, $apimPoolManagementSetting ` -GatewayIpConfigurations $gipconfig ` -FrontendIpConfigurations $fipconfig01, $fipconfig02 ` -FrontendPorts $fp01 ` -HttpListeners $gatewayListener, $portalListener, $managementListener, $gatewayListenerPrivate, $portalListenerPrivate, $managementListenerPrivate ` -RequestRoutingRules $gatewayRule, $portalRule, $managementRule, $gatewayRulePrivate, $portalRulePrivate, $managementRulePrivate ` -Probes $apimGatewayProbe, $apimPortalProbe, $apimManagementProbe ` -WebApplicationFirewallConfig $config
Controleer de gezondheidsstatus van de back-ends van API-beheer.
Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
Zorg ervoor dat de status van elke back-endpool gezond is. Als u een beschadigde back-end of een back-end met een onbekende status moet oplossen, raadpleegt u Probleemoplossing voor back-endstatus in Application Gateway.
DNS-records maken voor toegang tot API Management-eindpunten via internet
Nadat de toepassingsgateway is gemaakt, configureert u communicatie met API Management vanaf internet. Maak DNS A-records die de door u geconfigureerde hostnamen van de API Management-eindpunten toewijzen aan het statische openbare IP-adres van de toepassingsgateway. In dit artikel zijn voorbeeld hostnamen api.contoso.net
, portal.contoso.net
, en management.contoso.net
.
Connectiviteitsverificatie
Voor snelle testdoeleinden kunt u het hostsbestand van uw computer tijdelijk wijzigen met vermeldingen die het openbare IP-adres van de toepassingsgateway toewijzen aan de hostnamen van het API Management-eindpunt:
- Wijzig de hosts-bestanden. Als het openbare IP-adres van de toepassingsgateway bijvoorbeeld is
172.203.129.101
, kan de vermelding zijn172.203.129.101 api.contoso.net
. - Voer een curl-opdracht uit op het statuseindpunt van API Management (hetzelfde pad dat eerder is gebruikt voor de statustest):
curl -v https://api.contoso.net/status-0123456789abcdef
Hiermee wordt een200 Service Operational
status geretourneerd die aangeeft dat de communicatie met API Management via Application Gateway is geslaagd.
DNS-overwegingen
De Application Gateway heeft nu privé- en openbare paden. Als u dezelfde domeinen en poorten gebruikt, ontstaat er een split-brain DNS-situatie waarin een externe DNS-resolver moet worden ingesteld om api.contoso.net
te verwijzen naar het externe IP-adres van de toepassingsgateway, maar een interne DNS-resolver moet hetzelfde domein verwijzen naar het interne IP-adres van de toepassingsgateway. Deze installatie biedt een voordeel dat toepassingen geen domein of poort hoeven te wijzigen voor interne of externe targeting van toepassingen en API's. De verantwoordelijkheid voor doelgerichtheid wordt terecht toevertrouwd aan de DNS-resolvers.
Samenvatting
API Management geconfigureerd in een virtueel netwerk biedt één gatewayinterface voor alle geconfigureerde API's, ongeacht of deze on-premises of in de cloud worden gehost. De integratie van Application Gateway met API Management biedt u de flexibiliteit om bepaalde API's selectief toegankelijk te maken op internet. Integratie biedt ook een WAF als front-end aan uw API Management-exemplaar.
Verwante inhoud
Instellen met behulp van een Azure Resource Manager-sjabloon
Meer informatie over Application Gateway:
Meer informatie over API Management en virtuele netwerken: