チュートリアル:Azure Functions のプライベート サイト アクセスを設定する

このチュートリアルでは、Azure Functions のプライベート サイト アクセスを有効にする方法について説明します。 プライベート サイト アクセスを使用すると、自分の関数コードを特定の仮想ネットワークからしかトリガーできないように設定できます。

プライベート サイト アクセスは、Function App へのアクセスを特定の仮想ネットワークに限定する必要があるような状況で役立ちます。 たとえば、Function App の対象を特定の組織の従業員や、特定の仮想ネットワーク内のサービス (別の Azure 関数、Azure 仮想マシン、AKS クラスターなど) に限定することができます。

Function App が仮想ネットワーク内の Azure リソースにアクセスする必要がある (つまりサービス エンドポイント経由で接続されている) 場合、仮想ネットワークの統合が必要となります。

このチュートリアルでは、Function App のプライベート サイト アクセスを構成する方法について説明します。

  • 仮想マシンの作成
  • Azure Bastion サービスを作成する
  • Azure Functions アプリを作成する
  • 仮想ネットワーク サービス エンドポイントを構成する
  • Azure 関数を作成してデプロイする
  • 仮想ネットワークの内外から関数を呼び出す

Azure サブスクリプションがない場合は、開始する前に無料アカウントを作成してください。

トポロジ

次の図は、作成するソリューションのアーキテクチャを示します。

High-level architecture diagram for private site access solution

前提条件

このチュートリアルでは、IP アドレスの割り当てとサブネット化を理解することが重要です。 アドレスの割り当てとサブネット化の基本を取り上げたこの記事から開始できます。 多くの記事およびビデオをオンラインで利用できます。

Azure Portal にサインインする

Azure portal にサインインします。

仮想マシンの作成

このチュートリアルの最初の手順として、仮想ネットワーク内に新しい仮想マシンを作成します。 特定の仮想ネットワーク内からしか関数を利用できないよう制限した後は、この仮想マシンが関数へのアクセスに使用されます。

  1. [リソースの作成] ボタンを選択します。

  2. 検索フィールドに「Windows Server」と入力し、検索結果から [Windows Server] を選択します。

  3. Windows Server オプションの一覧から [Windows Server 2019 Datacenter] を選択し、 [作成] ボタンを押します。

  4. [基本] タブで、画像の下の表で指定されているように VM 設定を使用します。

    Basics tab for a new Windows VM

    設定 提案された値 説明
    サブスクリプション 該当するサブスクリプション リソースが作成されるサブスクリプション。
    リソース グループ myResourceGroup このチュートリアルのすべてのリソースを含めるためのリソース グループを選択します。 同じリソース グループを使用することで、このチュートリアルの完了時にリソースをクリーンアップしやすくなります。
    仮想マシン名 myVM VM 名は、リソース グループ内で一意である必要があります
    リージョン (米国) 米国中北部 近くの (アクセスする関数に近い) リージョンを選択します。
    パブリック インバウンド ポート なし インターネットから VM へのインバウンド接続を排除するために [なし] を選択します。 VM へのリモート アクセスは、Azure Bastion サービス経由で構成します。
  5. [ネットワーク] タブを選択し、 [新規作成] を選択して新しい仮想ネットワークを構成します。

    Screenshot that shows the

  6. [仮想ネットワークの作成] で、画像の下にある表の設定を使用します。

    Create a new virtual network for the new VM

    設定 提案された値 Description
    名前 myResourceGroup-vnet 仮想ネットワークに対して生成される既定の名前を使用できます。
    アドレス範囲 10.10.0.0/16 仮想ネットワークの単一のアドレス範囲を使用します。
    サブネット名 チュートリアル サブネットの名前です。
    アドレス範囲 (サブネット) 10.10.1.0/24 サブネット サイズは、サブネットに追加できるインターフェイスの数を定義します。 このサブネットは VM によって使用されます。 /24 サブネットは、254 のホスト アドレスを提供します。
  7. [OK] を選択して、仮想ネットワークを作成します。

  8. [ネットワーク] タブに戻り、 [パブリック IP][なし] が選択されていることを確認します。

  9. [管理] タブを選択し、 [Diagnostic storage account](診断ストレージ アカウント)[新規作成] を選択して、新しいストレージ アカウントを作成します。

  10. [ID][自動シャットダウン][バックアップ] の各セクションは既定値のままにします。

  11. [Review + create](レビュー + 作成) を選択します。 検証が完了した後、 [作成] を選択します。 VM 作成プロセスには数分かかります。

Azure Bastion を構成する

