プライベート DNS ゾーンのインターネットへのフォールバック
はじめに
先日、Azure プライベート DNS ゾーンのインターネットへのフォールバックという機能がプレビューでリリースされました。ドキュメントを読むだけだと分かりづらいのですが、こちらの機能を使用するとプライベート エンドポイントを利用する際のとある課題を解決できる、ありがたい機能です。そちらの背景なども踏まえて動作確認していきます。
プライベート エンドポイントとプライベート DNS ゾーンの仕様
詳細な解説はいくつか記事がありますのでそちらを確認いただければと思いますが、今回のポイントとなる仕様を書き出しておきます。
- Azure リソースでプライベート エンドポイントを有効にした場合、対象リソースのFQDN に CNAME でプライベート エンドポイント用の FQDN が紐づけられる
- プライベート エンドポイント作成時のプライベート DNS ゾーン統合設定でプライベート エンドポイント用の FQDN をプライベート IP に変換するレコードが登録される (統合機能を使わず、手動での設定でも可)
- プライベート DNS ゾーンと VNET リンク設定をした VNET 内で、既定の DNS (Azure DNS) で名前解決をした場合、対象リソースの FQDN はプライベート IP に解決される
- 上記以外の場合、CNAME でプライベート エンドポイント用の FQDN を名前解決するものの、プライベート DNS ゾーンを参照しないため、従来のパブリック IP に解決される
- プライベート エンドポイント有効にした場合でも PaaS へのパブリック アクセスは許可できる
- オンプレミスなど社内ネットワークからプライベート エンドポイントにアクセスする場合、対象リソースのパブリック DNS ゾーンを社内 DNS サーバから Azure 側の DNS フォワーダーにフォワーディングする
プライベート DNS ゾーンの VNET リンクした VNET から Azure DNS で名前解決した場合
上記以外の場合
詳細な仕様はこちらをご確認ください。
現状のプライベート エンドポイントの課題
こちらの仕様に関して、自テナントの PaaS リソースにアクセスする分には問題ないのですが、他テナントのプライベート エンドポイントを有効化した PaaS リソースにパブリックからアクセスする場合に課題が発生します。例えば、以下のようなケースで該当することがあります。
- 社員が他社のサービスを利用しており、そのサービスが Azure 上で稼働、サービス内のストレージ アカウントにパブリック アクセスする仕組みになっているが、他社テナント内でプライベート エンドポイントが有効になっている
- ベンダーやパートナーの立場で他テナント上でシステム開発するために、プライベート エンドポイントを有効化ししつつ、開発用にパブリック アクセスを行う
今回は特に発生しやすい、オンプレからのアクセスにフォーカスして課題を確認していきます。
自社 Azure 環境のプライベート エンドポイントにアクセス
まず、正常時の名前解決動作が以下です。
- 端末がストレージ アカウントの FQDN にアクセス
- オンプレ内 DNS サーバが設定に従い、Azure 上の DNS フォワーダーにフォワーディング
- Azure 上の DNS フォワーダーが設定に従い、 Azure DNS にフォワーディング
- CNAME (privatelink.xxx) に変換、プライベート DNS ゾーンの A レコードでプライベート IP に名前解決され、端末がストレージ アカウントのプライベート IP にアクセス
外部テナントプライベート エンドポイントが有効化されたリソースにパブリックでアクセス
次に課題となるケースが以下です。最終的に名前解決ができずにアクセスに失敗します。
- 端末が外部のストレージ アカウントの FQDN にアクセス
- オンプレ内 DNS サーバが設定に従い、Azure 上の DNS フォワーダーにフォワーディング
- Azure 上の DNS フォワーダーが設定に従い、 Azure DNS にフォワーディング
- CNAME (privatelink.xxx) に変換されるが、自社のプライベート DNS ゾーンには外部ストレージ アカウントのプライベートエンドポイント用 A レコードが存在しないため、名前解決に失敗しアクセスエラー
なお、hosts を利用する、個別の FQDN 単位で DNS フォワーディングルールを設定する、など Azure DNS で名前解決させない対処策はいくつかありますが、運用負荷が高くあまり現実的ではありませんでした。(hosts に関しては社内でプロキシを使用していると参照されないため、解決策にならないケースがあります)
プライベート DNS ゾーンのインターネットへのフォールバック
前置きが非常に長くなりましたが、今回リリースされた機能を利用することで上記の課題を解決できます。具体的には、最後の A レコードが存在せず名前解決できない場合、パブリック IP への名前解決に戻す (フォールバック) することになります。
動作確認をしていきます。設定はシンプルで、プライベート DNS ゾーンの VNET リンクの設定で [Enable fallback to internet] にチェックを入れるのみです。
設定前にプライベート DNS ゾーンがリンクされた VNET 内で外部のプライベート エンドポイントの名前解決を実行します。以下のように名前解決に失敗しています。
設定後は以下のようにパブリック IP に名前解決できています。
まとめ
今回は Azure プライベート DNS ゾーンのインターネットへのフォールバックについて解説しました。この機能では従来のプライベート エンドポイント構成では解決が難しかった、外部テナントのプライベート エンドポイントが有効化されたリソースへのパブリック アクセスに関連する課題を解消します。
プライベート エンドポイント・プライベート DNS ゾーン統合の仕様や関連する課題が非常に複雑であるため、本記事が理解の一助になれば幸いです。
Discussion