Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
APLICA-SE A: Desenvolvedor | Premium
É possível configurar o Gerenciamento de API do Azure em uma rede virtual no modo interno, o que o torna acessível apenas dentro da rede virtual. Gateway de Aplicativo do Azure é um serviço de plataforma como serviço (PaaS) que atua como um balanceador de carga de camada 7. Ele atua como um serviço de proxy reverso e fornece entre suas ofertas o WAF (Firewall de Aplicativo Web do Azure).
Ao combinar o Gerenciamento de API provisionado em uma rede virtual interna com o front-end do gateway de aplicativo, você pode:
- Usar o mesmo recurso de Gerenciamento de API para consumo por clientes internos e externos.
- Usar um único recurso de Gerenciamento de API e ter uma sub-rede de APIs definida no Gerenciamento de API disponível para consumidores externos.
- Fornecer uma maneira rápida de ativar e desativar o acesso ao Gerenciamento de API da Internet pública.
Para diretrizes de arquitetura, confira:
- Integração empresarial básica: arquitetura de referência
- Acelerador de zona de aterrissagem do API Management: arquitetura de referência e orientações de design
Observação
Este artigo foi atualizado para usar o gateway de aplicativo WAF_V2 SKU.
Pré-requisitos
Observação
Recomendamos que você use o módulo Az PowerShell do Azure para interagir com o Azure. Para começar, consulte Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Para seguir as etapas descritas neste artigo, você precisa ter:
Uma assinatura ativa do Azure
Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
Certificados
- Arquivos PFX (Troca de Informações Pessoais) para nomes de host personalizados do API Management: gateway, portal do desenvolvedor e ponto de extremidade de gerenciamento.
- Um arquivo de certificado (CER) para o certificado raiz dos certificados PFX.
Para saber mais, confira Certificados para o back-end. Para fins de teste, opcionalmente, gere certificados autoassinados.
A última versão do Azure PowerShell
Cenário
Neste artigo você aprenderá como usar um único instância do Gerenciamento de API para consumidores internos e externos e como fazê-lo atuar como um único front-end para as APIs locais e na nuvem. Você cria uma instância de Gerenciamento de API e a implanta em uma rede virtual do Azure. Você aprende a usar listeners públicos e privados no Application Gateway. Você entende como expor apenas um subconjunto de suas APIs para consumo externo usando a funcionalidade de roteamento disponível no Gateway de Aplicativo. No exemplo, as APIs são realçadas em verde.
No primeiro exemplo de instalação, todas as suas APIs são gerenciadas somente de dentro da sua rede virtual. Os consumidores internos podem acessar todas as suas APIs internas e externas. O tráfego nunca é exposto à Internet. A conectividade de alto desempenho pode ser fornecida por meio de circuitos de Azure ExpressRoute. No exemplo, os consumidores internos são realçados em laranja.
O que é necessário para integrar o Gerenciamento de API e o gateway de aplicativo?
- Pool de servidores de back-end: este pool de servidores é o endereço IP virtual interno do Gerenciamento de APIs.
- Configurações do pool de servidores back-end: cada pool tem configurações como porta, protocolo e afinidade baseada em cookie. Essas configurações são aplicadas a todos os servidores no pool.
- Porta front-end: essa porta pública é aberta no gateway de aplicativo. O tráfego que o atinge é redirecionado para um dos servidores de back-end.
- Listener: O listener tem uma porta de front-end, um protocolo (HTTP ou HTTPS; esses valores fazem distinção entre maiúsculas e minúsculas) e o nome do certificado TLS (Transport Layer Security) (se estiver configurando o descarregamento de TLS).
- Regra: a regra vincula um ouvinte para um pool de servidor de back-end.
-
Sonda de integridade personalizada: o Application Gateway, por padrão, usa sondas baseadas em endereço IP para determinar quais servidores em
BackendAddressPoolestão ativos. O Gerenciamento de API responde apenas às solicitações que têm o cabeçalho de host correto, portanto, as investigações padrão falham. Você define uma investigação de integridade personalizada para ajudar o gateway de aplicativo a determinar que o serviço está ativo e deve encaminhar as solicitações. - Certificados de domínio personalizados: para acessar o Gerenciamento de API pela Internet, crie registros do Sistema de Nomes de Domínio (DNS) para mapear seus nomes de host para o endereço IP de front-end do Application Gateway. Esse mapeamento garante que o cabeçalho do host e o certificado enviados ao Gerenciamento de API sejam válidos. Neste exemplo, vamos usar três certificados. Eles se destinam ao gateway do Gerenciamento de API (o back-end), ao portal do desenvolvedor e ao endpoint de gerenciamento.
Expor externamente o portal do desenvolvedor e o endpoint de gerenciamento por meio do Application Gateway
Neste artigo, também expomos o portal do desenvolvedor e o endpoint de gerenciamento para públicos externos por meio do gateway de aplicação. São necessárias etapas adicionais para criar um listener, uma sonda, configurações e regras para cada ponto de extremidade. Todos os detalhes são fornecidos em suas respectivas etapas. Se você precisar expor o ponto de extremidade de configuração v2 do gateway auto-hospedado, siga etapas semelhantes (não mostradas).
Se você utilizar o Microsoft Entra ID ou autenticação de terceiros, habilite o recurso afinidade de sessão baseada em cookies no Application Gateway.
Aviso
Para impedir que o WAF do Application Gateway prejudique o download das especificações OpenAPI no portal do desenvolvedor, desative a regra de firewall 942200 - "Detects MySQL comment-/space-obfuscated injections and backtick termination".
As regras do WAF do Application Gateway que podem comprometer a funcionalidade do portal incluem:
-
920300,920330,931130,942100,942110,942180,942200,942260,942340,942370para o modo administrativo -
942200,942260,942370,942430,942440para o portal publicado
Definindo Variáveis
Ao longo deste guia, você precisa definir várias variáveis. A nomenclatura se baseia na orientação de abreviação do 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
Criar um grupo de recursos para o Gerenciador de Recursos
Para criar um grupo de recursos para o Azure Resource Manager:
Entre no Azure.
Connect-AzAccountAutentique-se com suas credenciais.
Selecione a assinatura que você deseja.
Get-AzSubscription -Subscriptionid $subscriptionId | Select-AzSubscriptionCrie um grupo de recursos. Você poderá ignorar esta etapa se estiver usando um grupo de recursos existente.
New-AzResourceGroup -Name $resGroupName -Location $location
O Resource Manager requer que todos os grupos de recursos especifiquem um local. Esse local é usado como o padrão para os recursos do grupo de recursos em questão. Verifique se todos os comandos para criar um Gateway de Aplicativo usam o mesmo grupo de recursos.
Criar uma rede virtual e uma sub-rede para o gateway de aplicativo
O exemplo a seguir mostra como criar uma rede virtual usando o Gerenciador de Recursos. A rede virtual neste exemplo consiste em sub-redes separadas para o Gerenciamento de API e gateway de aplicativo.
Defina os endereços IP do Application Gateway.
Observação
Como haverá ouvintes públicos e privados, precisamos de um endereço IP público e privado. O endereço IP público estático deve ser criado, enquanto o endereço IP privado deve ser selecionado na sub-rede associada ao gateway de aplicativo. O endereço IP privado foi selecionado 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.IpAddressCrie um grupo de segurança de rede (NSG) e regras NSG para a sub-rede do Gateway de Aplicativo.
$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, $appGwRule2Crie um grupo de segurança de rede (NSG) e regras NSG para a sub-rede Gerenciamento de API. O Gerenciamento de API requer várias regras NSG específicas.
$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, $apimRule4Ao criar uma rede virtual, atribua o intervalo de endereço 10.0.0.0/24 à variável de sub-rede a ser usada para o Gateway de Aplicativo.
$appGatewaySubnet = New-AzVirtualNetworkSubnetConfig -Name "appGatewaySubnet" -NetworkSecurityGroup $appGwNsg -AddressPrefix "10.0.0.0/24"Ao criar uma rede virtual, atribua o intervalo de endereço 10.0.1.0/24 à variável de sub-rede a ser usada para o Gerenciamento de API.
$apimSubnet = New-AzVirtualNetworkSubnetConfig -Name "apimSubnet" -NetworkSecurityGroup $apimNsg -AddressPrefix "10.0.1.0/24"Crie uma rede virtual chamada vnet-contoso. Utilize o prefixo 10.0.0.0/16 com as sub-redes 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,$apimSubnetAtribua variáveis de sub-rede para as próximas etapas.
$appGatewaySubnetData = $vnet.Subnets[0] $apimSubnetData = $vnet.Subnets[1]
Criar uma instância de Gerenciamento de API dentro de uma rede virtual
O exemplo a seguir mostra como criar uma instância de Gerenciamento de API em uma rede virtual configurada somente para acesso interno.
O Gerenciamento de API requer um IP público com um exclusivo
DomainNameLabel.$apimPublicIpAddressId = New-AzPublicIpAddress -ResourceGroupName $resGroupName -name "pip-apim" -location $location ` -AllocationMethod Static -Sku Standard -Force -DomainNameLabel $apimDomainNameLabelCrie um objeto de rede virtual de Gerenciamento de API usando a sub-rede
$apimSubnetDatacriada.$apimVirtualNetwork = New-AzApiManagementVirtualNetwork -SubnetResourceId $apimSubnetData.IdCrie uma instância de Gerenciamento de API dentro da rede virtual. Este exemplo cria o serviço na camada de serviço do desenvolvedor. Substitua um nome exclusivo para a instância de Gerenciamento de API.
$apimService = New-AzApiManagement -ResourceGroupName $resGroupName -Location $location -Name $apimServiceName -Organization $apimOrganization ` -AdminEmail $apimAdminEmail -VirtualNetwork $apimVirtualNetwork -VpnType "Internal" -Sku "Developer" -PublicIpAddressId $apimPublicIpAddressId.Id
A criação e a ativação de uma instância de Gerenciamento de API nessa camada leva de 30 a 40 minutos. Depois que o comando anterior for bem-sucedido, confira a Configuração DNS necessária para acessar o serviço de Gerenciamento de API da rede virtual interna para confirmar o acesso a ele.
Configure nomes de domínio personalizados no Gerenciamento de API
Para configurar nomes de domínio personalizados no Gerenciamento de API:
Inicialize as seguintes variáveis com os detalhes dos certificados com chaves privadas para os domínios e do certificado raiz confiável. Neste exemplo, usamos a
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 -ForceCrie e defina os objetos de configuração
Hostnamepara os endpoints do API Management.$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
Configurar uma zona privada para resolução DNS na rede virtual
Para configurar uma zona DNS privada para resolução DNS na rede virtual:
Crie uma zona DNS privada e vincule a rede virtual.
$myZone = New-AzPrivateDnsZone -Name $domain -ResourceGroupName $resGroupName $link = New-AzPrivateDnsVirtualNetworkLink -ZoneName $domain ` -ResourceGroupName $resGroupName -Name "mylink" ` -VirtualNetworkId $vnet.idCrie registros A para os nomes de host de domínio personalizados que mapeiam para o endereço IP privado do API Management.
$apimIP = $apimService.PrivateIPAddresses[0] New-AzPrivateDnsRecordSet -Name api -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP) New-AzPrivateDnsRecordSet -Name portal -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP) New-AzPrivateDnsRecordSet -Name management -RecordType A -ZoneName $domain ` -ResourceGroupName $resGroupName -Ttl 3600 ` -PrivateDnsRecords (New-AzPrivateDnsRecordConfig -IPv4Address $apimIP)
Criar configuração do Gateway de Aplicativo
Todos os itens de configuração devem estar configurados antes de criar o gateway de aplicativo. As etapas a seguir criam os itens de configuração necessários para um recurso de Gateway de Aplicativo.
Crie uma configuração de IP do Gateway de Aplicativo chamada gatewayIP01. Quando o Gateway de Aplicativo é iniciado, ele escolhe um endereço IP na sub-rede configurada e encaminha o tráfego de rede para os endereços IP no pool de IPs de back-end. Tenha em mente que cada instância usa um endereço IP.
$gipconfig = New-AzApplicationGatewayIPConfiguration -Name "gatewayIP01" -Subnet $appGatewaySubnetDataConfigure a mesma porta de front-end para o ponto de extremidade IP público e privado. Essa porta é aquela à qual os usuários se conectam. Usando a mesma porta para ambos, garantimos que solicitações internas e externas possam ser feitas na mesma porta.
$fp01 = New-AzApplicationGatewayFrontendPort -Name "port01" -Port 443Configure dois endereços IP de front-end : um público e outro privado. O endereço IP privado é obtido da sub-rede do gateway de aplicativo, que foi a primeira a ser criada no índice 0.
$fipconfig01 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-public-ip" -PublicIPAddress $appGatewayExternalIP $fipconfig02 = New-AzApplicationGatewayFrontendIPConfig ` -Name "gateway-private-ip" -PrivateIPAddress $appGatewayInternalIP ` -Subnet $vnet.Subnets[0]Configure os certificados para o gateway de aplicação. Eles são usados para descriptografar e criptografar novamente o tráfego que passa.
Observação
O gateway de aplicativo dá suporte à definição de opções de TLS personalizada, à desabilitação de determinadas versões de protocolo TLS e à especificação de conjuntos de criptografia e à ordem de preferência. Para saber mais sobre as opções configuráveis de TLS, acesse Visão geral da política de 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 $certManagementPwdCrie os ouvintes HTTP para o gateway de aplicativo. Atribua a eles a configuração de IP, a porta e o certificado TSL/SSL do 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 trueCrie uma investigação personalizada para o ponto de extremidade de domínio do gateway
ContosoApido API Management. O caminho/status-0123456789abcdefé um ponto de extremidade de integridade padrão hospedado em todas as instâncias do API Management. Definaapi.contoso.netcomo um nome de host de investigação personalizado para protegê-lo com o certificado TSL/SSL.Observação
O nome de host
contosoapi.azure-api.neté o nome de host de proxy padrão configurado quando um serviço chamadocontosoapié criado no Azure público.$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 8Configure o certificado raiz confiável para os certificados de back-end. Esse certificado verifica a autenticidade dos certificados de back-end.
$trustedRootCert = New-AzApplicationGatewayTrustedRootCertificate ` -Name "allowlistcert1" -CertificateFile $trustedRootCertCerPathConfigure as configurações de back-end HTTP para o gateway de aplicativos, incluindo um tempo limite para solicitações ao back-end, após o qual elas serão canceladas. Esse valor é diferente do tempo limite de investigação.
$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 180Configure um pool de endereços IP de back-end para cada endpoint do API Management usando o respectivo nome de domínio.
$apimGatewayBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "gatewaybackend" ` -BackendFqdns $gatewayHostname $apimPortalBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "portalbackend" ` -BackendFqdns $portalHostname $apimManagementBackendPool = New-AzApplicationGatewayBackendAddressPool -Name "managementbackend" ` -BackendFqdns $managementHostnameCrie regras de roteamento para que o gateway de aplicativos use o roteamento básico.
# 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 31Dica
Altere o
-RuleTypee o roteamento, para restringir o acesso a determinadas páginas do portal do desenvolvedor.Configure o número de instâncias e o tamanho do gateway de aplicativo. Neste exemplo, usamos o WAF_v2 SKU para aumentar a segurança do recurso de Gerenciamento de API.
Use um mínimo de duas instâncias (Capacidade) para cargas de trabalho de produção. Talvez você queira usar apenas uma instância para cenários de não produção ou para experimentação geral. Para obter mais informações, consulte preços do Gateway de Aplicativo do Azure.
$sku = New-AzApplicationGatewaySku -Name "WAF_v2" -Tier "WAF_v2" -Capacity 2Configure o modo do WAF.
Dica
Por um curto período durante a instalação e para testar suas regras de firewall, o ideal é configurar o modo "Detecção", que monitora e registra os alertas de ameaças em log, mas não bloqueia o tráfego. Em seguida, você pode fazer atualizações nas regras de firewall antes de fazer a transição para o modo "Prevenção", que bloqueia invasões e ataques detectados pelas regras.
$config = New-AzApplicationGatewayWebApplicationFirewallConfiguration -Enabled $true -FirewallMode "Prevention"Como o TLS 1,0 atualmente é o padrão, defina o gateway de aplicativo para usar uma das políticas TLS 1.2 recentes.
$policy = New-AzApplicationGatewaySslPolicy -PolicyType Predefined -PolicyName AppGwSslPolicy20220101
Criar um Gateway de Aplicativo
Crie um Gateway de Aplicativo com todos os objetos de configuração das etapas anteriores. Pode levar 15 minutos para criar uma instância.
$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 $configConfirme o status de integridade dos back-ends do Gerenciamento de API.
Get-AzApplicationGatewayBackendHealth -Name $appgwName -ResourceGroupName $resGroupName
Certifique-se de que o status de integridade de cada pool de back-end esteja íntegro. Se precisar solucionar problemas de um back-end não saudável ou de um back-end com status de integridade desconhecido, consulte Solucionar problemas de integridade de back-end no Application Gateway.
Criar registros DNS para acessar os endpoints do API Management pela Internet
Depois que o gateway de aplicativo for criado, configure a comunicação com o Gerenciamento de API da Internet. Crie registros DNS do tipo A que apontem cada um dos nomes de host dos endpoints do API Management que você configurou para o endereço IP público estático do gateway de aplicativos. Neste artigo, os nomes do host de exemplo são api.contoso.net, portal.contoso.net e management.contoso.net.
Verificação de conectividade
Para fins de teste rápido, considere alterar temporariamente o arquivo de hosts do computador com entradas que mapeiam o endereço IP público do gateway de aplicativo para os nomes de host do ponto de extremidade do API Management:
- Modifique os arquivos de hosts. Por exemplo, se o IP público do gateway de aplicativo for
172.203.129.101, a entrada poderá ser172.203.129.101 api.contoso.net. - Execute um comando curl no ponto de extremidade de status do Gerenciamento de API (o mesmo caminho usado para a investigação de integridade anteriormente):
curl -v https://api.contoso.net/status-0123456789abcdefisso deve retornar um status de200 Service Operational, que indica uma comunicação bem-sucedida com o API Management por meio do Gateway de Aplicativo.
Considerações sobre DNS
O Gateway de Aplicativos agora conta com rotas privadas e públicas. O uso dos mesmos domínios e portas cria uma situação DNS de cérebro dividido na qual um resolvedor DNS externo deve ser definido para resolver api.contoso.net para o endereço IP externo do gateway de aplicativo, enquanto um resolvedor DNS interno deve resolver o mesmo domínio para o endereço IP interno do gateway de aplicativo. Essa configuração oferece uma vantagem de que os aplicativos não precisam alterar o domínio ou a porta para o direcionamento interno ou externo de aplicativos e APIs. A responsabilidade pelo direcionamento é apropriadamente adiada para os resolvedores DNS.
Resumo
O Gerenciamento de API, quando configurado em uma rede virtual, fornece uma interface de gateway única para todas as APIs configuradas, estejam elas hospedadas no local ou na nuvem. A integração do Gateway de Aplicativo ao Gerenciamento de API fornece a flexibilidade para habilitar seletivamente as APIs específicas para que possam ser acessadas pela Internet. A integração também fornece um WAF como um front-end à sua instância de Gerenciamento de API.
Conteúdo relacionado
Configurar usando um modelo do Azure Resource Manager
Saiba mais sobre Gateway de Aplicativo:
Saiba mais sobre o Gerenciamento de API nas redes virtuais: