次の方法で共有


Azure プライベート DNS ゾーンのインターネットへのフォールバック

この記事では、Azure プライベート DNS で ResolutionPolicy プロパティを設定して、Private Link ゾーンに対して権限のある NXDOMAIN 応答を受信したときにインターネット再帰へのフォールバックを有効にする方法について説明します。 NXDOMAIN は、否定応答とも呼ばれます。 DNS リゾルバーは、否定応答を受信 (またはキャッシュ) すると、DNS クライアントに DNS 応答を送信せず、クエリは失敗します。

問題

Azure Private Link と、さまざまなテナントとリソース グループを対象とするネットワークの分離シナリオのプライベート DNS クエリには、固有の名前解決パスがあります。 これは、テナントの制御下にない、Private Link が有効になっているリソースにアクセスする機能に影響する可能性があります。 この問題を解決できる VM ベースの回避策はありますが、このようなソリューションは運用が複雑になり、セキュリティ リスクとコストの増加につながります。

解決策

Azure プライベート DNS の ResolutionPolicy プロパティは、フル マネージドのネイティブ ソリューションです。 このプロパティを使用すると、プライベート リンク ゾーンに対して権限のある NXDOMAIN 応答を受信し、プライベート アドレスの解決に失敗した場合に、Azure の再帰リゾルバー フリートを介したパブリック再帰を有効にすることができます。 解決ポリシーは、NxDomainRedirect 設定を使用して仮想ネットワーク リンク レベルで有効になります。 Azure portal で NxDomainRedirect を有効にするには、仮想ネットワーク リンク構成で [インターネットへのフォールバックを有効にする] を選択します。

ポリシー定義

ResolutionPolicy プロパティは、API バージョン 2024-06-01 以降で使用できます。 次の例では、resolutionPolicyvirtualNetworkLinks リソース レベルで NxDomainRedirect に設定されています。

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

この設定は、Azure portal の [プライベート DNS ゾーン]>[仮想ネットワーク リンク]>[インターネットへのフォールバックを有効にする] で使用できます。

しくみ

NXDOMAIN (RCODE3) 応答は、(Private Link で) 照会されたドメイン名が存在しないことを意味します。 通常、この否定応答を受け取ると、キャッシュされた否定応答の有効期限が切れるまで、リゾルバーはクエリを再試行できなくなります。

NxDomainRedirect 解決ポリシーが仮想ネットワーク リンクで有効になっている場合、Azure 再帰リゾルバーによってクエリが再試行されます。 リゾルバーは、プライベート ゾーン スコープの PrivateEdge から NXDOMAIN 応答を受信するたびに、パブリック エンドポイント QNAME をクエリ ラベルとして使用します。

この変更は、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

制限事項

  • このポリシーは、Private Link リソースに関連付けられたプライベート DNS ゾーンにのみ使用できます。
  • ResolutionPolicy パラメーターは、指定できる値として Default または NxDomainRedirect のみを受け入れます。

インターネット解決へのフォールバックを実演する

次の例は、プライベート リンク ゾーン (たとえば privatelink.blob.core.windows.net) のインターネット解決へのフォールバックを有効にする方法を示しています。

前提条件

  • 少なくとも 2 つのリソース グループがあり、それぞれに仮想ネットワークとプライベート エンドポイントがあります。
    • リソース グループは、異なるリージョン、または同じリージョンに配置することができます。
    • この例では、ストレージ アカウントがプライベート エンドポイントで使用されていますが、他の PaaS サービスをリンクすることもできます。
  • DNS クエリを実行するには、仮想ネットワークの 1 つに少なくとも 1 つの仮想マシンが必要です。
    • 仮想マシンが配置されている仮想ネットワークは、プライベート リンク ゾーンの 1 つにリンクされている必要があります。

このガイドは、作業を進める前に必要なリソースがプロビジョニング済みであることを前提としています。 詳細については、Azure プライベート エンドポイントの使用に関する記事を参照してください。

プライベート DNS ゾーンを確認する

  1. Azure portal の [ホーム] ページで [プライベート DNS ゾーン] を検索して選択します。

  2. 名前の一覧を確認し、少なくとも 2 つのプライベート DNS ゾーンが同じ名前 (privatelink.blob.core.windows.net) であることを確認します。 次の例を参照してください。

    プライベート DNS ゾーンの一覧のスクリーンショット。

  3. プライベート リンク ゾーンを選択し、[レコードセット] を選択します。

  4. ストレージ アカウントのレコードが各プライベート ゾーンに存在することを確認します。

    メモ

    同じリソース グループ内のストレージ アカウントは、同じプライベート DNS ゾーンにリソース レコードがあります。
    異なるリソース グループにあるストレージ アカウントは、異なる (名前は同じ) プライベート DNS ゾーンにリソース レコードを持ちます。

DNS 解決エラーを実演する

  1. 表示されている最初のプライベート リンク ゾーンにあるストレージ アカウントの完全修飾ドメイン名 (FQDN) と IP アドレスを書き留めます (たとえば myeaststorageacct1.privatelink.blob.core.windows.net10.40.40.5)。

  2. また、同じ名前の別のプライベート DNS ゾーンの FQDN と IP アドレスを書き留めます (たとえば myeaststorageacct2.privatelink.blob.core.windows.net10.10.10.5)。

    • このようなプライベート DNS ゾーンの少なくとも 1 つには、仮想マシンからクエリを実行できる VNet への仮想ネットワーク リンクが必要です。
  3. Azure 仮想マシン上でコマンド プロンプトを開き、両方のストレージ アカウントの FQDN の解決を試みます。 次の例を参照してください。

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    
    
  4. 1 つのストレージ アカウントは解決され、もう 1 つのストレージ アカウントは解決されないことに注目してください。

インターネット解決へのフォールバックを構成する

  1. 各プライベート DNS ゾーンをもう一度選択し、[仮想ネットワーク リンク] を選択して、鉛筆の [編集] アイコンを選択します。 次の例を参照してください。

    仮想ネットワーク リンクの編集のスクリーンショット。

  2. ページの下部にある [インターネットへのフォールバックを有効にする] を選択し、[保存] を選択します。

    フォールバックを有効にする方法のスクリーンショット。

  3. プライベート リンク ゾーンごとにこれらの手順を繰り返し、仮想ネットワーク リンクが更新されるまで待ちます。

  4. ストレージ アカウントの FQDN の解決を再度試みます。 次の例を参照してください。

    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
    

    解決されなかったストレージ アカウントはインターネット経由で正常に解決され、この Private Link が有効になっているリソースにアクセスできるようになりました。

Azure Resource Graph エクスプローラーまたは Azure CLI を使用して、フォールバックが有効になっている仮想ネットワーク リンクに対してクエリを実行できます。 次の例を参照してください。

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

Resource Graph クエリのスクリーンショット。

入力:

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

出力:

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

プライベート リンクが有効になっているすべてのゾーンについて解決ポリシー値を表示するには、次の Azure Resource Graph エクスプローラーと Azure CLI クエリを使用できます。

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

入力:

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

次の Azure CLI の出力例では、この表示方法を示すために、プライベート リンクが有効になっているゾーンの 1 つが Default (フォールバックは無効) に設定されています。

出力:

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

次のステップ

  • DNS ゾーンでレコード セットとレコードを管理する方法についてはこちらをご覧ください。