Azure API Management com VNETS

protegendo seu backend

Wilson Santos
6 min readAug 27, 2021
Arquitetura de referencia básica.

O Azure Api Manament é uma excelente pedida para projetos que lidam com APIs , centralização Monitoria , gerenciamento , documentação características que o APIM ajudar você a entregar.

No entanto muitas vezes esquecemos que nossos backends precisam estar protegidos e camadas adicionas de segurança sempre são bem vindas. Pensando nisso resolvi mostrar uma forma muito simples de proteger seu backend usando VNETS com elas podemos impedir chamadas publicas da internet no seu backend e além disso permitir que o APIM o acesse de forma simples e transparente.

O primeiro passo é entender a VNET , que é a representação virtual de uma Rede, e como qualquer rede ela pode ser segmentada em subnets, observe o desenho abaixo.

Diagrama com Um VNET rede 10.0.0.0/16 e duas subnets com redes 10.0.0.0/24 e 10.0.1.0/24

É importante entender quais opções o APIM oferece para se conectar na VNET;

Modos

  1. Off: Esse é o padrão sem rede virtual
  2. Externa: O portal de desenvolvedor e o gateway podem ser acessados pela Internet pública O gateway pode acessar recursos na rede virtual
  3. Interna: O portal de desenvolvedor e o gateway só podem ser acessados pela rede interna O gateway pode acessar recursos na rede virtual

OBS: Altamente recomendado Application Gateway e Front door na frente dessa rede pois o mesmo tem firewall , coisa que o APIM não tem, mas isso é um próximo passo.

Essa configuração pode ser feita no menu Virtual Vetworking na sua instancia do APIM no portal do Azure

apim com configuração externa na VNET vnet_apim e subnet SUBNEt_APIM

Depois de configurar o APIM devemos configurar o Application Service , nele vamos até o menu Neworking e configuramos um private endpoint

Adicionamos um private Endpoint configuramos a VNET e Subnet apropriada e marcamos a opção que integra com um DNS privado assim a configuração do APIM será a mesma para acessar seu backend.

Uma vez aplicada essas configurações você deve receber algo assim ao acessar seu backend

Perceba que ao acessar seu backend no meu caso no seed-api-windows.azurewebsites.net temos uma mensagem mais ou menos assim;

seed-api-windows.azurewebsites.net’s server IP address could not be found.

No entanto as APIs do Apim continuam funcionando com o mesmo endereço

tela do APIM com mesmo backend que não pode ser acessado pelo browser
tela do apim demostrando o sucesso de uma requisição ao backend seed-api-windows.azurewebsites.net

A implantação da Rede Virtual do Azure fornece segurança aprimorada, isolamento e permite que você coloque seu serviço de Gerenciamento de API em uma rede não roteável pela Internet à qual você controla o acesso. Essas redes podem então ser conectadas às suas redes locais usando várias tecnologias VPN, o que permite o acesso aos seus serviços de back-end na rede e / ou no local. O portal do desenvolvedor e o gateway de API podem ser configurados para serem acessíveis pela Internet ou apenas na rede virtual.

Modo Internal

Casos ainda não tenha criado ao APIM acoselho a já criar o APIM com a VNET configurada assim ele vai gerar o NSG com todas as liberações necessárias.

Se já tiver criado a instanai você devera acessar o menu network do APIM onde podera optar pela mudança para o modo internal, porem nesse caso sera necessário criar um NSG com todas as liberações necessárias. veja as regras aqui

Network security group

As regras de segurança do grupo de segurança de rede são avaliadas por prioridade usando a combinação de origem, porta de origem, destino, porta de destino e protocolo para permitir ou negar o tráfego. Uma regra de segurança não pode ter a mesma prioridade e direção que uma regra existente. Você não pode excluir regras de segurança padrão, mas pode substituí-las por regras com prioridade mais alta.

Learn more

Inbound security rules

Outbound security rules

Private DNS zone

Precisamos criar um novo private DNS zone, como o domíniodo APIM, aqui eu tomei um cacete devido a forma de criar esse recurso, tentei seguir o modelo do private DNS que foi criado automaticamente quando criei o private endpoint do App services mas deu ruim.

O private DNS do App Service foi criado assim privatelink.azurewebsites.net, mas isso não funcionou.

Assim não Funciona

Então resolvi criar apenas assim azure-api.net ai depois de muita dor de cabeça funcionou.

Assim Funciona

Precisamos associar o private DNS a VNET

adicionar o link com um nome para identificar
e fica assim

Precisa reiniciar alguma coisa

Se você planeja usar uma solução DNS personalizada para a VNet, configure-a antes de implantar um serviço de gerenciamento de API nela. Caso contrário, você precisará atualizar o serviço de gerenciamento de API sempre que alterar o(s) servidor(es) DNS executando a operação Aplicar configuração de rede ou selecionando Aplicar configuração de rede na janela de configuração de rede da instância de serviço no portal do Azure

Não precisei fazer isso, depois de criar o Private DNS zone levou uns 5 minutos e começou a responder

o que fiz liberar o ping na VM com esse comando

New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4

Demorou um pouco (minutos) mas logo começou a resolver o DNS

C:\Users\wdossantos>ping apim-poc-ws-02.azure-api.netPinging apim-poc-ws-02.azure-api.net [10.0.0.4] with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Ping statistics for 10.0.0.4:
Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
C:\Users\wdossantos>

Finalmente ele vive

respondeu 200

Lista completa dos DNS

  1. apim-poc-ws-02
  2. apim-poc-ws-02.developer
  3. apim-poc-ws-02.management
  4. apim-poc-ws-02.portal
  5. apim-poc-ws-02.scm

De dentro da VM também é possível testar pela aba test do portal do azure, mas não se esquema de marcar a opção Bypass CORS proxy

Using CORS proxy allows test console to get full access to gateway response, its status code, and headers, but may not work if your gateway is not reachable publicly.

Agora foi.

Referências

  1. https://docs.microsoft.com/pt-br/azure/api-management/api-management-using-with-vnet
  2. Conectar-se a uma rede virtual interna usando o Gerenciamento de API do Azure — Azure API Management | Microsoft Docs
  3. https://learn.microsoft.com/en-us/azure/dns/private-dns-getstarted-portal#link-the-virtual-network

--

--

Wilson Santos
Wilson Santos

Written by Wilson Santos

Nos últimos 15 anos, venho desenvolvendo , aperfeiçoando e integrando sistemas, sou apaixonado por desenvolver e ensinar, nem tanto por escrever!.

No responses yet