Azure Front Door + App Serviceの組み合わせで、Azure Front DoorからApp Serviceへのアクセスだけを許可したい

このエントリは2020/12/152022/03/31現在の情報に基づいています。将来の機能追加や変更に伴い、記載内容との乖離が発生する可能性があります。

何をしたいのか

タイトルの通りで、Azure Front DoorのバックエンドとしてApp Serviceを配置したときに、できるだけ簡単にAzure Front Doorからのアクセスのみを許可できないか、というもの。Azure Front Doorについては以下を参照。

Azure Front Door とは / What is Azure Front Door?
https://docs.microsoft.com/azure/frontdoor/front-door-overview

App Service自体はデフォルトでPublic IPを持っていてインターネットからアクセスできるので、何もせずにAzure Front DoorのバックエンドとしてApp Serviceを配置すると、Azure Front Doorを通らずにApp Serviceに直接アクセスできてしまう。そのため、以下のいずれかの方法でアクセス元制限を設定する必要がある。

  • App Service側で制限(Front Door Classic、Standard、Premiumで利用可能)
  • Front Door側で制限(Premiumのみで利用可能)

以下ではそれぞれの方法について記載する。

1. App Service側で制限

これは上記の通り、Front Doorの全SKUで利用可能。

App Serviceにおけるアクセス元の制限

ドキュメントで言えば以下のあたりだが、非常にあっさり記載している。

アクセスの制限 / Access restrictions
https://docs.microsoft.com/azure/app-service/networking-features#access-restrictions

そのため、実際に動かして確認してみる。利用するのは、Azure Front DoorのQuick Start。CLI、PowerShell、Azure Portalのいずれで実施してもかまわない。バックエンドに利用するApp Serviceは1個でもかまわない。

クイック スタート:グローバル Web アプリケーションの高可用性を実現するフロント ドアを作成する / Quickstart: Create a Front Door for a highly available global web application
https://docs.microsoft.com/azure/frontdoor/quickstart-create-front-door
https://docs.microsoft.com/azure/frontdoor/quickstart-create-front-door-powershell
https://docs.microsoft.com/azure/frontdoor/quickstart-create-front-door-cli
https://docs.microsoft.com/azure/frontdoor/quickstart-create-front-door-template

Front Door の設定

Portalから作成する場合、Front Doorの設定は以下のような感じ。ホスト名や名前、バックエンドプールへのApp Serviceの追加ぐらいに注意すれば、あとはデフォルトでOK。

【確認および作成】をクリックしてチェックが正常に終了したら、【作成】をクリックしてしばし待つ。

できあがったらFront Doorのエンドポイント、App Serviceのエンドポイントにそれぞれアクセスしてみる。この段階では、当然ながらApp Serviceのエンドポイントにも直接アクセスできてしまう。以下はFront Doorを通した場合(左)と、App Serviceに直接アクセスした場合(右)の例。

App Serviceでのアクセス制限の設定

こちらもPortalから構成してみる。作成したApp Serviceを開き、設定>ネットワーク>アクセス制限で【アクセス制限を構成する】をクリック。

【規則の追加】をクリックすると、右側から画面が現れる。この画面内でルールを構成する。名前、優先度、説明は何でもよい(優先度が小さいほど早く評価される。この例では300でもOK)。種類として[サービス タグ(プレビュー)]、そのタグとして[AzureFrontDoor.Backend]を指定し、【規則の追加】をクリックしてApp Serviceのアクセス制限の構成が完了。2個App Serviceを作成している場合は、同じことを他方にも繰り返す。

Give it a try!

では試してみる。先ほどのようにFront Doorを通す場合(左)と、App Serviceを直接呼び出す場合(右)を比べてみると、左側は問題なくアクセスできているが、右側はHTTP 403でアクセスができなくなっている(ただ、この画面は、App Serviceを使っていることを示しているので、カスタムエラーページにしたい気持ちではある…)。

なお、特定のFront DoorからのApp Serviceへのアクセスのみを許可する場合、以下のドキュメントに従ってさらにアクセスを絞り込む必要がある。

バックエンドへのアクセスを Azure Front Door のみにロックダウンするにはどうしたらよいですか? / How do I lock down the access to my backend to only Azure Front Door?
https://docs.microsoft.com/en-us/azure/frontdoor/front-door-faq#how-do-i-lock-down-the-access-to-my-backend-to-only-azure-front-door-
特定の Azure Front Door インスタンスへのアクセスを制限する / Restrict access to a specific Azure Front Door instance
https://docs.microsoft.com/azure/app-service/app-service-ip-restrictions#restrict-access-to-a-specific-azure-front-door-instance

このドキュメントにもあるように、Front Door IDをX-Azure-FDIDとしてHTTP headers filter settingに指定することで、特定のFront Doorからのアクセスにのみ制限できる。

2. Front Door側で制限

2022/03/30からFront Door Standard/Premiumの一般提供が始まった。Premium SKUではPrivate Linkをサポートしており、これによりFront DoorとApp Service間をPrivate Linkで接続できる。そのため、上記のApp Service側での構成は不要になるが、App ServiceでPrivate Endpoint接続を承認する必要はある。

Azure Portalから構成すると、以下のような感じ。

これを受けて、App Service側ではPrivate Endpoint接続を承認する。

これでおしまい。この設定後は、Front Door経由のみアクセス可能になる(反映までに少々時間がかかるよう)。

Give it a try!

では試してみる。先ほどのようにFront Doorを通す場合(左)と、App Serviceを直接呼び出す場合(右)を比べてみると、左側は問題なくアクセスできているが、右側はHTTP 403でアクセスができなくなっていることがわかる。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中