最近は Alias record 周りを触ってなかったので気が付かなかったのですが、ちょっと前から Traffic Manager と Public IP Address だけではなく Azure CDN にも Alias record を作れるようになっていたようです。
軽く調べた感じ公式リリースは見当たらなかったですが、ドキュメントには Azure CDN に Alias record を作れると書いてありました。
ドキュメント更新が 2 月だったので、そのくらいから使えるようになっていたのかも知れません。
実際に Azure Portal から Alias record set を作成しようとすると、ドロップダウンに Azure CDN が増えています。CDN Profile / Endpoint という形での表示になっています。
今回は Azure CDN Standard Microsoft を使いました。Akamai や Verison でも使えるかは確認してないですが、ドキュメントに制限などは書いてなかったので多分使える気がします。
CDN を指す Alias record set を作成する
Azure CDN を指す Alias record set を作ろうとすると、下の方に Add CDNVerify
というチェックボックスが出てきます。チェックを入れておくと後で楽できます。
App Service でも同じようなレコードが必要でしたが、A レコードを使う場合には Azure CDN は cdnverify という検証用のレコードを追加する必要があります。
先ほどのチェックボックスを有効にしておくと、勝手に cdnverify を作ってくれるので便利です。
レコードを作成後は Azure CDN の Endpoint にカスタムドメインを追加します。既に必要なレコードは Azure DNS が作成してくれているので、サクッと検証は通ります。
追加が完了するとカスタムドメインでのアクセスが可能になります。証明書を設定していないので http 限定になってしまいますが、Zone Apex なドメインでアクセス出来ています。
バックエンドは Azure Storage にしているので、これまでは L7 のロードバランサーを使わないと難しかった構成ですが、Azure DNS と CDN でサクッと用意出来るようになりました。
Key Vault から証明書をインポートする
今回、久し振りに Azure CDN を弄っている時に Standard Microsoft だと Key Vault から証明書をインポート出来ることを知ったのでついでに試しておきました。
ちゃんとドキュメントが用意されているので簡単に設定が行えます。AAD への登録が少し面倒ですが、アクセスポリシー周りは App Service とほぼ同じですね。
PowerShell で AAD へアプリ登録が必要みたいに書いてあったので、Cloud Shell を使って楽をしました。
AAD に 1 回だけ登録すれば良いので、CDN 追加の度に同じことを行う必要はないです。アクセスポリシーは secret に Get だけ付けておけば良いので簡単。
証明書を扱うのだから certificate だろと思うかもしれないですが、内部的には secret として処理されるのでドキュメント通りに設定しましょう。変なところではまります。
これで Azure CDN から Key Vault に格納された証明書をインポートする準備が出来たので、CDN Endpoint に戻って証明書の設定を行っていきます。ドロップダウンで選ぶだけなので難しいことはないですね。
ちなみに追加できる CA に制限があり、自己署名証明書や以下のリストに含まれていない CA が発行した証明書を追加しようとするとエラーになります。
テスト用に作成していた証明書が Let's Encrypt のステージング CA だったので蹴られました。
新しく本番用の Let's Encrypt 証明書を発行し直して設定すると、検証が通って証明書のプロビジョニングが開始されます。2 時間ぐらいかかると書いてありますが、今回の場合は 10 分ぐらいで完了していました。
プロビジョニングが完了すると Custom HTTPS が Enabled になります。
これで無事に https でもアクセス出来るようになりました。証明書も指定した Let's Encrypt が発行したものが使われています。証明書自体も Key Vault 側で更新すれば、自動的に反映されていくはずです。バージョンを明示的に指定する必要があるので、自動では更新されません。残念。
以前に比べると制限がかなり減って、柔軟な構成を作れるようになってきましたね。
今回は Azure CDN に対して Alias record を使って Zone Apex なドメインを割り当ててみましたが、最近 GA したばかりの Azure Front Door も Alias record に近日中に対応するらしいです。
Give it another week or so and you should be able to do so. Actually, via DNS APIs this is already supported!
— Sharad Agrawal (@sharad_chai) 2019年4月15日
Azure Portal 側で対応していないだけのようなので API を叩けば使えるようですが、REST API で Alias record を追加する方法が分からなかったので Azure Portal での対応を待とうと思います。