Azure Bastion は、安全な RDP アクセスおよび SSH アクセスを Azure portal から直接仮想マシンに提供するフル マネージドの Azure サービスです。 Azure Bastion サービスを使用すれば、RDP アクセスに関連したネットワーク設定の構成が不要になります。

  1. ポータルで、リソース グループ ビューの上部にある [追加] を選択します。

  2. 検索フィールドに「Bastion」と入力します。

  3. 検索結果にある [Bastion] を選択します。

  4. [作成] を選択すると、新しい Azure Bastion リソースを作成する処理が開始されます。 まだ AzureBastionSubnet サブネットが存在しないため、 [仮想ネットワーク] セクションにエラー メッセージが表示されていることがわかります。 サブネットは次の手順で作成します。 画像の下の表に示した設定を使用してください。

    Start of creating Azure Bastion

    設定 提案された値 Description
    名前 myBastion 新しい Bastion リソースの名前です。
    リージョン 米国中北部 ユーザーに近いリージョン、または関数がアクセスする他のサービスの近くのリージョンを選択します。
    Virtual Network myResourceGroup-vnet Bastion リソースが作成される仮想ネットワークです。
    サブネット AzureBastionSubnet 新しい Bastion ホスト リソースがデプロイされるご利用の仮想ネットワークのサブネットです。 名前の値の AzureBastionSubnet を使用して、サブネットを作成する必要があります。 この値によって、Azure でリソースをデプロイするサブネットを把握できます。 /27 かそれより大きいサブネットを使用する必要があります (/27、/26 など)。

    Note

    Azure Bastion リソースを作成するための詳細なステップ バイ ステップ ガイドについては、Azure Bastion ホストの作成に関するチュートリアルを参照してください。

  5. Azure Bastion ホストのプロビジョニング先として使用できるサブネットを作成します。 [サブネット構成の管理] を選択すると新しいペインが表示され、そこで新しいサブネットを定義することができます。 新しいサブネットを作成するには、 [+ サブネット] を選択します。

  6. サブネットの名前は AzureBastionSubnet とし、サブネットのプレフィックスは /27 以上にしてください。 [OK] を選択してサブネットを作成します。

    Create subnet for Azure Bastion host

  7. [Bastion の作成] ページの利用可能なサブネットの一覧で、新たに作成した AzureBastionSubnet を選択します。

    Create an Azure Bastion host with specific subnet

  8. [確認と作成] を選択します。 検証が完了した後、 [作成] を選択します。 Azure Bastion リソースが作成されるまでには数分かかります。

Azure Functions アプリを作成する

次の手順では、従量課金プランを使用して Azure にFunction App を作成します。 後からこのチュートリアルの中で、このリソースに自分の関数コードをデプロイします。

  1. ポータルで、リソース グループ ビューの上部にある [追加] を選択します。

  2. [Compute] > [Function App] の順に選びます

  3. [基本] セクションで、下の表で指定されているFunction App の設定を使用します。

    設定 提案された値 説明
    リソース グループ myResourceGroup このチュートリアルのすべてのリソースを含めるためのリソース グループを選択します。 Function App と VM に同じリソース グループを使用すれば、このチュートリアルの完了時にリソースを簡単にクリーンアップできます。
    関数アプリ名 グローバルに一意の名前 新しい Function App を識別する名前。 有効な文字は、a から z (大文字と小文字は区別されない)、0 から 9、および - です。
    発行 コード コード ファイルまたは Docker コンテナーの発行オプション。
    ランタイム スタック 優先言語 お気に入りの関数プログラミング言語をサポートするランタイムを選択します。
    リージョン 米国中北部 ユーザーに近いリージョン、または関数がアクセスする他のサービスの近くのリージョンを選択します。

    [Next: Hosting >](次へ: ホスティング >) ボタンを選びます。

  4. [ホスティング] セクションの [ストレージ アカウント][オペレーティング システム][プラン] で、次の表に従って適切な値を選択します。

    設定 提案された値 説明
    ストレージ アカウント グローバルに一意の名前 Function App で使用されるストレージ アカウントを作成します。 ストレージ アカウント名の長さは 3 ~ 24 文字で、数字と小文字のみを使用できます。 既存のアカウントを使用することもできますが、ストレージ アカウントの要件を満たしている必要があります。
    オペレーティング システム 優先オペレーティング システム オペレーティング システムは、ランタイム スタックの選択に基づいてあらかじめ選択されますが、必要に応じて設定を変更できます。
    プラン 従量課金 ホスティング プランは、Function App のスケーリング方法と各インスタンスが利用できるリソースを規定するものです。
  5. [確認および作成] を選択して、アプリ構成の選択内容を確認します。

  6. [作成] を選択して、Function App をプロビジョニングし、デプロイします。

アクセス制限を構成する

次の手順では、仮想ネットワーク上のリソースだけが関数を呼び出せるようにアクセス制限を構成します。

