Partilhar via


Recurso à Internet para zonas de DNS Privado do Azure

Este artigo mostra como definir a propriedade ResolutionPolicy no DNS Privado do Azure para ativar o recuo para a recursão da Internet quando uma resposta autoritativa NXDOMAIN é recebida para uma zona de Link Privado. NXDOMAIN é também conhecido como um tipo de resposta negativa. Quando um resolvedor de DNS recebe (ou armazenou em cache) uma resposta negativa, ele não envia nenhuma resposta DNS para o cliente DNS e a consulta falha.

Problema

As consultas DNS privadas para o Azure Private Link e cenários de isolamento de rede em diferentes locatários e grupos de recursos têm caminhos de resolução de nomes exclusivos. Isso pode afetar a capacidade de acessar recursos habilitados para Link Privado fora do controle de um locatário. Existem soluções alternativas baseadas em VM para resolver esse problema, mas essas soluções aumentam a complexidade operacional e estão associadas a riscos de segurança e custos mais altos.

Solução

A propriedade ResolutionPolicy no DNS Privado do Azure é uma solução nativa totalmente gerenciada. Essa propriedade permite a recursão pública por meio da frota de resolvedores recursivos do Azure quando uma resposta autoritativa do NXDOMAIN é recebida para uma zona de link privado e o endereço privado não é resolvido. A política de resolução está habilitada ao nível da ligação da rede virtual com a configuração de NxDomainRedirect. No portal do Azure, o NxDomainRedirect é habilitado selecionando Habilitar fallback para a Internet na configuração de link de rede virtual.

Definição de política

A propriedade ResolutionPolicy está disponível na API versão 2024-06-01 ou superior. No exemplo a seguir, resolutionPolicy é definido como NxDomainRedirect no nível de recurso virtualNetworkLinks :

{
  "id": "'string'",
  "name": '"string'",
  "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
  "location": "global",
  "properties": {
    "provisioningState": "Succeeded",
    "registrationEnabled": bool,
    "resolutionPolicy": "NxDomainRedirect",
    "virtualNetwork": {
      "id": "'string'"
    }
  }
}

Essa configuração está disponível no portal do Azure em: Zonas de DNS privadas>Ligações de Redes Virtuais>Ativar fallback para a internet.

Como funciona

Uma resposta NXDOMAIN (RCODE3) significa que o nome de domínio consultado (Private Link) não existe. Essa resposta negativa normalmente impede que os resolvedores tentem novamente a consulta até que a resposta negativa armazenada em cache expire.

Quando a política de resolução NxDomainRedirect está habilitada em um link de rede virtual, o resolvedor recursivo do Azure tenta novamente a consulta. O resolver usa o endpoint público QNAME como a etiqueta de consulta cada vez que uma resposta NXDOMAIN é recebida do PrivateEdge para essa zona privada.

Esta alteração pode ser vista na resolução da cadeia CNAME.

C:\>nslookup remoteprivateendpoint.blob.core.windows.net
Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
Name:    blob.mwh20prdstr02e.store.core.windows.net
Address:  203.0.113.33
Aliases:  remoteprivateendpoint.blob.core.windows.net
          remoteprivateendpoint.privatelink.blob.core.windows.net

Limitações

  • Esta política só está disponível para zonas DNS privadas associadas a recursos de Link privado.
  • O parâmetro ResolutionPolicy só aceita Default ou NxDomainRedirect como valores possíveis.

Demonstrar recurso alternativo para a resolução na Internet

O exemplo a seguir mostra como habilitar o fallback para resolução da Internet para uma zona de link privado (por exemplo: privatelink.blob.core.windows.net).

Pré-requisitos

  • Pelo menos dois grupos de recursos: cada um com uma rede virtual e um ponto de extremidade privado.
    • Os grupos de recursos podem estar em regiões diferentes ou na mesma região.
    • As contas de armazenamento são usadas com pontos de extremidade privados neste exemplo, mas outros serviços PaaS podem ser vinculados.
  • Pelo menos uma máquina virtual em uma das redes virtuais é necessária para executar consultas DNS.
    • A rede virtual onde a máquina virtual reside deve estar vinculada a uma das zonas de link privado.

Este guia pressupõe que você tenha provisionado os recursos de pré-requisito antes de prosseguir. Para obter mais informações, consulte Usar Pontos de Extremidade Privados do Azure.

Rever zonas DNS privadas

  1. Na Home page do portal do Azure, procure e selecione zonas DNS privadas.

  2. Reveja a lista de nomes e verifique se pelo menos duas zonas DNS privadas têm o mesmo nome (privatelink.blob.core.windows.net). Veja o seguinte exemplo:

    Captura de ecrã da lista de zonas DNS privadas.

  3. Selecione as zonas de link privado e, em seguida, selecione Conjuntos de registros.

  4. Verifique se os registros para contas de armazenamento estão presentes em cada zona privada.

    Nota

    As contas de armazenamento que estão no mesmo grupo de recursos têm registros de recursos na mesma zona DNS privada.
    As contas de armazenamento que estão em grupos de recursos diferentes têm registros de recursos em zonas DNS privadas diferentes (com nome idêntico).

Demonstrar falha de resolução de DNS

  1. Anote o nome de domínio totalmente qualificado (FQDN) e o endereço IP de uma conta de armazenamento na primeira zona de link privado mostrada (por exemplo: myeaststorageacct1.privatelink.blob.core.windows.net, 10.40.40.5).

  2. Anote também o FQDN e o endereço IP de uma zona DNS privada diferente com o mesmo nome (por exemplo: myeaststorageacct2.privatelink.blob.core.windows.net, 10.10.10.5).

    • Pelo menos uma dessas zonas DNS privado deve ter um link de rede virtual para a rede virtual onde você pode executar consultas de uma máquina virtual.
  3. Abra um prompt de comando em sua máquina virtual do Azure e tente resolver o FQDN de ambas as contas de armazenamento. Veja o seguinte exemplo:

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    
    
  4. Observe que uma conta de armazenamento é resolvida com sucesso e a outra conta de armazenamento não se resolve.

Configurar alternativa para resolução da internet

  1. Selecione cada uma das zonas DNS privadas novamente, selecione Links de Rede Virtual e, em seguida, selecione o ícone de lápis "editar". Veja o seguinte exemplo:

    Captura de tela da edição do link de rede virtual.

  2. Na parte inferior da página, selecione Ativar fallback para a Internet e, em seguida, selecione Guardar.

    Captura de ecrã de como ativar o fallback.

  3. Repita essas etapas para cada zona de link privado e dê tempo para que os links de rede virtual sejam atualizados.

  4. Tente resolver o FQDN das contas de armazenamento novamente. Veja o seguinte exemplo:

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    blob.bl5prdstr19c.store.core.windows.net.
    203.0.113.161
    

    A conta de armazenamento que não estava resolvendo agora está sendo resolvida com sucesso via internet, permitindo que você aceda a este recurso habilitado para Ligação Privada.

Você pode usar o Azure Resource Graph Explorer ou a CLI do Azure para consultar links de rede virtual habilitados para fallback. Veja os exemplos seguintes:

resources
| where tostring(properties.resolutionPolicy) contains 'NxDomainRedirect'
| extend privateDnsZone = extract("/privateDnsZones/([^/]+)/", 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy

Captura de ecrã de uma consulta de gráfico de recursos.

Entrada:

az graph query -q "resources
| where tostring(properties.resolutionPolicy) contains 'NxDomainRedirect'
| extend privateDnsZone = extract('/privateDnsZones/([^/]+)/', 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy"

Saída:

{
  "count": 4,
  "data": [
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myresourcegroup"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "mywestrg2"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "mywestrg"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myeastrg"
    }
  ],
  "skip_token": null,
  "total_records": 4
}

Para exibir os valores da política de resolução para todas as zonas habilitadas para link privado, você pode usar as seguintes consultas do Azure Resource Graph Explorer e da CLI do Azure:

resources
| where tostring(properties) contains 'resolutionPolicy'
| extend privateDnsZone = extract("/privateDnsZones/([^/]+)/", 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy

Entrada:

az graph query -q "resources
| where tostring(properties) contains 'resolutionPolicy'
| extend privateDnsZone = extract('/privateDnsZones/([^/]+)/', 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy"

A saída de exemplo da CLI do Azure a seguir tem uma das zonas habilitadas para link privado definida como Padrão (fallback desabilitado) para demonstrar como isso é exibido.

Saída:

{
  "count": 4,
  "data": [
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "Default",
      "resourceGroup": "mywestrg"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myresourcegroup"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "mywestrg2"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myeastrg"
    }
  ],
  "skip_token": null,
  "total_records": 4
}

Próximos passos