Partager via


Repli sur Internet pour les zones de DNS privé Azure

Cet article explique comment définir la propriété ResolutionPolicy dans DNS privé Azure afin d’activer le repli sur la récursivité Internet lorsqu’une réponse NXDOMAIN faisant autorité est reçue pour une zone Private Link. NXDOMAIN est également appelé réponse négative. Lorsqu’une résolution DNS reçoit (ou a mis en cache) une réponse négative, elle n’envoie aucune réponse DNS au client DNS et la requête échoue.

Problème

Les requêtes DNS privé pour Azure Private Link et les scénarios d’isolation réseau entre différents locataires et groupes de ressources ont des chemins de résolution de noms uniques. Cela peut affecter la capacité à atteindre des ressources avec Private Link en dehors du contrôle d’un locataire. Il existe des solutions de contournement basées sur des machines virtuelles pour résoudre ce problème, mais elles augmentent la complexité opérationnelle et présentent des risques de sécurité et des coûts plus élevés.

Solution

La propriété ResolutionPolicy dans DNS privé Azure est une solution native complètement managée. Cette propriété active la récursivité publique via la flotte de programme de résolution récursive d’Azure lorsqu’une réponse NXDOMAIN faisant autorité est reçue pour une zone de liaison privée et que l’adresse privée ne parvient pas à être résolue. La stratégie de résolution est activée au niveau de la liaison de réseau virtuel avec le paramètre NxDomainRedirect. Dans le portail Azure, vous pouvez activer NxDomainRedirect en sélectionnant Activer le repli sur Internet dans la configuration de liaison de réseau virtuel.

Définition de stratégie

La propriété ResolutionPolicy est disponible dans l’API version 2024-06-01 ou ultérieure. Dans l’exemple suivant, resolutionPolicy est défini sur NxDomainRedirect au niveau de la ressource virtualNetworkLinks :

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

Ce paramètre est disponible dans le portail Azure dans : Zones de DNS privé>Liaisons de réseau virtuel>Activer le repli sur Internet.

Fonctionnement

Une réponse NXDOMAIN (RCODE3) signifie que le nom de domaine interrogé (Private Link) n’existe pas. Cette réponse négative empêche généralement les programmes de résolution de réessayer la requête jusqu’à ce que la réponse négative mise en cache expire.

Lorsque la stratégie de résolution NxDomainRedirect est activée sur une liaison de réseau virtuel, le programme de résolution récursive Azure retente la requête. Le programme de résolution utilise le QNAME du point de terminaison public comme étiquette de requête chaque fois qu’une réponse NXDOMAIN est reçue en provenance de PrivateEdge pour cette étendue de zone privée.

Cette modification est visible dans la résolution de chaîne 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

Limites

  • Cette stratégie est disponible uniquement pour les zones de DNS privé associées aux ressources Private Link.
  • Le paramètre ResolutionPolicy accepte uniquement Default ou NxDomainRedirect comme valeurs possibles.

Démonstration de la résolution de repli sur Internet

L’exemple suivant montre comment activer la résolution de repli sur Internet pour une zone de liaison privée (par exemple : privatelink.blob.core.windows.net).

Prérequis

  • Au moins deux groupes de ressources : chacun avec un réseau virtuel et un point de terminaison privé.
    • Les groupes de ressources peuvent se trouver dans différentes régions ou dans la même région.
    • Les comptes de stockage sont utilisés avec des points de terminaison privés dans cet exemple, mais d’autres services PaaS peuvent être liés.
  • Au moins une machine virtuelle dans l’un des réseaux virtuels est nécessaire pour exécuter des requêtes DNS.
    • Le réseau virtuel où réside la machine virtuelle doit être lié à l’une des zones de liaison privée.

Ce guide part du principe que vous avez approvisionné les ressources requises avant de continuer. Pour plus d’informations, consultez Utiliser des points de terminaison privés Azure.

Passer en revue les zones de DNS privé

  1. Dans la page d’accueil du portail Azure, recherchez et sélectionnez Zones de DNS privé.

  2. Passez en revue la liste des noms et vérifiez qu’au moins deux zones de DNS privé ont le même nom (privatelink.blob.core.windows.net). Voir l’exemple suivant :

    Capture d’écran de la liste de zones de DNS privé.

  3. Sélectionnez les zones de liaison privée, puis sélectionnez Recordsets.

  4. Vérifiez que les enregistrements des comptes de stockage sont présents dans chaque zone privée.

    Remarque

    Les comptes de stockage qui se trouvent dans le même groupe de ressources ont des enregistrements de ressources dans la même zone de DNS privé.
    Les comptes de stockage qui se trouvent dans des groupes de ressources différents ont des enregistrements de ressources dans des zones de DNS privé différentes (au nom identique).

Démonstration de l’échec de résolution DNS

  1. Notez le nom de domaine complet (FQDN) et l’adresse IP d’un compte de stockage dans la première zone de liaison privée affichée (par exemple : myeaststorageacct1.privatelink.blob.core.windows.net, 10.40.40.5).

  2. Notez également le nom de domaine complet et l’adresse IP d’une autre zone de DNS privé portant le même nom (par exemple : myeaststorageacct2.privatelink.blob.core.windows.net, 10.10.10.5).

    • Au moins l’une de ces zones de DNS privé doit avoir une liaison de réseau virtuel vers le réseau virtuel où vous pouvez exécuter des requêtes à partir d’une machine virtuelle.
  3. Ouvrez une invite de commandes sur votre machine virtuelle Azure et tentez de résoudre le nom de domaine complet des deux comptes de stockage. Voir l’exemple suivant :

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    
    
  4. Notez qu’un seul des deux comptes de stockage est résolu.

Configurer la résolution de repli sur Internet

  1. Sélectionnez à nouveau chacune des zones de DNS privé, sélectionnez Liaisons de réseau virtuel, puis sélectionnez l’icône de crayon « Modifier ». Voir l’exemple suivant :

    Capture d’écran de la modification de liaison de réseau virtuel.

  2. En bas de la page, sélectionnez Activer le repli sur Internet, puis Enregistrer.

    Capture d’écran montrant comment activer le repli.

  3. Répétez ces étapes pour chaque zone de liaison privée, et laissez s’écouler suffisamment de temps pour la mise à jour des liaisons de réseau virtuel.

  4. Essayez de résoudre à nouveau le nom de domaine complet des comptes de stockage. Voir l’exemple suivant :

    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
    

    Le compte de stockage qui n’était pas résolu est maintenant correctement résolu via Internet, ce qui vous permet d’atteindre cette ressource Private Link.

Vous pouvez utiliser l’Explorateur Azure Resource Graph ou Azure CLI pour interroger des liaisons de réseau virtuel prenant en charge le repli. Regardez les exemples suivants :

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

Capture d’écran d’une requête Resource Graph.

Entrée :

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

Sortie :

{
  "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
}

Pour afficher les valeurs de stratégie de résolution pour toutes les zones activées pour Private Link, vous pouvez utiliser les requêtes de l’Explorateur Azure Resource Graph et Azure CLI suivantes :

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

Entrée :

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

L’exemple de sortie Azure CLI suivant présente l’une des zones Private Link définie sur Default (repli désactivé) à des fins d’illustration.

Sortie :

{
  "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
}

Étapes suivantes