プライベート サイト アクセスは、Function App と特定の仮想ネットワークとの間に Azure 仮想ネットワークのサービス エンドポイントを作成することによって実現します。 アクセス制限は、サービス エンドポイントを用いて導入されます。 特定の仮想ネットワーク内から発信されたトラフィックしか、指定されたリソースにアクセスできないようサービス エンドポイントによって制限されます。 指定されたリソースとは、このケースで言えば Azure 関数が該当します。

  1. Function App 内で、 [設定] セクションのヘッダーの下にある [ネットワーク] リンクを選択します。

  2. [ネットワーク] ページは、Azure Front Door、Azure CDN、アクセス制限を構成するための出発点となります。

  3. プライベート サイト アクセスを構成するには、 [アクセス制限を構成する] を選択します。

  4. [アクセス制限] ページに表示されるのは既定の制限のみです。 既定では、Function App へのアクセスが一切制限されません。 プライベート サイト アクセス制限の構成を作成するには、 [規則の追加] を選択します。

  5. [Add Access Restriction](アクセス制限の追加) ウィンドウで、新しい規則の [名前][優先度][説明] を入力します。

  6. [種類] ボックスの一覧から [仮想ネットワーク] を選択し、先ほど作成した仮想ネットワークを選択してから、Tutorial サブネットを選択します。

    Note

    サービス エンドポイントの有効化には数分かかる場合があります。

  7. [アクセス制限] ページを見ると、新しい制限が存在することがわかります。 [エンドポイントの状態] が Disabled から Provisioning になり、最終的に Enabled になるまでに数秒かかる場合があります。

    重要

    Function App にはそれぞれ、Function App のデプロイを管理するための [高度なツール (Kudu)] サイトがあります。 このサイトには、<FUNCTION_APP_NAME>.scm.azurewebsites.net 形式の URL からアクセスします。 Kudu サイトでアクセス制限を有効にすると、ローカルの開発者ワークステーションからプロジェクト コードがデプロイされなくなり、デプロイを実行するには仮想ネットワーク内にエージェントが必要になります。

Function App にアクセスする

  1. 先ほど作成したFunction App に戻ります。 [概要] セクションで URL をコピーします。

    Get the Function app URL

    次に、仮想ネットワークの外部にあるコンピューターからFunction App にアクセスしようとすると、アクセスが禁止されていることを示す HTTP 403 ページが返されます。

  2. リソース グループに戻り、以前に作成した仮想マシンを選択します。 VM からサイトにアクセスするためには、Azure Bastion サービス経由で VM に接続する必要があります。

  3. [接続] を選択し、 [Bastion] を選択します。

  4. 適切なユーザー名とパスワードを入力して仮想マシンにログインします。

  5. [接続] を選択します。 新しいブラウザー ウィンドウがポップアップ表示されて、仮想マシンを対話的に操作できるようになります。 この VM は仮想ネットワーク経由でサイトにアクセスしているため、VM 上の Web ブラウザーからサイトにアクセスできます。 サイトには指定された仮想ネットワーク内からしかアクセスできませんが、パブリック DNS エントリは依然として存在します。

関数を作成する

このチュートリアルの次の手順では、HTTP によってトリガーされる Azure 関数を作成します。 HTTP GET または POST 経由で関数を呼び出したときに、"Hello, {name}" という応答が返されるようにします。

  1. 次のいずれかのクイックスタートに従って、Azure Functions アプリを作成、デプロイします。

  2. Azure Functions プロジェクトを発行するときに、このチュートリアルの中で作成したFunction App リソースを選択します。

  3. 関数がデプロイされていることを確認します。

    Deployed function in list of functions

関数を直接呼び出す

  1. 関数へのアクセスをテストするには、関数の URL をコピーする必要があります。 デプロイされた関数を選択し、 [Get Function Url](関数の URL の取得) を選択します。 次に、 [コピー] ボタンをクリックして、クリップボードに URL をコピーします。

    Copy the function URL

  2. URL を Web ブラウザーに貼り付けます。 次に、仮想ネットワークの外部にあるコンピューターからFunction App にアクセスしようとすると、アプリへのアクセスが禁止されていることを示す HTTP 403 応答が返されます。

仮想ネットワークから関数を呼び出す

仮想ネットワーク上に構成されている VM の Web ブラウザーからは、(Azure Bastion サービスを使用して) 関数にアクセスすることができます。

Access the Azure Function via Azure Bastion

リソースをクリーンアップする

前の手順では、リソース グループ内に Azure リソースを作成しました。 これらのリソースが将来必要になると思わない場合は、リソース グループを削除してリソースを削除できます。

Azure portal メニューまたは [ホーム] ページから、 [リソース グループ] を選択します。 次に、 [リソース グループ] ページで [myResourceGroup] を選択します。

[myResourceGroup] ページで、一覧表示されたリソースが、削除しようとするリソースであることを確認します。

[リソース グループの削除] を選択し、確認のためテキスト ボックスに「myResourceGroup」と入力して、 [削除] を選択します。

次のステップ