Private Endpoint と Private DNS Zone の自動連携を Bicep で利用する

azure
Published: 2022-07-04

はじめに

Private Endpoint を利用して通信を閉域化する際には、privatelink.[PaaS の FQDN] のゾーン内に存在する A レコードを Private Endpoint のプライベート IP アドレスに名前解決する必要があります。この名前解決を実現するための一つのオプションが Private DNS Zone です。Azure Portal から Private Endpoint を作ると、Private DNS Zone へのレコードの追加を自動で実施してくれます。

Private Endpoint 作成時の設定画面

本日のエントリは、この便利な Private DNS Zone への自動レコード追加を Bicep で利用する方法についてです

結論

Private Dns Zone Group というリソースを利用することで、Private DNS Zone に対して Private Endpoint に必要となる A レコードを自動で登録できます。

Microsoft.Network privateEndpoints/privateDnsZoneGroups

実装

まずは Private DNS Zone を作成します。サービスごとにprivatelink.[PaaS の FQDN] にすべきゾーンが決まっています。例えば Azure Monitor Agent と Microsoft Monitoring Agent の両方をサポートする Log Analytics の場合は次のゾーンを privatelink.[PaaS の FQDN] にする必要があります。

param zones array = [
  'monitor.azure.com'
  'oms.opinsights.azure.com'
  'ods.opinsights.azure.com'
  'agentsvc.azure-automation.net'
  'blob.${environment().suffixes.storage}' // blob.core.windows.net
]

まずは、これらのゾーンを Private DNS Zone として作成します。

resource privateDnsZoneForAmpls 'Microsoft.Network/privateDnsZones@2020-06-01' = [for zone in zones: {
  location: 'global'
  name: 'privatelink.${zone}'
  properties: {
  }
}]

そして、作成した DNS Private Zone の ID を Private Dns Zone Group の privateDnsZoneConfigs に設定します。

resource peDnsGroupForAmpls 'Microsoft.Network/privateEndpoints/privateDnsZoneGroups@2021-05-01' = {
  parent: peAmpls // 設定する Private Endpoint を Parenet で参照
  name: 'pvtEndpointDnsGroupForAmpls'
  properties: {
    privateDnsZoneConfigs: [
      {
        name: privateDnsZoneForAmpls[0].name
        properties: {
          privateDnsZoneId: privateDnsZoneForAmpls[0].id
        }
      }
      {
        name: privateDnsZoneForAmpls[1].name
        properties: {
          privateDnsZoneId: privateDnsZoneForAmpls[1].id
        }
      }
      {
        name: privateDnsZoneForAmpls[2].name
        properties: {
          privateDnsZoneId: privateDnsZoneForAmpls[2].id
        }
      }
      {
        name: privateDnsZoneForAmpls[3].name
        properties: {
          privateDnsZoneId: privateDnsZoneForAmpls[3].id
        }
      }
      {
        name: privateDnsZoneForAmpls[4].name
        properties: {
          privateDnsZoneId: privateDnsZoneForAmpls[4].id
        }
      }
    ]
  }
}

これだけで、各 Private DNS Zone に適切な A レコードが自動で登録されます。Bicep 内に Microsoft.Network privateDnsZones/A のリソースを作成するコードをたくさん書く必要はありません。

Private Endpoint に追加された Private DNS Zone の情報

Private DNS Zone に追加された A レコード

まとめ

本日のエントリでは Microsoft.Network privateEndpoints/privateDnsZoneGroups を利用して、Private Endpoint を利用する際に必要となる A レコードを自動で Private DNS Zone に登録する方法をまとめました。とても便利なので Private Endpoint と Private DNS Zone を連携させる際にはぜひお使いください。