はじめに
こんにちは、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を保護する方法をご紹介いたしました。 実運用においてはカスタムドメインを使うなど、考慮事項はいくつかございますが、ぜひお試し頂ければと思います。