Integrare Gestione API in una rete virtuale interna con un gateway applicazione
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 di Azure è una piattaforma distribuita come servizio (PaaS) che funge da 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).
La combinazione di Gestione API in una rete virtuale interna con il gateway applicazione come front-end consente:
- 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 di zona di destinazione di Gestione API: architettura di riferimento e linee guida per la progettazione
Nota
Questo articolo è stato aggiornato per l'uso del gateway applicazione 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 una sottoscrizione di Azure, creare un account Azure 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, vedere Certificati per il back-end. A scopo di test, generare facoltativamente certificati autofirmati.
La versione più recente di Azure PowerShell
Scenario
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. Verrà creata un'istanza di Gestione API del tipo più recente a tenant singolo versione 2 (stv2). Si apprenderà come usare listener pubblici e privati in gateway applicazione. Si è appreso come esporre solo un subset delle API per l'utilizzo esterno usando la funzionalità di routing disponibile in gateway applicazione. 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 consumer interni sono evidenziati in arancione.
Cosa è necessario per integrare Gestione API e gateway applicazione?
- 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: la porta pubblica aperta sul gateway applicazione. 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.
- Probe di integrità personalizzato: il gateway applicazione, per impostazione predefinita, usa probe basati su indirizzi IP per individuare quali server di
BackendAddressPool
sono attivi. Poiché Gestione API risponde solo alle richieste dotate di intestazione host corretta, i probe predefiniti non riescono. È necessario definire un probe di integrità personalizzato per consentire al gateway applicazione di determinare che il servizio è attivo e deve inoltrare le richieste. - Certificati di dominio personalizzati: per accedere Gestione API da Internet, creare record DNS (Domain Name System) per eseguire il mapping dei nomi host all'indirizzo IP front-end gateway applicazione. 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 sviluppatori e l'endpoint di gestione attraverso il gateway applicazione
In questo articolo vengono anche esposti il portale per sviluppatori e l'endpoint di gestione a gruppi di destinatari esterni tramite il gateway applicazione. 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 è necessario esporre l'endpoint di configurazione v2 del gateway self-hosted, seguire i passaggi simili (non visualizzati).
Se si usa Microsoft Entra ID o un'autenticazione di terze parti, attivare la funzionalità affinità di sessione basata su cookie nel gateway applicazione.
Avviso
Per impedire che WAF del gateway applicazione interrompa il download delle specifiche OpenAPI nel portale per sviluppatori, disabilitare la regola del firewall 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"
.
Le regole WAF del gateway applicazione che potrebbero interrompere le funzionalità del portale includono:
920300
,920330
,931130
,942100
,942110
,942180
,942200
,942260
,942340
,942370
per la modalità amministrativa942200
,942260
,942370
,942430
,942440
per 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 Gestione risorse
Per creare un gruppo di risorse per Azure Resource Manager:
Accedere ad Azure.
Connect-AzAccount
Eseguire l'autenticazione con le proprie credenziali.
Selezionare la sottoscrizione desiderata.
Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
Crea 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 un percorso. che viene usato come percorso predefinito per le risorse in questo 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 applicazione
L'esempio seguente illustra come creare una rete virtuale usando Gestione risorse. La rete virtuale in questo esempio è costituita da subnet separate per il gateway applicazione e Gestione API.
Impostare gli indirizzi IP gateway applicazione.
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.IpAddress
Creare un gruppo di sicurezza di rete (NSG) e regole NSG per la subnet del gateway applicazione.
$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
Creare un gruppo di sicurezza di rete (NSG) e regole NSG per la subnet di Gestione API. Gestione API stv2 richiede diverse regole NSG specifiche.
$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
Assegnare l'intervallo di indirizzi 10.0.0.0/24 alla variabile subnet da usare per il gateway applicazione 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,$apimSubnet
Assegnare 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 stv2 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 $apimDomainNameLabel
Creare un oggetto rete virtuale di Gestione API usando la subnet
$apimSubnetData
creata in precedenza.$apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
Creare 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:
Inizializzare le variabili seguenti con i dettagli dei certificati con chiavi private per i domini e il certificato radice trusted. In questo esempio vengono usate le variabili
api.contoso.net
,portal.contoso.net
emanagement.contoso.net
.$certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -Force
Creare e impostare gli oggetti di configurazione
Hostname
per 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.id
Creare 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)
Creare la configurazione del gateway applicazione
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 del gateway applicazione denominata gatewayIP01. All'avvio, il gateway applicazione seleziona un indirizzo IP dalla subnet configurata e instrada il traffico di rete agli indirizzi IP nel pool di indirizzi IP back-end. Tenere presente che ogni istanza ha un indirizzo IP.
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetData
Configurare 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 443
Configurare due indirizzi IP front-end: uno pubblico e uno privato. L'indirizzo IP privato viene ricavato dalla subnet del gateway applicazione, che è stato il primo a essere creato in corrispondenza dell'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 applicazione. 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 $certManagementPwd
Creare i listener HTTP per il gateway applicazione. Assegnare ai listener HTTP la configurazione IP, la porta e i certificati TLS/SSL del front-end.
# 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
Creare probe personalizzati per l'endpoint del dominio gateway
ContosoApi
del servizio Gestione API. Il percorso/status-0123456789abcdef
è un endpoint di integrità predefinito ospitato in tutte le istanze di Gestione API. Impostareapi.contoso.net
come 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 denominatocontosoapi
viene 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 8
Configurare il certificato radice attendibile dei certificati back-end. Questo certificato verifica l'autenticità dei certificati back-end.
$trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate ` -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPath
Configurare le impostazioni back-end HTTP per il gateway applicazione, incluso un limite di timeout per le richieste back-end, dopo 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 180
Configurare 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 $managementHostname
Creare regole di routing per il gateway applicazione 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 31
Suggerimento
Modificare
-RuleType
e il routing per limitare l'accesso a determinate pagine del portale per sviluppatori.Configurare il numero di istanze e le dimensioni per il gateway applicazione. 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, vedere Prezzi del gateway applicazione.
$sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
Configurare 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, impostare il gateway applicazione per usare uno dei criteri TLS 1.2 recenti.
$policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
Creare un gateway applicazione
Creare un gateway applicazione con tutti gli oggetti di configurazione illustrati nei 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 $config
Confermare 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 il problema di un back-end non integro o di un back-end con stato di integrità sconosciuto, vedere Risolvere i problemi di integrità di back-end nel gateway applicazione.
Creare record DNS per accedere agli endpoint di Gestione API da Internet
Dopo aver creato il gateway applicazione, configurare la comunicazione con Gestione API da Internet. Creare record DNS A che eseguono il mapping di ognuno dei nomi host dell'endpoint di Gestione API configurati per l'indirizzo IP pubblico statico del gateway applicazione. In questo articolo, i nomi host di esempio sono api.contoso.net
, portal.contoso.net
e management.contoso.net
.
verifica Connessione ivity
Per scopi di test rapidi, prendere in considerazione la possibilità di modificare temporaneamente il file host del computer con voci che eseguono il mapping dell'indirizzo IP pubblico del gateway applicazione ai nomi host dell'endpoint Gestione API:
- Modificare i file hosts. Ad esempio, se l'indirizzo IP pubblico del gateway applicazione è
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 per il probe di integrità in precedenza):
curl -v https://api.contoso.net/status-0123456789abcdef
deve restituire uno stato, che indica la200 Service Operational
corretta comunicazione con Gestione API tramite gateway applicazione.
Considerazioni sul DNS
Il gateway applicazione ha ora percorsi privati e pubblici. L'uso degli stessi domini e porte crea una situazione DNS split-brain in cui un resolver DNS esterno deve essere impostato per risolvere api.contoso.net
l'indirizzo IP esterno del gateway applicazione, mentre un resolver DNS interno deve risolvere lo stesso dominio nell'indirizzo IP interno del gateway applicazione. 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.
Passaggi successivi
Configurare usando un modello di Azure Resource Manager
Altre informazioni sul gateway applicazione:
Altre informazioni su Gestione API e reti virtuali: