Um banco de dados que funciona antes de a VPN conectar e falha depois raramente é um problema de credenciais. Firewalls de nuvem comparam endereços de origem, e um túnel completo substitui o que estavam comparando. A diferença entre o que você acha que o seu portátil envia e o que o servidor recebe é o bug inteiro, e é mensurável em um passo.

No que o endereço de origem se torna

Num túnel completo, cada pacote sai pela gateway VPN, então o servidor vê o endereço de saída da gateway em vez da sua conexão doméstica. Se houver um proxy de encaminhamento no caminho, é o endereço dele que chega. Ambos são origens legítimas, e nenhum deles é o endereço da sua regra original.

As regras de firewall do Azure SQL nos níveis de servidor e de banco de dados comparam o endereço do cliente que chega ao servidor lógico, que depois de um túnel completo é o endereço de saída. Um grupo de segurança da AWS que permite um único endereço comporta-se da mesma forma. O pacote é descartado antes da autenticação, então o erro que você recebe parece uma falha de rede em vez de um problema de permissões. É exatamente por isso que as pessoas começam a redefinir senhas.

Onde a lista de permissões é decidida

Leia a regra que corresponde ao caminho que falha, não a regra que você lembra de ter criado. Anote o escopo, a porta, o protocolo e se ela é avaliada antes de qualquer verificação de identidade.

Depois decida qual camada possui legitimamente a decisão. Uma regra de endereço responde de onde vem o tráfego. Um endpoint privado responde se o serviço é acessível por um caminho privado. Uma exceção de túnel dividido responde quais destinos contornam o túnel. Não são intercambiáveis, e cada uma falha de forma diferente quando o túnel muda.

Três reparos, três camadas

Cada opção abaixo corrige o fluxo por um motivo diferente, e escolher a errada produz uma conexão que funciona até a próxima mudança de gateway.

RepairLayer it changesWhat it does not fix
Add the egress address to the ruleSource address matchingNothing about routing, and it breaks when the egress moves
Use a private endpointWhether the service is reached privatelyA client that still resolves the public name
Add a split-tunnel exceptionWhich flows bypass the tunnelAn expired credential or a wrong password

Adicionar o endereço de saída é a menor mudança e a mais frágil, porque uma nova gateway ou uma região diferente a invalidam em silêncio. Documente o endereço ao lado da definição do túnel para que os dois se movam juntos. Uma faixa ampla temporária é um diagnóstico, não um reparo; deixá-la no lugar é como serviços internos acabam expostos.

Por que uma plataforma gerenciada não pode entrar no túnel

Plataformas de aplicação como Heroku, AppHarbor ou CloudBees executam o seu código num ambiente sem dispositivo tun ou tap e sem privilégios para criar um. O modelo de entrada delas é HTTP e não um socket de escuta arbitrário. Um buildpack que inclui um binário de VPN continua sem ter onde colocar a interface. Os padrões viáveis são um endereço de saída estático que o banco de dados possa permitir, um produto de conexão privada oferecido pela plataforma ou um proxy numa DMZ alcançado por HTTPS.

Esse proxy é um caminho de acesso com a sua própria autenticação e registo. Ele não torna a plataforma membro da sua VPN, e descrevê-la assim produz regras que ninguém consegue auditar.

Verifique a partir do cliente que falhou

Reconecte e repita o caminho exato do cliente. Verifique o endereço de origem que o serviço registra, a rota que o cliente escolhe para o nome do banco de dados e o resultado da consulta real, nessa ordem. Um teste a partir da gateway prova que a gateway funciona, o que nunca esteve em dúvida. Se a conexão agora autentica e a consulta ainda falha, o problema restante é a permissão no banco de dados.

Reveja estas regras sempre que o túnel mudar. Uma gateway substituída ou uma nova faixa de saída quebram o caminho sem qualquer alteração na configuração da aplicação.

Artigos relacionados