VNet Integration Regional no App Service

Por padrão, o App Service só enxerga a internet — nada de banco em VM privada, Redis com endpoint privado ou API atrás de um firewall interno. A VNet Integration Regional resolve exatamente isso: conecta o app a uma subnet dedicada da sua rede virtual, sem precisar do App Service Environment (ASE) nem de nenhuma infraestrutura extra.

Neste guia rápido você vai preparar a subnet, ativar a integração via Azure CLI e entender a diferença entre integração padrão (só tráfego privado) e roteamento total do tráfego de saída pela VNet.

Sumário

O que a VNet Integration Regional faz (e o que não faz)

É fácil confundir com Private Endpoint, mas são coisas complementares: a VNet Integration Regionalsaída — o app passa a alcançar recursos dentro da VNet, redes peered e, via VPN/ExpressRoute, até o datacenter on-premises. Ela não dá acesso privado de entrada ao próprio app (isso é papel do Private Endpoint) e não muda o endereço público que os visitantes usam pra chegar na aplicação.

Pré-requisitos

O recurso exige plano Standard, Premium ou Elastic Premium — não funciona no Free, Shared ou Basic. A VNet precisa estar na mesma região do App Service (dá pra alcançar outras regiões depois via peering, mas a integração em si é sempre regional).

Passo 1 — Preparar a subnet dedicada

A integração precisa de uma subnet só pra ela — sem outros recursos usando os IPs, e delegada ao serviço Microsoft.Web/serverFarms. O tamanho mínimo é /28, mas em produção vale reservar /26 ou /27 pra ter espaço de escala:

az network vnet subnet create \
    --resource-group rg-appservice-lab \
    --vnet-name vnet-appservice \
    --name snet-integration \
    --address-prefixes 10.0.1.0/27 \
    --delegations Microsoft.Web/serverFarms

Passo 2 — Ativar a integração

az webapp vnet-integration add \
    --name meuapp-prod \
    --resource-group rg-appservice-lab \
    --vnet vnet-appservice \
    --subnet snet-integration

az webapp vnet-integration list \
    --name meuapp-prod \
    --resource-group rg-appservice-lab \
    -o table

Em PowerShell, o mesmo resultado sai apontando o ID da subnet direto no app:

$subnet = Get-AzVirtualNetworkSubnetConfig -Name snet-integration `
    -VirtualNetwork (Get-AzVirtualNetwork -Name vnet-appservice -ResourceGroupName rg-appservice-lab)

Set-AzWebApp -ResourceGroupName rg-appservice-lab -Name meuapp-prod `
    -VirtualNetworkSubnetId $subnet.Id

Passo 3 — Rotear todo o tráfego de saída (opcional)

Por padrão, só o tráfego pra endereços privados (RFC 1918) passa pela VNet — chamadas pra internet continuam saindo direto. Se você tem um firewall central (Azure Firewall, NVA) e quer que todo o tráfego de saída passe por ele, habilite o roteamento total:

az webapp config set \
    --name meuapp-prod \
    --resource-group rg-appservice-lab \
    --generic-configurations '{"vnetRouteAllEnabled": true}'

Com isso ativo, uma UDR (User Defined Route) na subnet de integração apontando pro firewall passa a valer também pro tráfego de internet do app — inclusive chamadas a APIs públicas, então vale revisar as regras do firewall antes de ativar, ou a aplicação perde acesso à internet de uma hora pra outra.

Passo 4 — Validar a conectividade

O jeito mais direto de confirmar que a integração está funcionando é testar a partir de dentro da aplicação, via Kudu/SSH do App Service, alcançando um recurso que só existe na rede privada (por exemplo, uma VM ou um banco com firewall fechado pra internet):

# Dentro do console SSH do Kudu (https://meuapp-prod.scm.azurewebsites.net/webssh/host)
curl -m 5 -v telnet://10.0.2.4:1433

Uma conexão recusada ou aceita já confirma que o pacote chegou até o destino privado — um timeout, por outro lado, geralmente aponta pra NSG bloqueando ou rota errada.

Vale rodar esse teste logo depois de ativar a VNet Integration Regional, antes de assumir que a aplicação em si tem algum problema — muita investigação de “bug na aplicação” na verdade é rede ainda não propagada ou NSG bloqueando, coisas que esse curl resolve em segundos.

Troubleshooting comum

SintomaCausaSolução
Subnet is not empty ou already delegatedSubnet com outros recursos ou delegada a outro serviçoUsar uma subnet nova e vazia, dedicada só à integração
App não alcança recurso privadoNSG na subnet de integração bloqueando saídaRevisar regras outbound da NSG associada à subnet
App perde acesso à internet depois do route-allUDR aponta pro firewall, mas a regra de saída pra internet não existe láAdicionar regra de rede/aplicação liberando os destinos necessários no firewall
Integração “presa” em FailedVNet em região diferente do App ServiceConfirmar que VNet e App Service estão na mesma região
DNS privado não resolve dentro do appVNet sem os DNS servers customizados/privados configuradosApontar o DNS da VNet pro Azure DNS Private Resolver ou pro servidor DNS correto

Conclusão

A VNet Integration Regional é o caminho mais simples pra tirar o App Service do isolamento e conectá-lo à sua rede privada — sem ASE, sem custo extra de plano, só uma subnet dedicada e um comando. Combinada com Key Vault References pros segredos, dá pra chegar bem perto de um ambiente enterprise sem sair do plano Standard.

Referências oficiais

Interessado em saber mais sobre artigos relacionados ao Microsoft Azure CLIQUE AQUI

🚀 Vamos nos conectar?

Não perca nenhuma oportunidade! Cadastre-se nas minhas redes e no canal do YouTube para receber conteúdos de TI, Cloud, Azure, Kubernetes e DevOps em primeira mão.

Dica: No Facebook, todos os artigos do blog são publicados automaticamente. Vale a pena curtir!


💬 Dúvidas ou Problemas?

Com o intuito de ajudar a comunidade, caso você tenha dúvidas ou encontre problemas na execução dos comandos deste artigo, deixe um comentário abaixo. Responderei o mais breve possível!

Muito obrigado pela visita e até o próximo post!

Jefferson Castilho Especialista em Cloud & DevOps.

Este guia técnico é exclusivo do Blog do Castilho. Explore mais conteúdos sobre Cloud e DevOps.

 

Deixe uma resposta

Descubra mais sobre Blog do Castilho - Tecnologia | FinOps | DevOps | Cloud

Assine agora mesmo para continuar lendo e ter acesso ao arquivo completo.

Continuar lendo