👌

App Service でも internal な domain が使いたい

2022/10/19に公開

TL;DR

  • 一時的に TXT レコードを書いて domain の検証を済ませて、あとは社内 DNS などで Private Endpoint 宛てに名前解決させるだけ
  • app.example.local とかは無理、app.private.example.jp みたいな TLD が外部にあるものしかできない
  • スクリーンショットはない、すまん、そんなに難しくはないと思う

App Service で internal な domain を使いたい

App Service に Private Endpoint を作成することが増えていますが、そのドメインも社内で使ってるやつにしたいというモチベーションは当然にあると思います。
ただ、以下の URL に書いてあるとおり、非対応です。

カスタム ドメインは、パブリック DNS ゾーンに存在する必要があります。プライベート DNS ゾーンは、内部ロード バランサー (ILB) App Service Environment (ASE) でのみサポートされています。

https://learn.microsoft.com/azure/app-service/app-service-web-tutorial-custom-domain

ここでは、例示 domain として example.jp を利用します。
これに対して、private.example.jp は外部公開されていない、社内限定の domain だとします。
そのうえで、とある App Service を app.private.example.jp で利用したいとします。

domain の検証を何とか突破する

App Service に対して custom domain を追加する際には、domain の検証という手順を踏む必要があります。
これは domain の所有権を確認するためであり、たとえば app.example.jp という FQDN は example.jp という domain の示す組織が使うはずでしょうが、それを他人が使えないように、という意味を含んでいます。
domain の検証のためには、CNAME と TXT レコードを書く必要があるように見えますが、実際には TXT レコードだけでよいようです。

TXT レコードは Azure Portal などでみると asuid で始まるものが書かれています。
asuid の意味はよくわからないですが、とりあえず外部 DNS 側で asuid.app.private.example.jp に対して 4AD2380F... のように書かれた カスタムドメイン検証 ID の TXT レコードを書きます。

asuid.app.private.example.jp の登録が済み、少し経つと、Azure Portal 側で Custom domain が登録できるようになります。

Private IP で名前解決されるようにする

domain の検証が済んでしまえばあとは簡単です。
Private DNS zone を使ってもいいですし、AD DS サーバの DNS 機能に private.example.jp のゾーンがあればそれに A レコードをひとつ追加するだけです。
A レコードの宛先は App Service に対して Private endpoint を作成したときに割り当てられた IP アドレスです。

もし気になるようであれば、外部 DNS 側に書いた asuid.app.private.example.jp の TXT レコードは削除しても大丈夫です。

参考

  • ほぼこれの焼き直し

https://blog.aelterman.com/2022/01/10/azure-app-service-using-a-custom-domain-name-in-a-private-namespace/

Microsoft (有志)

Discussion