Loading
BLOG 開発者ブログ

2021年8月17日

Azure Functionsの送信IPアドレスをNAT Gatewayで固定する

今回は、Azure FunctionsとNAT Gatewayを連携してFunctionsの送信IPアドレスを固定します。

こんにちは。
クラウドソリューショングループのimai.kです。

以前の記事では、NATとなるVMを立てることでAzure Functionsの送信IPアドレス固定を試みましたが、
現在ではNAT Gatewayを利用することで送信IPアドレスを固定可能になっているため、試していきます。

目次


今回の構成

Azure FunctionsをVNet統合しFunctionsからのトラフィックをNAT Gatewayに流すことで、FunctionsのIPアドレスを固定します。

実際の構成は以下のようになります。



VNet, Public IP, NAT Gatewayを作成する

下準備のためにネットワーク周りから整えていきます。

まずはVNetを作成します。






次にパブリックIPアドレスを作成します。可用性ゾーンはなしにしておきます。
今回作成されたIPアドレスは「13.78.41.153」でした。



VNetに紐づくNAT Gatewayを作成します。
パブリックIP同様、可用性ゾーンはなしにします。






Functionsを作成する

それでは、Azure Functions(関数アプリ)を作成します。
ランタイムは.NETにしておきます。



今回はFunctionsをVNet統合するためプランはPremiumプランにします。



Functions(関数アプリ)が作成できたら関数を作成します。
トリガーはHTTP Triggerにし、AuthレベルはAnonymousにしておきます。



関数が作成できたら、作成した関数の「コードとテスト」でコードを修正します。
(コードはこちらを参考にしています。)

以下のコードでは、アクセス元のIPアドレスを返却してくれるサービスにアクセスし、結果を返却する処理を行なっています。


#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

public static async Task Run(HttpRequest req, ILogger log)
{
    var client = new HttpClient();
    var response = await client.GetAsync(@"https://ifconfig.me");
    var responseMessage = await response.Content.ReadAsStringAsync();

    return new OkObjectResult(responseMessage);
}


「コードとテスト」の「テストと実行」から関数を実行してみます。
実行結果として、今回は「13.73.24.128」というIPアドレスが得られました。
この時点では先ほど作成したパブリックIPの「13.78.41.153」とは違うIPアドレスになっています。



FunctionsをVNet統合する

今後は作成したFunctions(関数アプリ)をVNet統合します。
Functionsの「ネットワーク」を開きます。



また、送信アドレスの「さらに表示」を開くと、VNet統合前の送信IPアドレス一覧が表示されます。
Functionsの送信IPアドレスは通常だと、Azureのデータセンターが持つIPアドレス一覧のいずれかになるようです。
先ほど関数を実行したときに得られた「13.73.24.128」も一覧に含まれているのがわかります。



それでは、FunctionsをVNet統合します。
↑の画像の「VNet統合」から以下の画面を開き、作成済みのVNetとサブネットを選択します。



VNet統合が完了すると、以下のようになります。



次にFunctionsの「構成」>「アプリケーション設定」に以下の設定を追加します。

・名前 : WEBSITE_VNET_ROUTE_ALL
・値 : 1

この設定を行うとFunctionsの送信トラフィックがNAT Gatewayを通過するようになります。



IP制限が機能しているか試す

それでは、再度関数を実行してIPアドレスが固定されているか試します。
実行すると、作成したパブリックIPアドレス=「13.78.41.153」が得られました。



最後に

Functionsを使用したシステムにおいて各種セキュリティ条件を満たすためには、今回のようなVNet統合やプライベートエンドポイント接続を考慮する場面がかなり存在するかと思います。
今後も様々な構成を試して知見を深めていきたいところです。

imai.kのブログ