この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。
- 初めに
Azure Functions は, Azure 上でサーバーレス (インフラストラクチャを気にする必要なく) のアプリケーションを開発できるサービスです.Azure Functions の便利さやその啓発を兼ね、Azure Logic Apps や Power Automate ( 旧 Flow ) のコネクターに無い機能や,何か不便と思ったことを今後 Azure Functions で解決&紹介していきます. - 目的
第一回目として,「特定の情報を社内からのアクセスのみ許可したい」といった場合に使用する IP アドレスによるアクセス制限 ( IP制限 ) 機能が実現できれば,社内からのアクセスのみを許可することはもちろん,他国からアクセスがあった場合に IP アドレスで国を判断し,言語情報を母国語で提供できることが可能になると考えました.よって今回は「URL クエリパラメータ ( クエリ文字列 ) に IP アドレスを入れると,日本の IP か判断してくれる」機能を実装します. - 検証
●事前準備及び前提条件
1 ) Azure Functions では言語を選択 ( C#,Java,JavaScript,Python,PowerShell ) することが可能です. 今回は C# を用います.
2 ) 日本に割り当てられた IP アドレスの一覧が書かれたテキストファイル ( jp.txt ) を別途用意しています.
3 ) 今回は IP が IP アドレス範囲に存在するかチェックする IPSubnet クラスの説明は割愛します.
4 ) Http リクエストの検証には,Google Chrome 拡張機能の Talend API Tester を使用します.
下記が,今回のコードになります.
●コードの概要
1 ) 静的コンストラクタ IsJpIPFunciton で,jp.txt を読み込み,日本に割り当てられた IP アドレスをリスト化します.その際に,改行コード及びキャリッジリターンコードは取り除いています.
2 ) URLクエリパラメータ ( クエリ文字列 ) で ip パラメータを探します.
3 ) 取得した ip の文字列に null や 空 が入っていたり,空白文字だけで構成されていた場合若しくは,取得した ip をパースし IP でなければ,バッドリクエスト 400 として「[ip] is not the expected IP address」を表示します.( 表示内容の ip には,入力した ip が反映されます. )
4 ) ip として渡された文字列が,日本に割り当てられた IP アドレスの一覧に含まれているかをチェックします.含まれていれば「 [ip] is jpIP. 」,含まれていなければ「 [ip] is not jpIP. 」と表示します.どちらの場合でも OK リクエスト 200 としています. ( 表示内容の ip には,入力した ip が反映されます. )
5 ) 最後にレスポンスを JSON で返します.
●検証内容
1 ) 上記コードを実行します.( 実行すると func.exe が立ち上がります.)
2 ) Talend API Tester の Requests に メソッドを GET とし,スキーマに Func.exe で表示される URL を入力します.
3 ) 2 ) で入力した URL の語尾に URLクエリパラメータ ( クエリ文字列 ) として,様々な IP を追記し, Send を押下します.
- 結果
ⅰ ) IP でない文字列の結果
- 考察
現時点で公開されている国/地域別 IP アドレス割当情報が直接影響しますが,結果で示した内容の「 URL クエリパラメータ ( クエリ文字列 ) に IP アドレスを入れると,日本の IP か判断してくれる」機能を実装することができました.今回は IP アドレスであれば,成功ステータスをレスポンスすることとしましたが,考え方や用途によってはバッドリクエストを採用することが望ましい場合もあると考えています. - おわりに
今回は,「 URL クエリパラメータ ( クエリ文字列 ) に IP アドレスを入れると,日本の IP か判断してくれる」機能を簡単に実装することができました. また今回は,別途用意したテキストファイルの内容を日本に割り当てられた IP アドレスの一覧にしましたが, IP 制限したいリストに置換することでルールを変更することが可能です.
今後も, Azure Logic Apps や Power Automate ( 旧 Flow ) のコネクターに無い機能や,何か不便と思ったことを Azure Functions で解決&紹介 していきます.
※本記事はあくまでも参考であり、上記コードがご要望に適した動作となるか十分ご確認頂いたうえ、ご利用いただければと存じます。