Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
SI APPLICA A: Sviluppatore | Premium
È possibile configurare il servizio Gestione API di Azure in una rete virtuale in modalità interna, per renderlo accessibile solo nella rete virtuale. Gateway applicazione Azure è una piattaforma distribuita come servizio (PaaS) che funziona come servizio di bilanciamento del carico di livello 7. Funge da servizio proxy inverso e fornisce tra le sue offerte Web application firewall di Azure (WAF).
Combinando API Management distribuito in una rete virtuale interna con Application Gateway come front-end, è possibile:
- Uso della stessa risorsa di Gestione API sia da parte degli utenti interni che di quelli esterni.
- Uso di una singola risorsa di Gestione API e disponibilità di un sottoinsieme di API definite in Gestione API per gli utenti esterni.
- Fornire un modo veloce per attivare e disattivare l'accesso a Gestione API dalla rete Internet pubblica.
Per le linee guida per l'architettura vedere:
- Integrazione aziendale semplice: architettura di riferimento
- Acceleratore per landing zone di API Management: Architettura di riferimento e linee guida di progettazione
Nota
Questo articolo è stato aggiornato per usare il Application Gateway WAF_v2 SKU.
Prerequisiti
Nota
È consigliabile usare il modulo Azure Az PowerShell per interagire con Azure. Per iniziare, vedere Installare Azure PowerShell. Per informazioni su come eseguire la migrazione al modulo AZ PowerShell, vedere Eseguire la migrazione di Azure PowerShell da AzureRM ad Az.
Per eseguire i passaggi descritti in questo articolo, è necessario quanto segue:
Una sottoscrizione di Azure attiva
Se non si ha un account Azure, creare un account gratuito prima di iniziare.
Certificati
- File PFX (Personal Information Exchange) per i nomi host personalizzati di Gestione API: gateway, portale per sviluppatori ed endpoint di gestione.
- Un file di certificato (CER) per il certificato radice dei certificati PFX.
Per altre informazioni, vedi Certificati per il back-end. A scopo di test, generare facoltativamente certificati autofirmati.
La versione più recente di Azure PowerShell
Sceneggiatura
Questo articolo illustra come usare una singola istanza di Gestione API per i consumer sia interni che esterni e fare in modo che funga da singolo front-end per le API sia locali che su cloud. Si crea un'istanza di Gestione API e la si distribuisce in una rete virtuale di Azure. Si imparerà come utilizzare listener pubblici e privati in Application Gateway. Hai capito come esporre solo un sottoinsieme delle tue API per l'uso esterno utilizzando la funzionalità di routing disponibile in Application Gateway. Nell'esempio le API sono evidenziate in verde.
Nel primo esempio di configurazione, tutte le API sono gestite solo dall'interno della rete virtuale. I consumer interni possono accedere a tutte le API interne ed esterne. Il traffico non esce mai da Internet. La connettività ad alte prestazioni può essere distribuita tramite circuiti Azure ExpressRoute. Nell'esempio, i consumatori interni sono evidenziati in arancione.
Che cosa serve per integrare API Management e Application Gateway?
- Pool di server back-end: costituisce l'indirizzo IP virtuale interno di Gestione API.
- Impostazioni del pool di server back-end: ogni pool ha impostazioni come porta, protocollo e affinità basata sui cookie. Queste impostazioni vengono applicate a tutti i server nel pool.
- Porta front-end: questa porta pubblica è aperta sul gateway applicativo. Il traffico che raggiunge questa porta viene reindirizzato a uno dei server back-end.
- Listener: il listener ha una porta front-end, un protocollo (HTTP o HTTPS, questi valori fanno distinzione tra maiuscole e minuscole) e il nome del certificato Transport Layer Security (TLS) (se si configura l'offload TLS).
- Regola: associa un listener a un pool di server back-end.
-
Sonda di integrità personalizzata: per impostazione predefinita, Application Gateway usa sonde basate su indirizzi IP per determinare quali server in
BackendAddressPoolsono attivi. Gestione API risponde solo alle richieste con l'intestazione Host corretta, quindi le sonde predefinite non funzionano. Definisci un probe di integrità personalizzato per aiutare il gateway applicativo a stabilire che il servizio è attivo e che le richieste devono essere inoltrate. - Certificati di dominio personalizzati: per accedere a Gestione API da Internet, creare record DNS (Domain Name System) per associare i nomi host all'indirizzo IP frontend di Application Gateway. Questo mapping garantisce che l'intestazione host e il certificato inviati a Gestione API siano validi. In questo esempio vengono usati tre certificati. Sono destinati al gateway di Gestione API (back-end), al portale per sviluppatori e all'endpoint di gestione.
Esporre esternamente il portale per gli sviluppatori e l'endpoint di gestione tramite Application Gateway
In questo articolo, esponiamo anche il portale per sviluppatori e l'endpoint di gestione a utenti esterni tramite il gateway applicativo. Sono necessari passaggi aggiuntivi per creare un listener, un probe, impostazioni e regole per ogni endpoint. Tutti i dettagli vengono specificati nei rispettivi passaggi. Se devi esporre l'endpoint di configurazione v2 del gateway self-hosted, segui passaggi simili (non mostrati).
Se si utilizza Microsoft Entra ID o l'autenticazione di terze parti, abilitare la funzionalità affinità di sessione basata su cookie in Application Gateway.
Avviso
Per evitare che Application Gateway WAF impedisca il download delle specifiche OpenAPI nel portale sviluppatori, disabilitare la regola del firewall 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination".
Le regole WAF del Gateway applicativo che potrebbero compromettere il funzionamento del portale includono:
-
920300,920330,931130,942100,942110,942180,942200,942260,942340,942370per la modalità amministrativa -
942200,942260,942370,942430,942440per il portale pubblicato
Impostazione delle variabili
In questa guida è necessario definire diverse variabili. La denominazione si basa sulla guida alle abbreviazioni di 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
Creare un gruppo di risorse per Resource Manager
Per creare un gruppo di risorse per Azure Resource Manager:
Accedere ad Azure.
Connect-AzAccountEseguire l'autenticazione con le proprie credenziali.
Selezionare la sottoscrizione desiderata.
Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscriptionCrea un gruppo di risorse. Se si usa un gruppo di risorse esistente, è possibile ignorare questo passaggio.
New-AzResourceGroup -Name $resGroupName -Location $location
Resource Manager richiede che tutti i gruppi di risorse specifichino una località. Questa posizione viene usata come posizione predefinita per le risorse in quel gruppo di risorse. Assicurarsi che tutti i comandi per creare un gateway applicazione usino lo stesso gruppo di risorse.
Creare una rete virtuale e una subnet per il gateway applicativo
L'esempio seguente illustra come creare una rete virtuale usando Gestione risorse. La rete virtuale in questo esempio è costituita da subnet separate per Application Gateway e API Management.
Impostare gli indirizzi IP di Application Gateway.
Nota
Poiché saranno presenti listener pubblici e privati, è necessario un indirizzo IP pubblico e privato. L'indirizzo IP pubblico statico deve essere creato, mentre l'indirizzo IP privato deve essere selezionato dalla subnet associata al gateway applicazione. L'indirizzo IP privato è stato selezionato arbitrariamente.
$appGatewayExternalIP = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-ag" -location $location -AllocationMethod Static -Sku Standard -Force $appGatewayInternalIP = "10.0.0.100" [String[]]$appGwNsgDestIPs = $appGatewayInternalIP, $appGatewayExternalIP.IpAddressCreare un gruppo di sicurezza di rete (NSG) e regole NSG per la subnet di 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, $appGwRule2Creare un gruppo di sicurezza di rete (NSG) e regole NSG per la subnet di Gestione API. Gestione API richiede diverse regole specifiche del gruppo di sicurezza di rete.
$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, $apimRule4Assegnare l'intervallo di indirizzi 10.0.0.0/24 alla variabile della subnet da utilizzare per Application Gateway durante la creazione di una rete virtuale.
$appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"Assegnare l'intervallo di indirizzi 10.0.1.0/24 alla variabile subnet da usare per Gestione API durante la creazione di una rete virtuale.
$apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"Creare una rete virtuale denominata vnet-contoso. Usare il prefisso 10.0.0.0/16 con le subnet 10.0.0.0/24 e 10.0.1.0/24.
$vnet = New-AzVirtualNetwork -Name "vnet-contoso" -ResourceGroupName $resGroupName ` -Location $location -AddressPrefix "10.0.0.0/16" -Subnet $appGatewaySubnet,$apimSubnetAssegnare variabili subnet per i passaggi successivi.
$appGatewaySubnetData = $vnet.Subnets[0] $apimSubnetData = $vnet.Subnets[1]
Creare un'istanza di Gestione API all'interno di una rete virtuale
L'esempio seguente illustra come creare un'istanza di Gestione API in una rete virtuale configurata per il solo accesso interno.
Gestione API richiede un indirizzo IP pubblico con un oggetto univoco
DomainNameLabel.$apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location ` -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabelCreare un oggetto rete virtuale di Gestione API usando la subnet
$apimSubnetDatacreata in precedenza.$apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.IdCreare un'istanza di Gestione API all'interno della rete virtuale. In questo esempio viene creato il servizio nel livello di servizio Developer. Sostituire un nome univoco per l'istanza di Gestione API.
$apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName -Organization $apimOrganization ` -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType "Internal" -Sku "Developer" -PublicIpAddressId $apimPublicIpAddressId.Id
Possono essere necessari da 30 a 40 minuti per creare e attivare un'istanza di Gestione API in questo livello. Dopo il completamento del comando precedente, per confermare l'accesso vedere Configurazione DNS necessaria per accedere al servizio Gestione API su una rete virtuale interna.
Configurare nomi dominio personalizzati in Gestione API
Per configurare nomi dominio personalizzati in Gestione API:
Inizializzate le variabili seguenti con i dettagli dei certificati dotati di chiave privata per i domini e del certificato radice attendibile. In questo esempio vengono usate le variabili
api.contoso.net,portal.contoso.netemanagement.contoso.net.$certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -ForceCreare e impostare gli oggetti di configurazione
Hostnameper gli endpoint di Gestione API.$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
Configurare una zona privata per la risoluzione DNS nella rete virtuale
Per configurare una zona DNS privata per la risoluzione DNS nella rete virtuale:
Creare una zona DNS privata e collegare la rete virtuale.
$myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain ` -ResourceGroupName $resGroupName -Name "mylink" ` -VirtualNetworkId $vnet.idCreare record A per i nomi host di dominio personalizzati che eseguono il mapping all'indirizzo IP privato di Gestione API.
$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)
Crea la configurazione del gateway applicativo
Prima di creare il gateway applicazione, è necessario impostare tutti gli elementi di configurazione. La procedura seguente consente di creare gli elementi di configurazione necessari per una risorsa gateway applicazione.
Creare una configurazione IP di Application Gateway denominata gatewayIP01. Quando Application Gateway viene avviato, ottiene un indirizzo IP dalla subnet configurata e instrada il traffico di rete agli indirizzi IP del pool back-end. Tenere presente che ogni istanza ha un indirizzo IP.
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetDataConfigurare la stessa porta front-end per l'endpoint IP pubblico e privato. Si tratta della porta a cui si connettono gli utenti. Usando la stessa porta per entrambi si garantisce che le richieste interne ed esterne possano essere effettuate alla stessa porta.
$fp01 = New-AzApplicationGatewayFrontendPort -Name "port01" -Port 443Configurare due indirizzi IP front-end: uno pubblico e uno privato. L'indirizzo IP privato viene prelevato dalla subnet del gateway applicazione, che è stata la prima a essere creata all'indice 0.
$fipconfig01 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP ` -Subnet $vnet.Subnets[0]Configurare i certificati per il gateway applicativo. Vengono usati per decrittografare e ricrittografare il traffico che vi passa attraverso.
Nota
Il gateway applicazione supporta la definizione di opzioni TLS personalizzate, la disabilitazione di determinate versioni del protocollo TLS e la specifica di pacchetti di crittografia e l'ordine delle preferenze. Per altre informazioni sulle opzioni TLS configurabili, vedere Panoramica dei criteri 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 $certManagementPwdCreare i listener HTTP per il gateway applicativo. Assegnare loro la configurazione IP front-end, la porta e i certificati TLS/SSL.
# 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 trueCreare sonde personalizzate per l'endpoint del dominio del gateway di API Management. Il percorso
/status-0123456789abcdefè un endpoint di integrità predefinito ospitato in tutte le istanze di Gestione API. Impostareapi.contoso.netcome nome host probe personalizzato per assicurare la protezione con il certificato TLS/SSL.Nota
Il nome host
contosoapi.azure-api.netè il nome host proxy predefinito configurato quando un servizio denominatocontosoapiviene creato nell'ambiente Azure pubblico.$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 8Configurare il certificato radice attendibile per i certificati back-end. Questo certificato verifica l'autenticità dei certificati back-end.
$trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate ` -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPathConfigura le impostazioni HTTP del backend per il gateway applicativo, compreso un limite di timeout per le richieste backend, oltre il quale vengono annullate. Questo valore è diverso dal timeout del probe.
$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 180Configurare un pool di indirizzi IP back-end per ogni endpoint Gestione API usando il rispettivo nome di dominio.
$apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" ` -BackendFqdns $gatewayHostname $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" ` -BackendFqdns $portalHostname $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" ` -BackendFqdns $managementHostnameCreare regole di routing per il gateway applicativo per usare il routing di base.
# 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 31Suggerimento
Modificare
-RuleTypee il routing per limitare l'accesso a determinate pagine del portale per sviluppatori.Configura il numero di istanze e la dimensione del gateway applicativo. In questo esempio si usa WAF_v2 SKU per aumentare la sicurezza della risorsa Gestione API.
Usare almeno due istanze (Capacity) per i carichi di lavoro di produzione. È possibile usare una sola istanza per scenari di non produzione o per la sperimentazione generale. Per altre informazioni, vedi Prezzi di gateway applicazione di Azure.
$sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2Configurare la modalità WAF.
Suggerimento
Per un breve periodo durante l'installazione e per testare le regole del firewall, è possibile configurare la modalità "Rilevamento", che monitora e registra gli avvisi delle minacce, ma non blocca il traffico. È possibile quindi apportare eventuali aggiornamenti alle regole del firewall prima di passare alla modalità "Prevenzione", che blocca intrusioni e attacchi rilevati dalle regole.
$config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"Poiché TLS 1.0 è attualmente l'impostazione predefinita, configurare il gateway applicativo in modo che usi uno dei criteri recenti di TLS 1.2.
$policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
Crea un gateway applicativo
Crea un gateway applicativo con tutti gli oggetti di configurazione dei passaggi precedenti. La creazione di un'istanza può richiedere 15 minuti.
$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 $configConfermare lo stato di integrità del back-end Gestione API.
Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
Verificare che lo stato di integrità di ogni pool di back-end sia Integro. Se è necessario risolvere i problemi di un back-end non integro o con stato di integrità sconosciuto, vedere Risolvere i problemi di integrità del back-end in Application Gateway.
Creare record DNS per accedere agli endpoint di Gestione API da Internet
Dopo aver creato il gateway applicativo, configurare la comunicazione con API Management proveniente da Internet. Creare record A DNS che associno ciascuno dei nomi host degli endpoint di Gestione API configurati all'indirizzo IP pubblico statico del gateway applicativo. In questo articolo, i nomi host di esempio sono api.contoso.net, portal.contoso.net e management.contoso.net.
Verifica della connettività
Per eseguire rapidamente dei test, valuta di modificare temporaneamente il file hosts del computer con voci che associano l'indirizzo IP pubblico del gateway applicativo ai nomi host dell'endpoint di API Management:
- Modificare i file hosts. Ad esempio, se l'indirizzo IP pubblico del gateway applicativo è
172.203.129.101, la voce potrebbe essere172.203.129.101 api.contoso.net. - Eseguire un comando curl sull'endpoint di stato di Gestione API (lo stesso percorso usato in precedenza per il probe di integrità):
curl -v https://api.contoso.net/status-0123456789abcdefQuesto dovrebbe restituire uno stato200 Service Operational, che indica una comunicazione riuscita con Gestione API tramite Application Gateway.
Considerazioni sul DNS
Il Gateway applicativo dispone ora di percorsi di accesso privati e pubblici. L'uso degli stessi domini e porte crea una situazione di split-brain DNS in cui un resolver DNS esterno deve essere configurato per risolvere api.contoso.net all'indirizzo IP esterno del gateway applicativo, mentre un resolver DNS interno deve risolvere lo stesso dominio all'indirizzo IP interno del gateway applicativo. Questa configurazione offre un vantaggio in quanto le applicazioni non devono modificare il dominio o la porta per la destinazione interna o esterna di applicazioni e API. La responsabilità della destinazione è posticipata in modo appropriato ai resolver DNS.
Riepilogo
Il servizio Gestione API configurato in una rete virtuale offre un'interfaccia a gateway singolo per tutte le API configurate, che siano ospitate in locale o nel cloud. L'integrazione del gateway applicazione con Gestione API offre la flessibilità di abilitare selettivamente l'accesso a determinate API su Internet. L'integrazione fornisce anche un WAF come front-end all'istanza di Gestione API.
Contenuti correlati
Configurare usando un modello di Azure Resource Manager
Scopri di più su Application Gateway:
Altre informazioni su Gestione API e reti virtuali: