Azure Functions で解決してみた① ~ URL クエリパラメータに IP アドレスを入れると,日本の IP か判断してくれる ~

  1. 初めに
     Azure Functions は, Azure 上でサーバーレス (インフラストラクチャを気にする必要なく) のアプリケーションを開発できるサービスです.Azure Functions の便利さやその啓発を兼ね、Azure Logic Apps や Power Automate ( 旧 Flow ) のコネクターに無い機能や,何か不便と思ったことを今後 Azure Functions で解決&紹介していきます.

  2. 目的
     第一回目として,「特定の情報を社内からのアクセスのみ許可したい」といった場合に使用する IP アドレスによるアクセス制限 ( IP制限 ) 機能が実現できれば,社内からのアクセスのみを許可することはもちろん,他国からアクセスがあった場合に IP アドレスで国を判断し,言語情報を母国語で提供できることが可能になると考えました.よって今回は「URL クエリパラメータ ( クエリ文字列 ) に IP アドレスを入れると,日本の IP か判断してくれる」機能を実装します.

  3. 検証
    ●事前準備及び前提条件
     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 を押下します.

  1. 結果
    ⅰ ) IP でない文字列の結果
  ⅱ ) null や 空 , 空白文字だけで構成された ip の結果
  ⅲ ) 日本に割り当てられていない IP アドレスの結果( ベトナムに割り当てられた IP アドレスで検証 )
  ⅳ ) 日本に割り当てられた IP アドレスの結果

  1. 考察
     現時点で公開されている国/地域別 IP アドレス割当情報が直接影響しますが,結果で示した内容の「 URL クエリパラメータ ( クエリ文字列 ) に IP アドレスを入れると,日本の IP か判断してくれる」機能を実装することができました.今回は IP アドレスであれば,成功ステータスをレスポンスすることとしましたが,考え方や用途によってはバッドリクエストを採用することが望ましい場合もあると考えています.

  2. おわりに
     今回は,「 URL クエリパラメータ ( クエリ文字列 ) に IP アドレスを入れると,日本の IP か判断してくれる」機能を簡単に実装することができました. また今回は,別途用意したテキストファイルの内容を日本に割り当てられた IP アドレスの一覧にしましたが, IP 制限したいリストに置換することでルールを変更することが可能です.
     今後も, Azure Logic Apps や Power Automate ( 旧 Flow ) のコネクターに無い機能や,何か不便と思ったことを Azure Functions で解決&紹介 していきます.

※本記事はあくまでも参考であり、上記コードがご要望に適した動作となるか十分ご確認頂いたうえ、ご利用いただければと存じます。

いいね (この記事が参考になった人の数:3)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください