Integrare Gestione API in una rete virtuale interna con gateway applicazione

È possibile configurare Azure Gestione API in una rete virtuale in modalità interna, che lo rende accessibile solo all'interno della rete virtuale. app Azure lication Gateway è 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 indicazioni sull'architettura, vedere:

Nota

Questo articolo è stato aggiornato per usare lo SKU gateway applicazione WAF_v2.

Disponibilità

Importante

Questa funzionalità è disponibile nei livelli Premium e Developer.

Per la disponibilità delle funzionalità nei livelli v2 (anteprima), vedere la panoramica dei livelli v2.

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, facoltativamente, generare certificati autofirmato.

  • La versione più recente di Azure PowerShell

Scenario

Questo articolo illustra come usare una singola istanza di Gestione API per i consumer interni ed esterni e renderla un singolo front-end per le API locali e cloud. Si crea un'istanza 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 vengono 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.

Diagram that shows the URL route.

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: questa porta pubblica viene aperta nel 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: gateway applicazione, per impostazione predefinita, usa probe basati su indirizzi IP per determinare quali server in 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 tramite gateway applicazione

In questo articolo viene anche esposto 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 forniti nei rispettivi passaggi.

Se si usa Microsoft Entra ID o l'autenticazione di terze parti, abilitare la funzionalità di affinità di sessione basata su cookie in gateway applicazione.

Avviso

Per impedire gateway applicazione WAF di interrompere il download delle specifiche OpenAPI nel portale per sviluppatori, disabilitare la regola 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination"del firewall .

gateway applicazione regole WAF che potrebbero interrompere le funzionalità del portale includono:

  • 920300, 920330, , 942100942110, 942180942260942200, 942340per 942370 la modalità amministrativa 931130
  • 942200, 942260, , 942430, 942440 per il 942370portale pubblicato

Impostazione delle variabili

In questa guida è necessario definire diverse variabili. La denominazione è basata sulle linee guida per l'abbreviazione di Cloud Adoption Framework.

# These variables must be changed.
$subscriptionId = "00000000-0000-0000-0000-000000000000"      # GUID of your Azure subscription
$domain = "contoso.net"                                       # The custom domain for your certificate
$apimServiceName = "apim-contoso"                             # API Management service instance name, must be globally unique    
$apimDomainNameLabel = $apimServiceName                       # Domain name label for API Management's public IP address, must be globally unique
$apimAdminEmail = "admin@contoso.net"                         # Administrator's email address - use your email address

$gatewayHostname = "api.$domain"                              # API gateway host
$portalHostname = "portal.$domain"                            # API developer portal host
$managementHostname = "management.$domain"                    # API management endpoint host

$baseCertPath = "C:\Users\Contoso\"                           # The base path where all certificates are stored
$trustedRootCertCerPath = "${baseCertPath}trustedroot.cer"    # Full path to contoso.net trusted root .cer file
$gatewayCertPfxPath = "${baseCertPath}gateway.pfx"            # Full path to api.contoso.net .pfx file
$portalCertPfxPath = "${baseCertPath}portal.pfx"              # Full path to portal.contoso.net .pfx file
$managementCertPfxPath = "${baseCertPath}management.pfx"      # Full path to management.contoso.net .pfx file

$gatewayCertPfxPassword = "certificatePassword123"            # Password for api.contoso.net pfx certificate
$portalCertPfxPassword = "certificatePassword123"             # Password for portal.contoso.net pfx certificate
$managementCertPfxPassword = "certificatePassword123"         # Password for management.contoso.net pfx certificate

# These variables may be changed.
$resGroupName = "rg-apim-agw"                                 # Resource group name that will hold all assets
$location = "West US"                                         # Azure region that will hold all assets
$apimOrganization = "Contoso"                                 # Organization name    
$appgwName = "agw-contoso"                                    # The name of the Application Gateway

Creare un gruppo di risorse per Gestione risorse

Per creare un gruppo di risorse per Azure Resource Manager:

  1. Accedere ad Azure.

    Connect-AzAccount
    
  2. Eseguire l'autenticazione con le proprie credenziali.

  3. Selezionare la sottoscrizione desiderata.

    Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscription
    
  4. Crea un gruppo di risorse. È possibile ignorare questo passaggio se si usa un gruppo di risorse esistente.

    New-AzResourceGroup -Name $resGroupName -Location $location
    

Resource Manager richiede che tutti i gruppi di risorse specifichino una posizione. 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 gateway applicazione e Gestione API.

  1. 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
    
  2. Creare un gruppo di sicurezza di rete (NSG) e regole del gruppo di sicurezza di rete per la subnet 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
    
  3. Creare un gruppo di sicurezza di rete (NSG) e regole del gruppo di sicurezza di rete per la subnet Gestione API. Gestione API stv2 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, $apimRule4
    
  4. Assegnare l'intervallo di indirizzi 10.0.0.0/24 alla variabile subnet da usare per gateway applicazione durante la creazione di una rete virtuale.

    $appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"
    
  5. 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"
    
  6. 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
    
  7. Assegnare le variabili della 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

Nell'esempio seguente viene illustrato come creare un'istanza di Gestione API in una rete virtuale configurata solo per l'accesso interno.

  1. Gestione API stv2 richiede un indirizzo IP pubblico con un oggetto univocoDomainNameLabel.

    $apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location `
        -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabel
    
  2. Creare un oggetto di rete virtuale Gestione API usando la subnet $apimSubnetData creata.

    $apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.Id
    
  3. Creare un'istanza di Gestione API all'interno della rete virtuale. Questo esempio crea 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
    

La creazione e l'attivazione di un'istanza di Gestione API in questo livello possono richiedere da 30 a 40 minuti. Al termine del comando precedente, vedere Configurazione DNS necessaria per accedere alla rete virtuale interna Gestione API servizio per confermare l'accesso.

Configurare nomi di dominio personalizzati in Gestione API

Per configurare i nomi di dominio personalizzati in Gestione API:

  1. Inizializzare le variabili seguenti con i dettagli dei certificati con chiavi private per i domini e il certificato radice attendibile. In questo esempio si usano api.contoso.net, portal.contoso.nete management.contoso.net.

    $certGatewayPwd = ConvertTo-SecureString -String $gatewayCertPfxPassword -AsPlainText -Force
    $certPortalPwd = ConvertTo-SecureString -String $portalCertPfxPassword -AsPlainText -Force
    $certManagementPwd = ConvertTo-SecureString -String $managementCertPfxPassword -AsPlainText -Force
    
  2. Creare e impostare gli Hostname oggetti di configurazione per gli endpoint 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:

  1. 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
    
  2. 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.

  1. Creare una configurazione IP 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
    
  2. Configurare la stessa porta front-end per l'endpoint IP pubblico e privato. Questa porta è quella a cui gli utenti si connettono. 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
    
  3. 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]
    
  4. Configurare i certificati per il gateway applicazione. Vengono usati per decrittografare e ricrittografare il traffico che passa attraverso.

    Nota

    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
    
  5. Creare i listener HTTP per il gateway applicazione. Assegnare loro la configurazione, la porta e i certificati TLS/SSL 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
    
  6. Creare probe personalizzati per l'endpoint di dominio del gateway Gestione APIContosoApi. Il percorso /status-0123456789abcdef è un endpoint di integrità predefinito ospitato in tutte le istanze di Gestione API. Impostare api.contoso.net come nome host probe personalizzato per proteggerlo con il certificato TLS/SSL.

    Nota

    Il nome contosoapi.azure-api.net host è il nome host proxy predefinito configurato quando viene creato un servizio denominato contosoapi in 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
    
  7. 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
    
  8. 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
    
  9. 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
    
  10. 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

    Modifica -RuleType e routing per limitare l'accesso a determinate pagine del portale per sviluppatori.

  11. Configurare il numero di istanze e le dimensioni per il gateway applicazione. In questo esempio viene usato WAF_v2 SKU per una maggiore sicurezza della risorsa Gestione API.

    Usare almeno due istanze (capacità) 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 di app Azure lication Gateway.

    $sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2
    
  12. 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. È quindi possibile 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"
    
  13. 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

  1. Creare un gateway applicazione 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 $config
    
  2. 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 back-end sia Integro. Se è necessario risolvere un back-end non integro o un back-end con stato di integrità sconosciuto, vedere Risolvere i problemi di integrità back-end in gateway applicazione.

Creare record DNS per accedere agli endpoint Gestione API da Internet

Dopo aver creato il gateway applicazione, configurare la comunicazione con Gestione API da Internet. Creare record A-DNS che eseguono il mapping di ognuno dei nomi host dell'endpoint 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.nete 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:

  1. Modificare i file hosts. Ad esempio, se l'indirizzo IP pubblico del gateway applicazione è 172.203.129.101, la voce potrebbe essere 172.203.129.101 api.contoso.net.
  2. 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 la 200 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

Gestione API configurata in una rete virtuale fornisce un'interfaccia gateway singola per tutte le API configurate, sia che siano ospitate in locale o nel cloud. L'integrazione di gateway applicazione con Gestione API offre la flessibilità necessaria per consentire in modo selettivo l'accessibilità di determinate API su Internet. L'integrazione fornisce anche un WAF come front-end all'istanza di Gestione API.

Passaggi successivi