しばやん雑記

Azure Serverless とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Front Door Premium (Preview) で追加された Private Link 対応を試した

これまで Azure Front Door には SKU が存在していませんでしたが、先週に Front Door に新しく Standard と Premium の SKU が追加されたバージョンが Public Preview として公開されました。

事前に REST API リファレンスには登場していたので知っていましたが、ARM 的にはこれまでの Front Door とは異なり CDN 寄りなのが大きな違いのように感じます。

機能的には今のところはこれまでの Front Door と大きな差はないのですが、Premium では Private Link を使ったオリジンへの安全なアクセスが行える機能が追加されています。これが今回の目玉機能でしょう。

本当にそれ以外は大きな差は無いと思います。Rule set を優先順位付きでの複数指定や、証明書の管理がわかりやすくなったなどいろいろありますが、CDN としての機能を見ると差はないです。

話を Private Link に戻すと、これまでオリジンのロックダウンには以前書いたように、アクセス元の広い IP Range を登録するか、特殊な HTTP リクエストヘッダーを見るしか方法が無かったです。

しかし Premium の場合は Private Link 経由でのアクセスを設定できるので、確実かつ簡単に Front Door 以外からのアクセスを遮断することが出来ます。CDN の各エッジから Private Link で見る仕組みが謎ではありますが、セキュリティ要件で確実に遮断が必要な場合には有効でしょう。

早速 Premium の Front Door を作成して App Service と Storage Account に対して Private Link 設定を試してみるわけですが、リソースの作成画面が大きく変わりました。単純な SKU だけではなく、ユースケースによって適切な Front Door / CDN を選べるようになっています。

f:id:shiba-yan:20210220213115p:plain

とはいえ今回は Premium を試すと決めているので、Preview 版を直接選択してリソースを作成します。

SKU 自体はこの後に選択できるようになっています。説明にもあるように Premium はセキュリティを重視する場合に使うという認識で問題ないです。もちろん Standard に比べると高いです。

f:id:shiba-yan:20210220213123p:plain

新しく Front Door を作成するタイミングで一緒にオリジンの追加も出来るので、前もって作成していた App Service を追加しておきます。"Enable private link service" にチェックを入れると、Private Link の追加設定が必要になりますが、大体は勝手に入ってくれます。

この辺りは Private Endpoint を作成する時と同じなので、追加したことがある人は見慣れたものでしょう。

f:id:shiba-yan:20210220213131p:plain

ちなみに現在 Private Link が使えるリージョンは East US / West US 2 / South Central US だけなので、デプロイ先には注意しましょう。

新しい Front Door Premium (Preview) の Azure Portal はこれまでとは大きく変わっているので、若干戸惑うかもしれませんが Front Door Designer が細分化されたと考えればスムーズに扱えるかと思います。

f:id:shiba-yan:20210220213139p:plain

これで Front Door のデプロイが完了しましたが、エンドポイントにアクセスしてもエラーになると思います。まだ Private Link が Approve されていないので、Front Door からアクセスできないのが原因です。

Private Link の設定を行ったリソースの Private Endpoint connections を確認すると、Front Door からのリクエストが追加されているはずなので、選択してから Approve する必要があります。忘れずに Approve しないといつまで待ってもアクセスできないので注意です。

f:id:shiba-yan:20210220213147p:plain

ドキュメントには Private Link を有効化してからとあったので、とりあえず Private Endpoint を手動で作成しておいたのですが、これは実際には必要ありませんでした。意図としては Premium V2 / V3 などの Private Link に対応した SKU が必要というだけで、VNET と Private DNS Zone は不要という話だったようです。

実際にもう一つ VNET や Private Endpoint の設定が行われていない、まっさらの App Service を作成してみたところ、問題なく Front Door からの Private Link 接続が有効化できました。

f:id:shiba-yan:20210220213253p:plain

この画面に表示されている Private Endpoint は Front Door が内部で管理しているものなので、確認することはできません。Front Door からオリジンを削除すれば自動的に Private Endpoint も削除されます。

Private Endpoint を Approve すれば、Front Door からアクセスできるようになっているはずです。App Service は Private Endpoint を追加すると、自動的に全てのパブリックアクセスは無効化されるので、安全にアクセス出来ていることが確認できます。

次は Storage Account をオリジンに追加して試してみます。単なる Blob ではなくて、使う機会が多いと思われる Static Website をターゲットにして試していますが、現在は Custom で追加するしかないです。

f:id:shiba-yan:20210224000532p:plain

Private Link の設定は App Service とほぼ同じですが、Target sub resource の設定だけは気を付ける必要があります。今回は Static Website を使うので web を指定する必要があります。

オリジンを追加すると App Service の時のように Private Endpoint へのリクエストが追加されているので、同じように Approve することで Front Door からアクセスできるようになります。

f:id:shiba-yan:20210224000543p:plain

ただし Storage Account は Private Endpoint を追加しただけではパブリックアクセスは閉じられないので、Firewall の設定からパブリックアクセスを拒否するように変更する必要があります。

正直なところ Preview だからか Private Link 周りの動作は若干不安定で、反映されるまでに時間がかかったりしますが、しばらく放置した後にアクセスできるようになりました。

f:id:shiba-yan:20210224012156p:plain

オリジンのロックダウンが Private Link で行えるようになったのはかなり良い機能だとは思いますが、Premium が思ったより高いなという印象だったので、基本はこれまで通り Access Restriction などを使って HTTP リクエストベースでロックダウンをしつつ、高いセキュリティレベルが要求される部分は Private Link という使い分けが必要だと思います。

とはいえオリジンへのアクセスを Private Link でシンプルに行えるのは魅力的ですね。