Laboratório de Troubleshooting: Configure private endpoints for Azure PaaS
Cenários de Diagnóstico
Cenário 1 — Causa Raiz
Uma equipe de desenvolvimento reporta que uma aplicação hospedada em uma VM dentro de vnet-app (região East US) não consegue conectar a um Azure Storage Account após a criação de um private endpoint. O administrador verifica o seguinte:
- O private endpoint foi criado na subnet
snet-pedentro devnet-app. - A Private DNS Zone
privatelink.blob.core.windows.netexiste no ambiente. - A VM consegue pingar outros recursos na mesma VNet normalmente.
- O Storage Account tem o acesso público ainda habilitado.
- A aplicação reporta timeout ao tentar acessar
storprod001.blob.core.windows.net.
O administrador executa o seguinte teste a partir da VM:
nslookup storprod001.blob.core.windows.net
Saída:
Server: 168.63.129.16
Address: 168.63.129.16#53
Non-authoritative answer:
Name: storprod001.blob.core.windows.net
Address: 20.150.47.131
A equipe menciona que o Storage Account foi criado há seis meses e nunca apresentou problemas antes da tentativa de migração para acesso privado. O private endpoint foi criado ontem à noite.
Qual é a causa raiz do problema?
A. O NSG aplicado à subnet snet-pe está bloqueando o tráfego de saída da VM para a porta 443.
B. A Private DNS Zone não está vinculada à vnet-app, portanto o DNS continua resolvendo o FQDN para o IP público do Storage Account.
C. O acesso público do Storage Account precisa ser desabilitado antes que o private endpoint comece a funcionar.
D. O private endpoint foi criado na subnet errada; ele deveria estar na subnet da VM e não em snet-pe.
Cenário 2 — Decisão de Ação
A causa do problema já foi identificada: um Azure Key Vault de produção tem um private endpoint ativo, mas a Private DNS Zone privatelink.vaultcore.azure.net foi acidentalmente excluída por um membro da equipe. Como consequência, todas as aplicações que acessam o Key Vault via nome privado estão falhando com erros de conexão recusada, impactando um sistema de pagamentos em produção.
O administrador tem permissões de Contributor no Resource Group onde a DNS Zone existia, mas não possui permissões de Private DNS Zone Contributor no nível de subscription. O time de segurança exige que qualquer alteração em zonas DNS privadas seja registrada via ticket de mudança, processo que leva 48 horas para aprovação.
O sistema de pagamentos tem um SLA de 99,9% e cada minuto de indisponibilidade gera penalidade contratual. O engenheiro sênior responsável pelo Key Vault está disponível e possui as permissões necessárias.
Qual é a ação correta a tomar neste momento?
A. Recriar imediatamente a Private DNS Zone e vinculá-la à VNet usando as próprias permissões de Contributor, sem aguardar aprovação, dado o impacto em produção.
B. Abrir o ticket de mudança, documentar o impacto e aguardar as 48 horas de aprovação para manter a conformidade com o processo de segurança.
C. Contatar imediatamente o engenheiro sênior para que ele recrie a Private DNS Zone com as permissões corretas, enquanto o ticket de mudança é aberto em paralelo para conformidade retroativa.
D. Reverter temporariamente o Key Vault para acesso público até que a DNS Zone seja recriada dentro do processo formal de mudança.
Cenário 3 — Causa Raiz
Um administrador configura um private endpoint para um Azure SQL Database em snet-data dentro de vnet-hub. A Private DNS Zone privatelink.database.windows.net foi criada e vinculada a vnet-hub. O registro A foi criado automaticamente pelo Azure.
Dois dias depois, a equipe de dados reporta que consultas ao banco de dados a partir de VMs em vnet-spoke (pareada com vnet-hub) funcionam, mas uma aplicação rodando em um Azure Kubernetes Service (AKS) no mesmo vnet-spoke falha consistentemente com o seguinte erro:
dial tcp: lookup sql-prod.database.windows.net on 10.0.0.10:53: no such host
O administrador verifica:
- O peering entre
vnet-hubevnet-spokeestá ativo e bidirecional. - VMs em
vnet-spokeresolvemsql-prod.database.windows.netcorretamente para10.1.2.5(IP privado). - O cluster AKS usa Azure CNI e os pods recebem IPs diretamente da subnet
snet-aksemvnet-spoke. - O cluster AKS foi criado com a opção de DNS padrão do Kubernetes, que usa CoreDNS.
- A Private DNS Zone
privatelink.database.windows.netestá vinculada avnet-hube avnet-spoke.
Qual é a causa raiz do erro de resolução DNS nos pods do AKS?
A. O peering entre vnet-hub e vnet-spoke não propaga registros de Private DNS Zones, por isso os pods não conseguem resolver o nome.
B. O CoreDNS do AKS não está configurado para encaminhar queries do domínio privatelink.database.windows.net ao Azure DNS (168.63.129.16), então as queries não chegam à Private DNS Zone.
C. A Private DNS Zone deveria estar vinculada à subnet snet-aks especificamente, e não apenas à VNet.
D. O erro indica que o registro A na Private DNS Zone foi excluído automaticamente após 48 horas, comportamento padrão do Azure para registros criados por private endpoints.
Cenário 4 — Sequência de Diagnóstico
Um administrador recebe o seguinte alerta: uma função Azure (Azure Function) com VNet Integration habilitada não consegue acessar um Azure Service Bus que tem um private endpoint configurado. A função retorna SocketException: Connection refused ao tentar publicar mensagens.
Os passos de investigação disponíveis estão fora de ordem:
- Verificar se a Private DNS Zone
privatelink.servicebus.windows.netestá vinculada à VNet integrada pela Azure Function. - Confirmar se o acesso público do Service Bus foi desabilitado e se a regra de firewall permite o IP da Function.
- Testar a resolução DNS do FQDN do Service Bus a partir do ambiente de execução da Function usando
nslookupouResolve-DnsName. - Verificar se a VNet Integration da Azure Function está configurada e apontando para a VNet correta.
- Confirmar que o private endpoint do Service Bus foi criado na subnet correta e que o IP privado está alocado.
Qual é a sequência correta de diagnóstico?
A. 5 -> 1 -> 4 -> 3 -> 2
B. 4 -> 5 -> 1 -> 3 -> 2
C. 3 -> 1 -> 4 -> 5 -> 2
D. 2 -> 4 -> 1 -> 5 -> 3
Gabarito e Explicações
Gabarito — Cenário 1
Resposta: B
A pista definitiva está na saída do nslookup: o FQDN está resolvendo para 20.150.47.131, que é um IP público. Se a Private DNS Zone estivesse vinculada à vnet-app, o Azure DNS (168.63.129.16) retornaria o IP privado do private endpoint, tipicamente na faixa de endereços da subnet. O fato de o resolver ser o próprio 168.63.129.16 mas retornar um IP público confirma que ele consultou a DNS pública porque não encontrou a zona privada associada à VNet.
A informação irrelevante no enunciado é a idade do Storage Account ("criado há seis meses"). Ela não tem nenhuma relação com o comportamento do private endpoint ou da DNS Zone.
A alternativa C representa o equívoco mais perigoso: desabilitar o acesso público não é pré-requisito para que o private endpoint funcione. Ele pode coexistir com o acesso público durante uma migração. Agir com base nessa alternativa quebraria o acesso público sem resolver o problema de DNS.
A alternativa D é tecnicamente incorreta: o private endpoint deve estar em uma subnet da VNet, mas não precisa ser a mesma subnet da VM. Qualquer subnet dentro da mesma VNet (ou VNet com acesso via peering) é válida.
Gabarito — Cenário 2
Resposta: C
O cenário apresenta duas restrições que tornam as outras alternativas inviáveis: o administrador não tem permissão para recriar a DNS Zone (elimina A), e o processo formal exige 48 horas (elimina B como ação imediata dada a penalidade contratual em curso). A alternativa D é tecnicamente válida como mitigação emergencial, mas expõe o Key Vault de produção publicamente, violando o modelo de segurança e criando um risco maior do que o problema original.
A alternativa C é a única que respeita todas as restrições simultaneamente: resolve o problema com urgência usando quem tem permissão, mantém o registro de conformidade por meio do ticket paralelo, e não expõe o recurso publicamente.
O raciocínio correto aqui é identificar que "ação correta" não significa "ação tecnicamente possível", mas "ação que atende ao conjunto de restrições de segurança, permissão e SLA ao mesmo tempo".
Gabarito — Cenário 3
Resposta: B
A pista crítica é que VMs na mesma vnet-spoke resolvem o nome corretamente, mas os pods do AKS não. Isso elimina imediatamente a alternativa A: se o peering não propagasse a DNS Zone, as VMs também falhariam. O problema é específico ao ambiente de execução dos pods.
O CoreDNS, que é o resolvedor DNS padrão do Kubernetes, gerencia as queries DNS dos pods. Por padrão, ele não encaminha automaticamente domínios do Azure para o Azure DNS. É necessário configurar um ConfigMap do CoreDNS com uma regra de forward para os domínios privatelink.* apontando para 168.63.129.16. Sem isso, as queries saem pelo CoreDNS, que não as encontra e retorna no such host.
A alternativa C é tecnicamente incorreta: Private DNS Zones são vinculadas a VNets inteiras, não a subnets individuais. A alternativa D é falsa: registros A criados por private endpoints são permanentes enquanto o endpoint existir.
A informação potencialmente distratora é o detalhe sobre Azure CNI: ele é relevante para entender que os pods têm IPs da VNet, mas não é a causa do problema de DNS. O Azure CNI resolve conectividade de rede, não resolução de nomes.
Gabarito — Cenário 4
Resposta: B
A sequência correta segue a lógica de diagnóstico progressivo: verificar primeiro se a integração de rede existe (passo 4), depois confirmar se o private endpoint está corretamente provisionado com IP alocado (passo 5), em seguida validar se a resolução DNS está apontando para o IP privado (passo 1), então testar a resolução efetiva do FQDN no ambiente de execução da Function (passo 3), e por último verificar configurações de firewall e acesso público (passo 2).
A sequência B (4 -> 5 -> 1 -> 3 -> 2) respeita a pirâmide diagnóstica: confirmar infraestrutura antes de testar comportamento, e testar comportamento antes de ajustar políticas. Começar pelo passo 3 (alternativa C) ou pelo passo 2 (alternativa D) inverte a lógica: não adianta testar DNS antes de confirmar que a VNet Integration e o endpoint estão funcionando, e não adianta revisar firewall antes de confirmar que o DNS resolve para o IP correto.
O distrator mais perigoso é a alternativa C, que começa pelo teste de DNS. Ele parece razoável, mas sem confirmar que a VNet Integration está ativa (passo 4), o resultado do nslookup pode ser enganoso, pois a Function poderia estar resolvendo DNS fora do contexto da VNet.
Árvore de Troubleshooting: Configure private endpoints for Azure PaaS
Legenda:
| Cor | Significado |
|---|---|
| Azul escuro | Sintoma inicial (ponto de entrada) |
| Azul | Pergunta de diagnóstico |
| Vermelho | Causa identificada ou ação corretiva |
| Verde | Resolução confirmada |
| Laranja | Verificação intermediária antes de concluir |
Para usar esta árvore diante de um problema real, comece pelo nó raiz (sintoma observado) e responda cada pergunta com base no que você pode verificar diretamente no ambiente. O primeiro passo sempre é testar a resolução DNS do FQDN do recurso: se o resultado for um IP público, o problema está na camada de DNS. Se for um IP privado mas o acesso ainda falhar, o problema está na camada de rede ou no firewall do recurso. Siga o caminho correspondente até chegar a uma causa identificada antes de executar qualquer ação corretiva.