この記事では、Azure Functionsのホスティング オプションで使用できるネットワーク機能について説明します。 以下に示すネットワーク オプションは、受信ネットワーク機能と送信ネットワーク機能として分類することができます。 受信機能を使用すると、アプリに対するアクセスを制限できます。一方、送信機能を使用すると、仮想ネットワークでセキュリティ保護されているリソースに接続でき、送信トラフィックのルーティング方法を制御することができます。
ホスティング モデルには、さまざまなレベルのネットワーク分離機能があります。 正しいものを選択することで、ネットワーク分離の要件を満たすことができます。
| 特徴量 | Flex 従量課金プラン | 従量課金プラン | Premium プラン | 専用プラン/ASE | Container Apps1 |
|---|---|---|---|---|---|
| 受信アクセスの制限 | ✅ | ✅ | ✅ | ✅ | ✅ 2 |
| プライベートエンドポイント (インバウンド) | ✅ | ❌ | ✅ | ✅ | ❌ |
| サービス エンドポイント (受信) | ✅ | ❌ | ✅ | ✅ | ✅ |
| 仮想ネットワーク統合 (送信) | ✅ | ❌ | ✅ | ✅ 3 | ✅ |
| ハイブリッド接続 | ❌ | ❌ | ✅ (Windowsのみ) | ✅ (Windowsのみ) | ✅ (Windowsのみ) |
- 詳細については、「Azure Container Apps 環境でのNetworkingを参照してください。
- Container Apps 環境の イングレス構成によって管理されます。
- Dedicated/ASE プランでは、 ゲートウェイが必要な仮想ネットワーク統合もサポートされています。
クイックスタート リソース
次のリソースを使用して、Azure Functionsのネットワーク シナリオをすばやく開始します。 これらのリソースは、記事全体で参照されています。
- ARM テンプレート、Bicep ファイル、Terraform テンプレート:
- ARM テンプレートのみ:
- チュートリアル:
受信アクセス制限
アクセス制限を使用して、アプリへのアクセスを許可または拒否する IP アドレスの優先順位付きリストを定義できます。 この一覧には、IPv4 と IPv6 のアドレス、またはサービス エンドポイントを使用する特定の仮想ネットワーク サブネットを含めることができます。 1 つ以上のエントリがある場合、リストの最後にあるものは暗黙的に "すべて拒否" になります。 IP 制限は、すべての関数ホスティング オプションで有効です。
注
ネットワーク制限が適用された状態でデプロイできるのは、仮想ネットワーク内から、または Safe Recipients リストでAzure ポータルにアクセスするために使用しているマシンの IP アドレスを設定した場合のみです。 ただし、ポータルを使用して関数を管理することもできます。
詳細については、「Azure App Service静的アクセス制限を参照してください。
Container Apps で実行する場合、受信アクセスは、App Service のアクセス制限ではなく、Container Apps 環境のイングレス構成によって管理されます。 詳細については、Azure Container Apps の
プライベート エンドポイント (インバウンド)
Azure プライベート エンドポイント は、Azure Private Linkを利用するサービスにプライベートかつ安全に接続するネットワーク インターフェイスです。 プライベート エンドポイントでは、仮想ネットワークのプライベート IP アドレスを使用して、サービスが仮想ネットワークに実質的に組み込まれます。
Flex Consumption、Elastic Premium、Dedicated (App Service) プランでホストされている関数にプライベート エンドポイントを使用できます。
プライベート エンドポイントを呼び出す場合は、DNS 参照がプライベート エンドポイントに解決されていることを確認する必要があります。 この動作は、次のいずれかの方法で実現できます。
- Azure DNSプライベート ゾーンと統合します。 仮想ネットワークにカスタム DNS サーバーがない場合、これは自動的に行われます。
- アプリで使用される DNS サーバーでプライベート エンドポイントを管理する。 プライベート エンドポイントを管理するには、エンドポイント アドレスを把握し、A レコードを使用して、到達しようとしているエンドポイントを参照する必要があります。
- Azure DNSプライベート ゾーンに転送するように独自の DNS サーバーを構成します。
詳細については、「
ストレージやサービス バスなどのプライベート エンドポイント接続を持つその他のサービスを呼び出すには、必ずプライベート エンドポイントへの送信呼び出しを行うようにアプリを構成してください。 関数アプリのストレージ アカウントでプライベート エンドポイントを使用する方法の詳細については、「お使いのストレージ アカウントを仮想ネットワークに制限する」をご覧ください。
サービス エンドポイント (受信)
サービス エンドポイントを使用すると、多くのAzure サービスを選択した仮想ネットワーク サブネットに制限して、より高いレベルのセキュリティを提供できます。 リージョン仮想ネットワーク統合により、関数アプリは、サービス エンドポイントで保護されたAzureサービスに到達できます。 この構成は、仮想ネットワークの統合をサポートするすべての計画でサポートされています。 セキュリティで保護されているサービス エンドポイントにアクセスするには、次の手順に従います。
- 特定のサブネットに接続するには、関数アプリとのリージョン仮想ネットワーク統合を構成します。
- 対象のサービスに移動し、統合サブネットに対してサービス エンドポイントを構成します。
詳細については、「仮想ネットワーク サービス エンドポイント」を参照してください。
サービス エンドポイントの使用
特定のサブネットへのアクセスを制限するには、Virtual Network 型の制限規則を作成します。 その後、アクセスを許可または拒否するサブスクリプション、仮想ネットワーク、およびサブネットを選択できます。
選択したサブネットに対して Microsoft.Web でサービス エンドポイントがまだ有効になっていない場合、不足している Microsoft.Web サービス エンドポイントを無視する チェック ボックスを選択しない限り、自動的に有効になります。 サービス エンドポイントをアプリで有効にしてサブネットでは有効にしないというシナリオは、主としてサブネット上でそれらを有効にするためのアクセス許可があるかどうかに依存します。
サブネットで他のユーザーがサービス エンドポイントを有効にする必要がある場合は、Microsoft.Web サービス エンドポイントの欠如を無視する チェック ボックスを選択してください。 アプリをサービス エンドポイント用に構成し、後でサブネットで有効にします。
サービス エンドポイントを使用して、App Service Environmentで実行されるアプリへのアクセスを制限することはできません。 アプリがApp Service Environment内にある場合は、IP アクセス規則を適用してアクセスを制御できます。
サービス エンドポイントを設定する方法については、「Azure Functions のプライベート サイト アクセスを確立する」を参照してください。
仮想ネットワーク統合 (アウトバウンド)
このセクションでは、アプリからのデータ送信を制御するために Azure Functions でサポートされる機能について詳しく説明します。
仮想ネットワーク統合により、関数アプリは仮想ネットワーク内のリソースにアクセスできます。 統合されると、アプリは、送信トラフィックを仮想ネットワーク経由でルーティングします。 これにより、アプリは、選択したサブネットからのトラフィックのみを許可するルールを使用して、プライベート エンドポイントまたはリソースにアクセスできます。 宛先が仮想ネットワークの外部の IP アドレスである場合、NAT ゲートウェイを構成していない限り、ソース IP はアプリのプロパティに一覧表示されているアドレスのいずれかから送信されます。
Azure Functionsでは、推奨される方法であるリージョンの仮想ネットワーク統合がサポートされています。 仮想ネットワーク統合を設定する方法については、仮想ネットワーク統合の有効化に関する記事を参照してください。
Azure Functionsでは、次の 2 種類の仮想ネットワーク統合がサポートされています。
仮想ネットワーク統合を設定する方法については、仮想ネットワーク統合の有効化に関する記事を参照してください。
リージョン仮想ネットワーク統合 (送信)
リージョン仮想ネットワーク統合を使用すると、アプリは次のものにアクセスできるようになります。
- アプリと同じ仮想ネットワーク内のリソース。
- アプリが統合されている仮想ネットワークとピアリングされた仮想ネットワーク内のリソース。
- サービス エンドポイントでセキュリティ保護されたサービス。
- Azure ExpressRoute接続間のリソース。
- Azure ExpressRoute接続を含む、ピアリングされた接続間のリソース。
- プライベート エンドポイント。
リージョン仮想ネットワーク統合を使用する場合は、次のAzureネットワーク機能を使用できます。
- ネットワーク セキュリティ グループ (NSG): 統合サブネットに配置された NSG で送信トラフィックをブロックできます。 仮想ネットワーク統合を使ってアプリへの受信アクセスを提供することはできないため、受信規則は適用されません。
- ルート テーブル (UDR): 統合サブネットにルート テーブルを配置し、必要な場所に送信トラフィックを送信できます。
注
すべての送信トラフィックを仮想ネットワークにルーティングする場合は、統合サブネットに適用される NSG と UDR に従います。 仮想ネットワークが統合されている場合、他の場所にトラフィックを誘導するルートを指定しない限り、関数アプリのパブリック IP アドレスへの送信トラフィックは、アプリのプロパティに一覧表示されているアドレスから送信されます。
リージョン仮想ネットワーク統合ではポート 25 を使用できません。
Flex 従量課金プランに関する考慮事項:
- アプリと仮想ネットワークが同じリージョンに存在する必要があります。
- サブスクリプションに対して
Microsoft.AppAzure リソース プロバイダーが有効になっていることを確認します。次の手順を実行します。 これは、サブネットの委任に必要です。 仮想ネットワーク統合はアプリの作成後いつでも有効にできるため、Azure ポータルとAzure CLIでは、Flex Consumption アプリの作成時にこの登録が適用されます。 - Flex 従量課金プランで実行する場合に必要なサブネット委任は、
Microsoft.App/environmentsです。 これは、委任要件が異なるエラスティック Premium および専用 (App Service) とは異なります。 - アプリが 40 個を超えてスケーリングする場合でも、1 つの関数アプリに対して最大 40 個の IP アドレスを使用するように計画できます。 たとえば、同じサブネットに統合されている Flex 従量課金関数アプリが 15 個ある場合、最大で 15 x 40 = 600 個の IP アドレスの使用を計画する必要があります。 この制限は変更される可能性があり、適用されません。
- 他の目的 (プライベートまたはサービス エンドポイント、または他のホスティング プランやサービスへの委任など) に既に使用されているサブネットは使用できません。 同じサブネットを複数の Flex 従量課金アプリで共有できますが、ネットワーク リソースがこれらの関数アプリ間で共有されるため、1 つの関数アプリが同じサブネット上の他の関数アプリのパフォーマンスに影響する可能性があります。
- Container Apps 環境と Flex Consumption アプリの間で同じサブネットを共有することはできません。
- Flex 従量課金プランでは現在、名前にアンダースコア (
_) 文字を含むサブネットはサポートされていません。
エラスティック Premium、専用 (App Service)、Container Apps プランに関する考慮事項:
- この機能は、エラスティック Premium と App Service Premium V2 および Premium V3 で使用できます。 また、Standard でも使用できますが、新しい App Service のデプロイからのみ利用できます。 以前のデプロイを使用している場合は、Premium V2 App Service プランからのみこの機能を使用できます。 Standard App Service プランでこの機能を使用できるようにするには、Premium V3 App Service プランでアプリを作成します。 それらのプランは、最新のデプロイでのみサポートされます。 その後、必要に応じてスケールダウンできます。
- App Service Environment内の分離されたプラン アプリでは、この機能を使用できません。
- アプリと仮想ネットワークが同じリージョンに存在する必要があります。
- この機能には、Azure Resource Manager仮想ネットワーク内の /28 以上のサブネットが必要です。
- 複数の App Service プランで統合サブネットを使用できます。
- App Service プランごとに最大 2 つのリージョン仮想ネットワーク統合を使用できます。 同じ App Service プラン内の複数のアプリが、同じ統合サブネットを使用できます。
- 選択するサブネットは、既に (プライベート エンドポイントやサービス エンドポイントなどで) 他の目的に使用されていたり、他のホスティング プランまたはサービスに委任されていたりしてはいけません。
- App Service プラン内の複数のアプリと同じサブネットを共有できます。 ネットワーク リソースはすべてのアプリで共有されるため、1 つの関数アプリが同じサブネット上の他のアプリのパフォーマンスに影響を与える可能性があります。
- 統合アプリがある仮想ネットワークを削除することはできません。 仮想ネットワークを削除する前に、統合を削除してください。
- リージョン仮想ネットワーク統合を使用しているアプリがあるときに、アプリまたはプランのサブスクリプションを変更することはできません。
仮想ネットワーク統合を有効にする
関数アプリの Azure ポータル の Settings で Networking を選択します。 次に、Virtual Network 統合 の「構成されていない」を選択して追加します。
仮想ネットワーク統合の追加を選択します。
ドロップダウン リストには、同じリージョン内のサブスクリプション内のすべてのAzure Resource Manager仮想ネットワークが含まれています。 統合する仮想ネットワークを選択します。
Flex 従量課金およびエラスティック Premium ホスティング プランは、リージョンの仮想ネットワーク統合のみをサポートします。 仮想ネットワークが同じリージョンにある場合は、新しいサブネットを作成するか、空の既存のサブネットを選択します。
別のリージョンの仮想ネットワークを選択するには、ポイント対サイトが有効になっている仮想ネットワーク ゲートウェイがプロビジョニングされている必要があります。 リージョン間の仮想ネットワーク統合は Dedicated プランでのみサポートされますが、グローバル ピアリングはリージョン仮想ネットワーク統合と連携します。
統合中にアプリは再起動されます。 統合が完了すると、統合されている仮想ネットワークの詳細が表示されます。 既定では、[ルートすべて] が有効になり、すべてのトラフィックが仮想ネットワークにルーティングされます。
プライベート トラフィック (RFC1918 トラフィック) のみをルーティングする場合は、App Service に関するこちらの記事の手順に従ってください。
サブネット
仮想ネットワーク統合は、専用サブネットに依存します。 サブネットをプロビジョニングすると、Azureは内部使用のために最初の 5 つの IP アドレスを予約します。 残りの IP アドレスの使用方法は、ホスティング プランによって異なります。 割り当てた後はサブネット サイズを変更できないため、アプリが到達する可能性のあるスケールに対応できるだけの十分な大きさを持つサブネットを使用してください。
次の表は、各ホスティング プランのサブネット要件をまとめたものです。
| ホスティング プラン | VNet 統合 | 最小サブネット サイズ | 推奨されるサブネット サイズ | サブネットの委任 |
|---|---|---|---|---|
| Flex 従量課金 | サポートされている | /27 | /27 (単一アプリ)、/26 (複数のアプリ) | Microsoft.App/environments |
| Elastic Premium (Windows) | サポートされている | /28 | /24 | Microsoft.Web/serverFarms |
| Elastic Premium (Linux) | サポートされている | /28 | /26 | Microsoft.Web/serverFarms |
| 専用 (App Service) プラン | サポートされている | /28 | /26 以上 | Microsoft.Web/serverFarms |
| Container Apps | 環境別に管理 | Container Apps のネットワークを参照してください | Container Apps のネットワークを参照してください | Microsoft.App/environments |
| 従量課金 | サポートしていません | N/A | N/A | N/A |
プラン固有の詳細については、記事の上部にあるホスティング プランを必ず選択してください。
Azure Container Apps で実行する場合、仮想ネットワーク統合は Container Apps 環境を介して管理されます。 サブネットのサイズ設定と構成は、関数アプリによって直接ではなく、Container Apps 環境によって決まります。 詳細については、「Azure Container Apps 環境でのNetworkingを参照してください。
Elastic Premium および専用 (App Service) プランでは、関数アプリの実行中の各インスタンスがサブネットから 1 つの IP アドレスを使用します。 スケールアップまたはスケールダウンすると、移行に対応するために必要なアドレス空間が一時的に 2 倍になる場合があります。 複数のアプリが同じサブネットを共有する場合、IP アドレスの合計使用量は、それらのアプリ全体のすべてのインスタンスの合計に加えて、イベントのスケーリング中に一時的に 2 倍になります。
IP 従量課金シナリオ
| Scenario | IP アドレスの使用量 |
|---|---|
| 1 つのアプリ、1 つのインスタンス | 1 つの IP アドレス |
| 1 つのアプリ、5 つのインスタンス | 5 つの IP アドレス |
| 1 つのアプリ、5 から 10 インスタンスへのスケーリング | 最大 20 個の IP アドレス (スケール操作中は一時的) |
| 3 つのアプリ、それぞれ 5 つのインスタンス | 15 個の IP アドレス |
CIDR 範囲の推奨事項
| CIDR ブロック サイズ | 使用可能なアドレスの最大数 | 最大水平スケール (インスタンス)1 |
|---|---|---|
| /28 | 11 | 5 |
| /27 | 二十七 | 13 |
| /26 | 59 | 二十九 |
| /25 | 123 | 612 |
| /24 | 251 | 1253 |
- ある時点でサイズまたは SKU をスケールアップまたはスケールダウンする必要があることを前提としています。
- IP アドレスの数は 61 インスタンスをサポートしますが、専用プランの個々のアプリの 最大インスタンス数は 30 です。
- IP アドレスの数は 125 インスタンスをサポートしていますが、Elastic Premium プランの個々のアプリの インスタンスの最大数は 100 です。
その他の考慮事項
- Functions Elastic Premium プランのサブネット容量に関する問題を回避するには、/24 と 256 個のアドレス (Windows用)、/26 (Linux の場合は 64 個のアドレス) を使用する必要があります。 仮想ネットワークとの統合の一環としてAzureポータルでサブネットを作成する場合は、Windowsと Linux にそれぞれ最小サイズ /24 と /26 が必要です。
- 各 App Service プランでは、VNet 統合に使用できる最大 2 つのサブネットをサポートできます。 単一の App Service プランの複数のアプリは同じサブネットに参加できますが、別のプランのアプリは、その同じサブネットを使用できません。
Flex 従量課金プランでは、関数アプリ インスタンスからの送信ネットワーク トラフィックは、サブネット専用の共有ゲートウェイを介してルーティングされます。 統合されているアプリの数に関係なく、サブネットごとに最大 27 個の共有ゲートウェイ (27 個の IP アドレス) が使用されます。 サブネットが使用されるインスタンスが多すぎる場合や、I/O 集中型ワークロードを実行するアプリの場合、待機時間やタイムアウトの増加などのネットワーク容量の問題が発生する可能性があります。 アプリのスケールアウトは影響を受けることはありません。
重要
/27 未満のサブネット サイズを持つ Flex Consumption 関数アプリを統合するか、複数のアプリを /27 サイズのサブネットに統合すると、使用可能な送信ネットワーク容量が削減されます。 これを行う場合は、運用規模のワークロードでアプリをロード テストし、ネットワーク容量の制約が観察されないようにします。
CIDR 範囲の推奨事項
| CIDR ブロック サイズ | 使用可能なアドレス | 最大インスタンス数 | レコメンデーション |
|---|---|---|---|
| /27 | 二十七 | 1,000 | 1 つの機能専用のアプリとして使用することが推奨されます。 |
| /26 | 59 | 1,000+ | 複数のアプリ、または 1,000 インスタンスを超えてスケーリングする場合に推奨* |
* 最大インスタンス数の増加を要求するには、製品グループに問い合わせてください。
ネットワーク セキュリティ グループ
仮想ネットワーク内のリソース間のトラフィックは、ネットワーク セキュリティ グループを使用して制御できます。 たとえば、アプリの送信トラフィックが仮想ネットワーク内のリソースに到達するか、またはネットワークから離れるのをブロックするセキュリティ規則を作成できます。 これらのセキュリティ規則は、仮想ネットワーク統合が構成されたアプリに適用されます。 パブリック アドレスへのトラフィックをブロックするには、仮想ネットワーク統合が必要であり、[すべてをルーティング] を有効にする必要があります。 仮想ネットワーク統合はアプリからの送信トラフィックのみに影響を与えるため、NSG での受信規則はアプリに適用されません。
アプリへの受信トラフィックを制御するには、アクセス制限機能を使用します。 統合サブネットに適用される NSG は、統合サブネットに適用されているルートに関係なく有効になります。 関数アプリが、[すべてをルーティング] が有効になっている仮想ネットワークに統合されており、統合サブネット上のパブリック アドレス トラフィックに影響するルートがない場合でも、すべての送信トラフィックは、統合サブネットに割り当てられた NSG の対象になります。 [すべてをルーティング] が有効になっていない場合、NSG は RFC1918 トラフィックにのみ適用されます。
ルート
ルート テーブルを使用して、アプリからの送信トラフィックを任意の場所にルーティングすることができます。 既定では、ルート テーブルは、RFC1918 の送信先トラフィックのみに影響を与えます。 [すべてをルーティング] が有効になっている場合、すべての送信呼び出しが影響を受けます。 Route All を無効にすると、ルート テーブルはプライベート トラフィック (RFC1918) にのみ影響します。 統合サブネット上に設定されているルートは、受信アプリ要求への応答には影響を与えません。 一般的な宛先には、ファイアウォール デバイスまたはゲートウェイを含めることができます。
オンプレミスのすべての送信トラフィックをルーティングする場合は、ルート テーブルを使用して、すべての送信トラフィックを ExpressRoute ゲートウェイに送信できます。 ゲートウェイにトラフィックをルーティングする場合は、外部ネットワークのルートを設定して、応答を返信するようにしてください。
また、Border Gateway Protocol (BGP) ルートも、アプリのトラフィックに影響を与えます。 ExpressRoute ゲートウェイのようなものから BGP ルートを使用している場合は、アプリの送信トラフィックが影響を受けます。 既定では、BGP ルートは、RFC1918 の送信先トラフィックにのみ影響を与えます。 関数アプリが Route All が有効になっている仮想ネットワークに統合されている場合、すべての送信トラフィックが BGP ルートの影響を受ける可能性があります。
送信 IP の制限
App Service Environmentがデプロイされている仮想ネットワークの送信制限を構成できます。
エラスティック Premium プランまたは App Service プランの関数アプリを仮想ネットワークと統合した場合でも、アプリは既定でインターネットへの送信呼び出しを行うことができます。 [すべてをルーティング] が有効になっている VNet と関数アプリを統合することにより、すべての送信トラフィックが仮想ネットワークに強制的に送信されます。この場合は、ネットワーク セキュリティ グループのルールを使用してトラフィックを制限できます。 Flex Consumption の場合、すべてのトラフィックは仮想ネットワーク経由で既にルーティングされており、 すべてルーティング は必要ありません。
仮想ネットワークを使用して送信 IP を制御する方法については、「Tutorial: Azure 仮想ネットワーク NAT ゲートウェイで Azure Functions の送信 IP を制御する」を参照してください。
プライベート ゾーンのAzure DNS
アプリが仮想ネットワークと統合されると、仮想ネットワークが構成されているのと同じ DNS サーバーが使用され、仮想ネットワークにリンクされているAzure DNSプライベート ゾーンで動作します。
Automation
次の API では、リージョンでの仮想ネットワーク統合をプログラミングで管理できます。
-
Azure CLI:
az functionapp vnet-integrationコマンドを使用して、リージョンの仮想ネットワーク統合を追加、一覧表示、または削除します。 - ARM テンプレート: Azure Resource Manager テンプレートを使用してリージョン仮想ネットワーク統合を有効にすることができます。 完全な例については、こちらの関数クイックスタート テンプレート ページを参照してください。
ハイブリッド接続
Hybrid Connections は、他のネットワーク内のアプリケーション リソースにアクセスするために使用できるAzure Relayの機能です。 アプリからアプリケーション エンドポイントにアクセスできます。 アプリケーションにアクセスするために使用することはできません。
Azure Functionsで使用されているように、各ハイブリッド接続は 1 つの TCP ホストとポートの組み合わせに関連付けられます。 つまり、TCP リッスン ポートにアクセスしている限り、任意のオペレーティング システムの任意のアプリケーションがハイブリッド接続のエンドポイントになることができます。 ハイブリッド接続機能では、アプリケーション プロトコルやアクセス先は認識されません。 ネットワーク アクセスを提供するだけです。
詳細については、ハイブリッド接続に関する App Service ドキュメントを参照してください。 これらの同じ構成手順でAzure Functionsがサポートされます。
重要
ハイブリッド接続は、関数アプリがWindowsで実行されている場合にのみサポートされます。 Linux アプリはサポートされません。
仮想ネットワーク経由で Azure サービスに接続する
仮想ネットワーク統合により、関数アプリは仮想ネットワーク内のリソースにアクセスできます。 このセクションでは、アプリを特定のサービスに接続する際に考慮すべき検討事項について概説します。
お使いのストレージ アカウントを仮想ネットワークに制限する
注
ストレージ アカウントでプライベート エンドポイントが有効になっている関数アプリをすばやくデプロイするには、次のテンプレートを参照してください:Function アプリとAzure Storageプライベート エンドポイント。
関数アプリを作成するときは、Blob、Queue、Table Storage をサポートする汎用Azure Storage アカウントを作成またはリンクする必要があります。 このストレージ アカウントは、サービス エンドポイントまたはプライベート エンドポイントで保護されているものに置き換えることができます。
仮想ネットワークでセキュリティ保護されたストレージ アカウントを使用して関数アプリを構成する方法については、「お使いのストレージ アカウントを仮想ネットワークに制限する」を参照してください。
プライベート コンテンツ共有ルーティング が構成されていることを確認する必要があります。 仮想ネットワークでセキュリティ保護されたストレージ アカウントを使用して関数アプリを構成する方法については、「お使いのストレージ アカウントを仮想ネットワークに制限する」を参照してください。
仮想ネットワークでセキュリティ保護されたストレージ アカウントを使用して関数アプリを構成する方法については、「お使いのストレージ アカウントを仮想ネットワークに制限する」を参照してください。
Key Vault参照を使用する
Azure Key Vault参照を使用して、コードの変更を必要とせずに、Azure Functions アプリケーションのAzure Key Vaultのシークレットを使用できます。 Azure Key Vaultは、アクセス ポリシーと監査履歴を完全に制御できる、一元化されたシークレット管理を提供するサービスです。
仮想ネットワーク統合がアプリ用に構成されている場合は、Key Vault参照を使用して、ネットワーク制限付きコンテナーからシークレットを取得できます。
仮想ネットワーク トリガー (非 HTTP)
ワークロードでは、仮想ネットワークによって保護されたイベント ソースからアプリをトリガーする必要がある場合があります。
注
Azure Container Appsで実行すると、仮想ネットワーク トリガーは Container Apps 環境のネットワーク構成を介して管理されます。 詳細については、「Azure Container Apps 環境でのNetworkingを参照してください。
Flex 従量課金プランでは、仮想ネットワーク トリガーがネイティブにサポートされます。 関数アプリは、ランタイム スケール監視用の追加の構成を必要とせずに、仮想ネットワークによって保護されたイベント ソースからトリガーできます。
Elastic Premium プランを使用すると、仮想ネットワークによってセキュリティ保護されたサービスをトリガーする関数を作成できます。 これらの非 HTTP トリガーは、"仮想ネットワーク トリガー" と呼ばれます。
Elastic Premium プランを使用すると、仮想ネットワークによってセキュリティ保護されたサービスをトリガーする関数を作成できます。
既定では、仮想ネットワーク トリガーによって、関数アプリが、プレウォームされたインスタンス数を超えてスケーリングされることはありません。 ただし、特定の拡張機能では、関数アプリの動的なスケーリングが行われる仮想ネットワーク トリガーがサポートされています。 次のいずれかの方法を使うと、サポートされている拡張機能の関数アプリでこの "動的スケーリング監視" を有効にできます。
Azure ポータルで、関数アプリに移動します。
[設定] で [構成] を選び、[関数のランタイム設定] タブで [Runtime Scale Monitoring] (ランタイム スケール監視) を [オン] に設定します。
[保存] を選んで関数アプリの構成を更新し、アプリを再起動します。
ヒント
仮想ネットワーク トリガーの監視を有効にすると、アプリケーションのパフォーマンスに影響を与える可能性がありますが、影響は小さい可能性があります。
仮想ネットワーク トリガーの動的スケーリング監視のサポートは、Functions ランタイムのバージョン 1.x では利用できません。
この表の拡張機能では、仮想ネットワーク トリガーの動的スケーリング監視がサポートされています。 最適なスケーリング パフォーマンスを得るには、ターゲット ベースのスケーリングもサポートするバージョンにアップグレードする必要があります。
| 拡張機能 (最小バージョン) | 実行時スケーリング監視のみ | ターゲット ベースのスケーリングあり |
|---|---|---|
| Microsoft.Azure。WebJobs.Extensions.CosmosDB | > 3.0.5 | > 4.1.0 |
| Microsoft.Azure。WebJobs.Extensions.DurableTask | > 2.0.0 | 該当なし |
| Microsoft.Azure。WebJobs.Extensions.EventHubs | > 4.1.0 | > 5.2.0 |
| Microsoft.Azure。WebJobs.Extensions.ServiceBus | > 3.2.0 | > 5.9.0 |
| Microsoft.Azure。WebJobs.Extensions.Storage | > 3.0.10 | > 5.1.0* |
* Queue Storage のみ。
重要
仮想ネットワーク トリガーの監視を有効にすると、これらの拡張機能のトリガーだけが、アプリを動的にスケーリングできます。 このテーブルに含まれていない拡張機能のトリガーは引き続き使用できますが、事前に予約されたインスタンス数を超えるスケーリングは発生しません。 すべてのトリガーとバインド拡張機能の完全な一覧については、トリガーとバインドに関する記事をご覧ください。
関数アプリが App Service プランまたはApp Service Environmentのいずれかで実行されている場合は、仮想ネットワーク トリガーによってセキュリティ保護されたリソースを含む関数を記述できます。 関数が正しくトリガーされるようにするには、トリガー接続で定義されているリソースにアクセスできる仮想ネットワークに、アプリを接続する必要があります。
たとえば、仮想ネットワークからのトラフィックのみを受け入れるようにAzure Cosmos DBを構成するとします。 この場合、その仮想ネットワークとの仮想ネットワーク統合を提供する App Service プランで関数アプリをデプロイする必要があります。 統合により、Azure Cosmos DB リソースが関数をトリガーできるようにします。
プライベート エンドポイントのテスト
プライベート エンドポイントを使用して関数アプリで関数をテストする場合、そのネットワーク内の仮想マシン (VM) など、同じ仮想ネットワーク内からテストを行う必要があります。 その VM からポータルで [コードとテスト] オプションを使用するには、次の CORS オリジンを関数アプリに追加する必要があります。
https://functions-next.azure.comhttps://functions-staging.azure.comhttps://functions.azure.comhttps://portal.azure.com
プライベート エンドポイントまたはその他のアクセス制限を使用して関数アプリへのアクセスを制限する場合は、サービス タグ AzureCloud を許可リストに追加する必要もあります。 許可リストを更新するには:
関数アプリに移動し、 設定>Networking を選択します。 [ 受信トラフィックの構成>パブリック ネットワーク アクセス] で、[ アクセス制限なしで有効] を選択します。
[パブリック ネットワーク アクセス] が [選択した仮想ネットワークと IP アドレスから有効] に設定されていることを確認します。
[サイトのアクセスとルール] の [規則を追加する]:
[ソース] 設定の
Service Tagとして 、AzureCloudとして を選びます。アクションが [許可] であることを確認し、目的の名前と優先度を設定します。
トラブルシューティング
機能は簡単にセットアップできますが、問題が発生しないという意味ではありません。 目的のエンドポイントへのアクセスに関して問題が発生した場合は、アプリのコンソールからの接続をテストするために、いくつかのユーティリティを利用できます。 利用できるコンソールが 2 つあります。 1 つは Kudu コンソールで、もう 1 つは Azure ポータルのコンソールです。 アプリから Kudu コンソールにアクセスするには、[ツール]>[Kudu] の順に移動します。 [サイト名].scm.azurewebsites.net で Kudo コンソールにアクセスすることもできます。 Web サイトが読み込まれたら、Debug コンソール タブに移動します。アプリからポータルでホストAzureコンソールにアクセスするには、Tools>Console に移動します。
ツール
ネイティブ Windows アプリでは、ツールping、 nslookup、および tracert は、セキュリティ上の制約のためにコンソールで動作しません (custom Windows コンテナーで動作します)。 それを補うために、2 つの独立したツールが追加されています。 DNS 機能をテストするために、nameresolver.exe という名前のツールを追加しました。 の構文は次のとおりです。
nameresolver.exe hostname [optional: DNS Server]
nameresolver を使用すると、アプリが依存しているホスト名を確認できます。 この方法によって、DNS の構成に誤りがあるかどうかや、DNS サーバーへのアクセス権がないかどうかをテストできます。 環境変数 WEBSITE_DNS_SERVER と WEBSITE_DNS_ALT_SERVER を調べることによって、アプリによって使用される DNS サーバーをコンソール上で確認できます。
注
現在、nameresolver.exe ツールはカスタム Windows コンテナーでは機能しません。
次のツールを使用して、ホストとポートを組み合わせたものへの TCP 接続をテストすることができます。 このツールは tcpping という名前で、構文は次のとおりです。
tcpping.exe hostname [optional: port]
tcpping ユーティリティを使用すると、特定のホストとポートにアクセスできるかどうかがわかります。 成功として示されるのは、ホストとポートの組み合わせでリッスンしているアプリケーションがあり、アプリから指定のホストとポートへのネットワーク アクセスがある場合のみです。
仮想ネットワークによってホストされたリソースへのアクセスをデバッグする
さまざまな要因によって、アプリから特定のホストとポートへのアクセスが妨げられる場合があります。 ほとんどの場合は、次のいずれかに該当します。
- ファイアウォールがルートを塞いでいる。 ルートを塞いでいるファイアウォールがあると、TCP タイムアウトに達します。 この場合の TCP タイムアウトは 21 秒です。 tcpping ツールを使用して接続をテストします。 TCP タイムアウトには、ファイアウォール以外にさまざまな要因が考えられますが、まずはここから開始します。
- DNS にアクセスできない。 DNS タイムアウトは、DNS サーバーごとに 3 秒です。 2 つの DNS サーバーがある場合、タイムアウトは 6 秒です。 nameresolver を使用して、DNS が機能しているかどうかを確認します。 nslookup では仮想ネットワークの構成に使用されている DNS を利用しないため、nslookup を使うことはできません。 アクセスできない場合は、ファイアウォールが存在するか、NSG が DNS へのアクセスをブロックしているか、または DNS が停止している可能性があります。
これらの項目が問題の回答になっていない場合は、まず次のような点を確認してください。
リージョンでの仮想ネットワーク統合
- 宛先は RFC1918 以外のアドレスであり、[すべてルーティング] が有効になっていないこと。
- 統合サブネットからのエグレスをブロックしている NSG は存在するか。
- Azure ExpressRouteまたは VPN を経由する場合、トラフィックをAzureにルーティングするようにオンプレミス ゲートウェイが構成されていますか? 仮想ネットワーク内のエンドポイントには到達できるが、オンプレミスに到達できない場合は、ルートを確認します。
- 統合サブネットに委任を設定するための十分なアクセス許可があるか。 リージョン仮想ネットワーク統合の構成中に、統合サブネットがMicrosoftに委任されます。Web/serverFarms。 VNet 統合 UI は、サブネットを Microsoft.Web/serverFarms に自動的に委任します。 アカウントに委任を設定するための十分なネットワークのアクセス許可がない場合は、サブネットを委任するために、統合サブネットに属性を設定できるユーザーが必要になります。 統合サブネットを手動で委任するには、Azure Virtual Network サブネット UI に移動し、Microsoft.Web/serverFarms への委任を設定します。
ゲートウェイが必要な仮想ネットワーク統合
- ポイント対サイトのアドレス範囲が RFC 1918 の範囲 (10.0.0.0-10.255.255.255/172.16.0.0-172.31.255.255/192.168.0.0-192.168.255.255) にあるか。
- ゲートウェイはポータル上に稼働中として表示されているか。 ゲートウェイがダウンしている場合は、再起動してください。
- 証明書は同期していると表示されているか。または、ネットワーク構成が変更されたことが疑われるか。 証明書が同期していないか、または ASP と同期していない仮想ネットワーク構成への変更が行われたことが疑われる場合は、[ネットワークの同期] を選択します。
- VPN を経由する場合、トラフィックをAzureにルーティングするようにオンプレミス ゲートウェイが構成されていますか? 仮想ネットワーク内のエンドポイントには到達できるが、オンプレミスに到達できない場合は、ルートを確認します。
- ポイント対サイトと ExpressRoute の両方をサポートする共存ゲートウェイを使用しようとしているか。 仮想ネットワーク統合では、共存ゲートウェイはサポートされていません。
ホストとポートの特定の組み合わせへのアクセスが何によってブロックされているかを確認できないため、ネットワークに関する問題のデバッグは厄介です。 次のような原因が考えられます。
- ホスト上で稼働しているファイアウォールが、ポイント対サイト IP の範囲からアプリケーション ポートへのアクセスを妨げている。 サブネットの境界を越えるには、多くの場合、パブリック アクセスが必要になります。
- ターゲット ホストがダウンしている。
- アプリケーションがダウンしている。
- IP またはホスト名が誤っている。
- アプリケーションが予期しないポートでリッスンしている。 エンドポイント ホストで "netstat-aon" を使用することで、プロセス ID と、リッスンしているポートを一致させることができます。
- ネットワーク セキュリティ グループが、ポイント対サイト IP の範囲からアプリケーション ホストとポートへのアクセスを妨げる手法で構成されている。
アプリによって実際にどのアドレスが使用されるかを把握することはできません。 統合サブネットまたはポイント対サイトのアドレス範囲内の任意のアドレスである可能性があるため、アドレス範囲全体からのアクセスを許可する必要があります。
その他のデバッグ手順は次のとおりです。
- 仮想ネットワーク内の VM に接続し、そこからリソースのホスト:ポートへのアクセスを試みます。 TCP アクセスのテストには、PowerShell コマンド Test-NetConnection を使用します。 の構文は次のとおりです。
Test-NetConnection hostname [optional: -Port]
- VM 上でアプリケーションを起動し、tcpping を使用して、アプリのコンソールからそのホストとポートへのアクセスをテストします。
オンプレミスのリソース
アプリからオンプレミスのリソースにアクセスできない場合は、仮想ネットワークからリソースにアクセスできるかどうかを確認します。 TCP アクセスを確認するには、PowerShell コマンド Test-NetConnection を使用します。 VM からオンプレミス リソースに到達できない場合は、VPN または ExpressRoute 接続が正しく構成されていない可能性があります。
仮想ネットワークでホストされている VM からオンプレミス システムにアクセスでき、アプリからはアクセスできない場合、以下のいずれかの理由が原因と考えられます。
- オンプレミスのゲートウェイで、ルートがサブネットまたはポイント対サイトのアドレス範囲に構成されていない。
- ネットワーク セキュリティ グループによって、ポイント対サイト IP 範囲へのアクセスがブロックされている。
- オンプレミスのファイアウォールによって、ポイント対サイト IP 範囲からのトラフィックがブロックされている。
- リージョン仮想ネットワーク統合機能を使用して、RFC 1918 以外のアドレスへのアクセスを試みている。
VNet 統合を切断する前に App Service プランまたは Web アプリを削除する
最初に VNet 統合を切断せずに Web アプリまたは App Service プランを削除した場合、削除したリソースとの統合に使用された仮想ネットワークまたはサブネットに対して、更新または削除操作を実行することはできません。 サブネット委任 'Microsoft。Web/serverFarms' は引き続きサブネットに割り当てられ、更新/削除操作を防ぎます。
サブネットまたは仮想ネットワークをもう一度更新または削除するには、VNet 統合を再作成してから切断する必要があります。
- App Service プランと Web アプリを再作成します (以前とまったく同じ Web アプリ名を使用する必要があります)。
- Web アプリの [ネットワーク] ブレードに移動し、VNet 統合を構成します。
- VNet 統合を構成したら、[切断] ボタンを選びます。
- App Service プランまたは Web アプリを削除します。
- サブネットまたは仮想ネットワークを更新または削除します。
上記の手順に従った後も VNet 統合に関する問題が引き続き発生する場合は、Microsoft サポートにお問い合わせください。
ネットワークのトラブルシューティング ツール
ネットワーク トラブルシューティング ツールを使用して、接続の問題を解決することもできます。 ネットワーク トラブルシューティング ツールを開くには、Azure ポータルでアプリに移動します。 [診断と問題の解決] を選択し、ネットワーク トラブルシューティング ツールを検索します。
接続に関する問題 - プランのすべてのインスタンスと DNS 設定にプライベート IP が割り当てられているかどうかを確認するなど、仮想ネットワーク統合の状態を確認します。 カスタム DNS が構成されていない場合は、既定のAzure DNSが適用されます。 トラブルシューティング ツールでは、Azure Storageやその他のバインド依存関係の接続など、一般的な関数アプリの依存関係もチェックされます。
構成の問題 - このトラブルシューティング ツールは、サブネットが仮想ネットワーク統合に有効かどうかを確認します。
サブネット/VNet の削除の問題 - このトラブルシューティング ツールは、サブネットにロックがあるかどうか、および VNet/サブネットの削除をブロックしている可能性がある未使用のサービス関連付けリンクがあるかどうかを確認します。
関連資料
ネットワークとAzure Functionsの詳細については、以下を参照してください。