JavaScriptを有効にしてください

Private DNS Zone Group を知り隊

 ·   5 分で読めます  ·   Kento

Azure の Private Endpoint を利用していると Private DNS Zone Group という名前に出会うことがあります。

image01
Private Endpoint:

この機能は、Azure Private Endpoint を使用する際に、DNS レコードの管理を簡単に管理するための便利な機能です。
本記事では、Private DNS Zone Group の概要と設定手順について解説します。

想定される読者

  • Azure を利用しているが、Private DNS Zone Group について詳しく知らない方
  • Private Endpoint を使用している、または使用を検討している方

Private DNS Zone Group とは

Private Endpoint や Private DNS Zone を知っていても 「Private DNS Zone Group は聞いたことがない」という方も多いんじゃないでしょうか?
公開情報に少しだけ書かれています
一部抜粋します

プライベート エンドポイントをプライベート DNS ゾーンと統合することを選んだ場合は、プライベート DNS ゾーン グループも作成されます。 DNS ゾーン グループでは、プライベート DNS ゾーンとプライベート エンドポイントの間に強い関連付けがあります。 これは、プライベート エンドポイントが更新されたときに、プライベート DNS ゾーン レコードを管理するのに役立ちます。 たとえば、リージョンを追加または削除すると、プライベート DNS ゾーンは正しいレコード数で自動的に更新されます。

Azure プライベート エンドポイントの DNS 統合 | Microsoft Learn

また、Bicep のサンプルを見るとPrivate Endpoint の子リソースであることがわかります
一部抜粋します

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
resource pvtEndpointDnsGroup 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2021-05-01' = {
  name: pvtEndpointDnsGroupName
  properties: {
    privateDnsZoneConfigs: [
      {
        name: 'config1'
        properties: {
          privateDnsZoneId: privateDnsZone.id
        }
      }
    ]
  }
  dependsOn: [
    privateEndpoint
  ]
}

クイック スタート: プライベート エンドポイントを作成する - Bicep | Microsoft Learn

これを踏まえると以下の関係性があることがわかります
まず、Private Endpoint を何かの PaaS に生やします

---
title: PaaS サービスと Private Endpoint の構成
---
graph TB;

%%グループとサービス
subgraph Vnet["Vnet"]
    PE1("Private Endpoint")
end

PaaS1{{"PaaS"}}


%%サービス同士の関係
PE1 <--> PaaS1


%%サブグラフのスタイル
classDef VnetG fill:none,color:#0a0,stroke:#0a0
class Vnet VnetG

%%ノードのスタイル
classDef SCP fill:#e83,color:#fff,stroke:none
class PE1 SCP

classDef PaaSG fill:#46d,color:#fff,stroke:#fff
class PaaS1 PaaSG

名前解決のために、Private DNS Zone と A レコードを用意します

---
title: Private DNS Zone の追加
---
graph TB;

%%グループとサービス
subgraph Vnet["Vnet"]
    PE1("Private Endpoint")
end

PaaS1{{"PaaS"}}
subgraph DNS["Private DNS Zone"]
  A["A レコード"]
end

%%サービス同士の関係
PE1 <--> PaaS1
DNS --> Vnet


%%サブグラフのスタイル
classDef VnetG fill:none,color:#0a0,stroke:#0a0
class Vnet,DNS,A VnetG

%%ノードのスタイル
classDef SCP fill:#e83,color:#fff,stroke:none
class PE1 SCP

classDef PaaSG fill:#46d,color:#fff,stroke:#fff
class PaaS1 PaaSG

このとき、Private Endpoint を削除しても A レコードがゴミとして残ってしまうことになります

---
title: Private Endpoint の削除
---
graph TB;

%%グループとサービス
subgraph Vnet["Vnet"]
    PE1("`Private Endpoint`")
end

PaaS1{{"PaaS"}}
subgraph DNS["Private DNS Zone"]
  A["A レコード"]
end

%%サービス同士の関係
PE1 <--> PaaS1
DNS --> Vnet


%%サブグラフのスタイル
classDef VnetG fill:none,color:#0a0,stroke:#0a0
class Vnet,DNS,A VnetG

classDef PaaSG fill:#46d,color:#fff,stroke:#fff
class PaaS1 PaaSG

%% 点線のスタイル
classDef dashed stroke-dasharray:4,4
class PE1 dashed

%% A レコードの強調スタイル
classDef highlight fill:#aaffaa,color:#004400,stroke:#006400,stroke-width:2px
class A highlight

そこで登場するのが Private DNS Zone グループです
これは Private Endpoint と Private DNS Zone の間に位置して管理してくれます

---
title: Private DNS Zone Group の追加
---
graph TB;

%%グループとサービス
subgraph Vnet["Vnet"]
  subgraph PE1["Private Endpoint"]
    DNSG("Private DNS Zone Group")
  end
end

PaaS1{{"PaaS"}}
subgraph DNS["Private DNS Zone"]
  A["A レコード"]
end


%%サービス同士の関係
PE1 <--> PaaS1
DNS --> Vnet
DNSG -- 関連付け --> DNS


%%サブグラフのスタイル
classDef VnetG fill:none,color:#0a0,stroke:#0a0
class Vnet,DNS,A VnetG

%%ノードのスタイル
classDef SCP fill:#e83,color:#fff,stroke:none
class PE1 SCP

classDef PaaSG fill:#46d,color:#fff,stroke:#fff
class PaaS1 PaaSG

これにより、Private Endpoint が削除されると A レコードも自動的に削除されます

---
title: Private DNS Zone Group の追加
---
graph TB;

%%グループとサービス
subgraph Vnet["Vnet"]
  subgraph PE1["Private Endpoint"]
    DNSG("Private DNS Zone Group")
  end
end

PaaS1{{"PaaS"}}
subgraph DNS["Private DNS Zone"]
  A["A レコード"]
end


%%サービス同士の関係
PE1 <--> PaaS1
DNS --> Vnet
DNSG -- 関連付け --> DNS


%%サブグラフのスタイル
classDef VnetG fill:none,color:#0a0,stroke:#0a0
class Vnet,DNS,A VnetG

%%ノードのスタイル

classDef PaaSG fill:#46d,color:#fff,stroke:#fff
class PaaS1 PaaSG

%% 点線のスタイル
classDef dashed stroke-dasharray:4,4
class PE1,A,DNSG dashed

今回は削除を例に出しましたが、なにか更新があった場合も同様に A レコードの更新を行ってくれます
これにより、DNS レコードの管理が簡素化され、運用負荷が軽減されます。

ざっくり手順

  1. Azure Portal で Private Endpoint を作成
  2. Private Endpoint の削除
  3. アクティビティ ログの確認

1. Azure Portal で Private Endpoint を作成

今回は App Service を例にします
作成が完了した Private Endpoint にアクセスし、[DNS の構成] を見てみると DNS ゾーン グループが表示されています

image02
Private Endpoint の DNS ゾーン グループ:

Private DNS Zone を見ると、A レコードが作成されていることがわかります

image02
Private DNS Zone の A レコード:

今回のように Azure Portal で Private Endpoint を作成した場合、DNS Zone Group の名前は自動で [default] という名前が付与されます
何かしらの理由で default 以外の名前を付けたい場合は Bicep などを利用することで可能です

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// private endpoint
resource privateEndpoint 'Microsoft.Network/privateEndpoints@2024-05-01' = {
  name: 'bicep-privateendpoint'
  location: location
  properties: {
    subnet: {
      id: virtualNetwork.properties.subnets[0].id
    }
    privateLinkServiceConnections: [
      {
        name: 'pe-webapp'
        properties: {
          privateLinkServiceId: webApplication.id
          groupIds: [
            'sites'
          ]
        }
      }
    ]
  }
}

// private dns zone group
resource pvtEndpointDnsGroup 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2021-05-01' = {
  name: 'privateDnsZoneGroup-hoge' // ここで好きな名前を指定
  parent: privateEndpoint
  properties: {
    privateDnsZoneConfigs: [
      {
        name: 'config1'
        properties: {
          privateDnsZoneId: privateDnsZone.id
        }
      }
    ]
  }
}

2. Private Endpoint の削除

では Private DNS Zone Group の動作を確認するために、Private Endpoint を削除してみます

image03
Private Endpoint の削除:

すると Private DNS Zone の A レコードも削除されていることがわかります

image04
Private DNS Zone の A レコードの削除:

3. アクティビティ ログの確認

Private DNS Zone のアクティビティ ログを確認すると A レコードの削除が実行されたことがわかります
このときに、[イベント開始者] が Azure Traffic Manager and DNS になっています

image05
アクティビティ ログの確認:

公開情報にも記載がありますが、Private DNS Zone Group でレコードの削除や更新が行われたときは、この Azure Traffic Manager and DNS というイベント開始者が表示されます

image06
アクティビティ ログの確認:

まとめ

Private DNS Zone Group について見てみました
縁の下の力持ち的な存在ですが、Private Endpoint を利用する際には非常に便利な機能です

参考

共有

Kento
著者
Kento
2020年に新卒で IT 企業に入社. インフラエンジニア(主にクラウド)として活動中