Azure Front Door + App Service でオリジンへの直接アクセスを制限する

2021.07.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

AzureでWebアプリを展開するときは App Service を使うことが多いと思うのですが、その際にオリジンへの直接アクセスを制限したい場合があります。
WAFを通さずにコンテンツにアクセスさせたくない場合や、単純にカスタムドメイン以外を隠蔽したい場合などでしょうか。
App Service の アクセス制限機能を使うと、簡単に制限が出来ます。

今回は、App ServiceとFront Doorをデプロイし、試してみました。
Fonrt Doorが多機能だったので設定可能項目の紹介も少しします。

AppService作成

AppServiceの作成方法は特殊なことはないので、割愛します。
Linux の Free Tierなプランで作成しました。
App Service の機能は前提条件にスタンダード以上となっているものがありますが、Freeでも出来るのはありがたいです。

Azure Front Doorを作成

Front Doorは以下3つの構成を行う必要があります。

  • フロントエンドまたはドメイン
  • バックエンドプール
  • ルーティング規則

フロントエンドホストの追加

フロントドアのフロント部分の設定になります。

セッションアフィニティ と WAFの有効化が可能です。
今回は設定しませんでしたが、WAFポリシーは事前に用意が必要です。
のちほど、カスタムドメインの設定も可能です。

バックエンドプール

ターゲットホストはパブリックIPアドレスだけでなく各Azureサービスと統合が可能です。
また、バックエンドプールを複数追加し、ロードバランシングも可能です。

HTTP、HTTPSプロトコルでのヘルスチェックが可能です。

ルーティング規則

ルーティング可能なプロトコルはHTTPとHTTPSのみです。
パスパターンでフィルタリングが出来、リダイレクト設定も可能です。

今回設定しませんでしたが、URL書き換え機能があります。
キャッシュ機能の有効化が可能です。

当時まだ Front Door はなかった気がするのですが、だいぶ多機能ですね。
このサービスはほとんどのケースで使ったほうが良い気がします。

なお、Front Doorは料金がかかります。

デプロイ後の注意点

フロントドア作成直後はまだコンテンツの表示が出来ません。
少し時間を置く必要があります。

今回は、2分程度経過するとコンテンツにアクセス出来るようになりました。

AppServiceのアクセス制限を設定

この時点では、Front Door経由でも App Serivce への直接アクセスでも、どちらでもコンテンツの表示が可能です。
ここから、Front Door経由以外ではアクセス出来ないように設定を行います。

AppServiceの設定から ネットワーク -> アクセス制限 を選択します。

SCMではない方へアクセス制限の追加を行いましょう。
ソースの種類にサービスタグで AzureFrontDoor.Backend を選択します。
X-Azure-FDID にフロントドアIDを設定してください。

なお、規則を追加すると、設定された規則以外を拒否する規則が自動で追加されますので、明示的な拒否ルールの追加は不要です。

動作確認

フロントドアからはアクセス出来ます。

オリジンへの直接アクセスは拒否されました。

まとめ

過去に App Serviceのアクセス制限は使いこなせておらず、ミドルウェアやアプリケーション側でホストヘッダなどなどの確認で制限を行うことがありました。
当時は設定の変更を行うたびにデプロイを行っていました。

デプロイ不要で設定や変更が可能なので、App Service のアクセス制限機能は使いこなしたいところです。

参考