APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

Azure FunctionsへのアクセスをFront Doorで保護する

はじめに

こんにちは、ACS事業部の東出です。

Azure Functionsを使って外部公開用のAPIを作るケースがあるかと思います。 一方で、外部公開するのでAPIの保護をどうやっておこなうか考える必要があります。

Azureでは複数の手段がありますが、今回はFront Doorを使って保護する方法をご紹介します。 また、Front Doorを使うので、Functionsに直接受信トラフィックが届かないようにも設定します。 docs.microsoft.com

Front Doorは簡単に言うと従量課金制のCDN+WAFサービスです。 とりあえずAPI保護のためにWAF入れたいけど、Application Gatewayを使うほどのコストはかけられない、、、という場合などに選択肢として挙がるかと思います。

実装の流れ

  • Azure Functionsのリソースを作成する
  • HTTPトリガーでFunctionを作成する
  • Front Doorを作成する
  • Functionsへの受信トラフィックをFront Door経由に限定する
  • 動作確認

Front Doorの作成

作成オプションの選択

下の画像のとおり、Azure Front Doorを選択します。 今回は、オプションは簡易選択で作成します。

プロファイルの設定

こちらで配信元の種類とホスト名を指定します。
配信元の種類はAppServicesを選びます。
配信元のホスト名は、先に作成したFunctionsリソースに割り当てられたURLを指定します。

作成後の確認

作成済のFront Doorリソースで、設定 -> 配信元グループの画面を開きますと、default-origin-groupという配信元グループが作成されていることが確認できます。
名前のリンクをクリックすると、右側に設定が表示され、配信元が先に設定したホスト名になっていることが確認できます。

Functionsへの受信トラフィックをFront Door経由に限定する

Functionsの画面を開き、設定 -> ネットワーク -> アクセス制限のリンクを開きます。

規則の追加をクリックすると、右に設定ウィンドウが現れます。

アクションallow、ソースの種類をサービスタグ、サービスタグをAzureFrontDoor.Backendとします。

動作確認

FunctionのURLを取得

まずは動作確認のため、FunctionのURLを取得します。
Functionsの画面で、関数 -> (作成した関数名のリンク) -> 関数のURLの取得から確認できます。

FunctionのURLに直接アクセスして、失敗することを確認

先程確認したURLに直接アクセスしてみて、エラーになることを確認します。

Front Door経由でアクセスして、成功することを確認

次に、Front Door経由でのアクセスを試します。 URLは、FunctionのURLのうち、ドメイン部分をFront DoorのEndpoint hostnameに置き換えればOKです。

今回の例ですと、以下のように置き換えます。


FunctionのURL
https://test-https-api.azurewebsites.net/api/HttpTrigger1?code=24EKQX7YksPGSLtGhV1dqe9Pf3iGua3Lk_HhSt7xcBfoAzFuqSxaNw==

↓↓↓↓↓↓

Front Door経由でのアクセスURL
https://test-front-door-ggecfjdserdbcdhu.z01.azurefd.net/api/HttpTrigger1?code=24EKQX7YksPGSLtGhV1dqe9Pf3iGua3Lk_HhSt7xcBfoAzFuqSxaNw==


Front Door経由でアクセスすると、関数の結果が正しく表示されます。 (今回はFunction作成時のサンプルコードをそのまま使用)

おわりに

今回はFront Doorを使って、Functionsで作ったAPIを保護する方法をご紹介いたしました。 実運用においてはカスタムドメインを使うなど、考慮事項はいくつかございますが、ぜひお試し頂ければと思います。