Azure API Management com VNETS
protegendo seu backend
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.
É importante entender quais opções o APIM oferece para se conectar na VNET;
Modos
- Off: Esse é o padrão sem rede virtual
- Externa: O portal de desenvolvedor e o gateway podem ser acessados pela Internet pública O gateway pode acessar recursos na rede virtual
- 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
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
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.
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.
Então resolvi criar apenas assim azure-api.net ai depois de muita dor de cabeça funcionou.
Precisamos associar o private DNS a VNET
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
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
Lista completa dos DNS
- apim-poc-ws-02
- apim-poc-ws-02.developer
- apim-poc-ws-02.management
- apim-poc-ws-02.portal
- 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.