App Service アプリにプライベート エンドポイントを使用する

重要

プライベート エンドポイントは、App Service プランの BasicStandardPremiumV2PremiumV3IsolatedV2Functions Premium (Elastic Premium プランとも呼ばれています) でホストされている Windows および Linux のアプリ (コンテナー化されているかどうかにかかわらず) に使用できます。

App Service アプリにプライベート エンドポイントを使用すると、プライベート ネットワーク内のクライアントが Azure Private Link を通じて安全にアプリにアクセスできるようになります。 プライベート エンドポイントでは、Azure 仮想ネットワーク アドレス空間の IP アドレスを使用します。 プライベート ネットワーク上のクライアントとアプリ間のネットワーク トラフィックは、仮想ネットワークおよび Microsoft バックボーン ネットワーク上の Private Link を経由することで、パブリック インターネットにさらされないようにします。

アプリにプライベート エンドポイントを使用することで、次のことが可能になります。

  • プライベート エンドポイントを構成することで、アプリをセキュリティで保護し、パブリック ネットワーク アクセスを無効にして、公衆への露出を排除します。
  • VPN または ExpressRoute のプライベート ピアリングを使用することで、仮想ネットワークに接続するオンプレミス ネットワークからアプリに安全に接続します。
  • 仮想ネットワークからのデータ流出を避ける。

概念の概要

プライベート エンドポイントは、仮想ネットワーク内のサブネットにある App Service アプリ用の特別なネットワーク インターフェイス (NIC) です。 アプリ用のプライベート エンドポイントを作成すると、プライベート ネットワーク上のクライアントとアプリ間の安全な接続が提供されます。 プライベート エンドポイントには、仮想ネットワークの IP アドレスの範囲から IP アドレスが割り当てられます。 プライベート エンドポイントとアプリ間の接続には、セキュリティで保護された Private Link が使用されます。 プライベート エンドポイントは、アプリへの受信トラフィックにのみ使用されます。 このプライベート エンドポイントは、送信トラフィックには使用されません。 仮想ネットワーク統合機能を使用して、別のサブネット内のネットワークに送信トラフィックを挿入できます。

アプリの各スロットは別々に構成されます。 スロットごとに最大 100 個のプライベート エンドポイントを接続できます。 スロット間で 1 つのプライベート エンドポイントを共有することはできません。 スロットのサブリソース名は sites-<slot-name> です。

プライベート エンドポイントを接続するサブネットに、別のリソースを含めることができます。専用の空のサブネットは必要ありません。 また、プライベート エンドポイントはアプリとは別のリージョンにデプロイすることもできます。

注意

仮想ネットワーク統合機能では、プライベート エンドポイントと同じサブネットを使用できません。これは、仮想ネットワーク統合機能の制限です。

セキュリティの観点から:

  • プライベート エンドポイントとパブリック アクセスは、アプリで共存できます。 詳細については、アクセス制限の概要に関するページを参照してください
  • アプリへのプライベート エンドポイントを有効にする場合は、確実な分離のために、パブリック ネットワーク アクセスが無効になっていることを確認します。
  • 別のリージョン内の仮想ネットワークを含め、別の仮想ネットワークとサブネットで複数のプライベート エンドポイントを有効にすることができます。
  • アプリのアクセス制限ルールは、プライベート エンドポイントを通じたトラフィックには評価されません。
  • 宛先が "インターネット" または "Azure サービス" になっているすべての NSG ルールを削除することによって、仮想ネットワークからのデータ流出リスクをなくすことができます。

アプリの Web HTTP ログで、クライアントのソース IP がわかります。 この機能は、TCP プロキシ プロトコルを使用して実装されていて、アプリにクライアント IP プロパティを転送します。 詳細については、「TCP プロキシ v2 を使用した接続情報の取得」を参照してください。

App Service アプリのプライベート エンドポイントの全体像

DNS

App Service アプリにプライベート エンドポイントを使用する場合は、要求した URL がアプリの名前と一致している必要があります。 既定値は mywebappname.azurewebsites.net です。

既定では、プライベート エンドポイントを使用しない場合、Web アプリのパブリック名はクラスターの正規の名前になります。 たとえば、名前解決は次のようになります。

名前 Type
mywebapp.azurewebsites.net CNAME clustername.azurewebsites.windows.net
clustername.azurewebsites.windows.net CNAME cloudservicename.cloudapp.net
cloudservicename.cloudapp.net A 40.122.110.154

プライベート エンドポイントをデプロイすると、DNS エントリは正規名の mywebapp.privatelink.azurewebsites.net を指すように更新されます。 たとえば、名前解決は次のようになります。

名前 Type 注記
mywebapp.azurewebsites.net CNAME mywebapp.privatelink.azurewebsites.net
mywebapp.privatelink.azurewebsites.net CNAME clustername.azurewebsites.windows.net
clustername.azurewebsites.windows.net CNAME cloudservicename.cloudapp.net
cloudservicename.cloudapp.net A 40.122.110.154 <-- このパブリック IP はプライベート エンドポイントではありません。403 エラーを受け取ります

プライベート DNS サーバーまたは Azure DNS プライベート ゾーンの設定が必要です。 テストの場合は、テスト マシンのホスト エントリを変更できます。 作成する必要がある DNS ゾーンは、privatelink.azurewebsites.net です。 A レコードとプライベート エンドポイント IP にアプリのレコードを登録します。 たとえば、名前解決は次のようになります。

名前 Type 注記
mywebapp.azurewebsites.net CNAME mywebapp.privatelink.azurewebsites.net <--Azure は、アプリのアドレスがプライベート エンドポイント アドレスをポイントするように、この CNAME エントリを Azure パブリック DNS に作成します
mywebapp.privatelink.azurewebsites.net A 10.10.10.8 <--このエントリはプライベート エンドポイントの IP アドレスを指すように DNS システムで管理します

この DNS 構成の後、既定の名前 mywebappname.azurewebsites.net を使用してアプリにプライベートに接続できます。 既定の証明書が *.azurewebsites.net に対して発行されるため、この名前を使用する必要があります。

カスタム DNS 名を使用する必要がある場合は、アプリにカスタム名を追加する必要があり、パブリック DNS 解決を使用して、他のカスタム名と同様にそのカスタム名を検証する必要があります。 詳細については、カスタム DNS 検証に関するページをご覧ください。

Kudu コンソールまたは Kudu REST API (Azure DevOps セルフホステッド エージェントを使用したデプロイなど) の場合には、Azure DNS プライベート ゾーンまたはカスタム DNS サーバーにプライベート エンドポイント IP を指す 2 つのレコードを作成する必要があります。 1 つはアプリ用、もう 1 つはアプリの SCM 用です。

名前 Type
mywebapp.privatelink.azurewebsites.net A PrivateEndpointIP
mywebapp.scm.privatelink.azurewebsites.net A PrivateEndpointIP

App Service Environment v3 の特別な考慮事項

IsolatedV2 プラン (App Service Environment v3) でホストされているアプリ用にプライベート エンドポイントを有効にするには、App Service Environment レベルでプライベート エンドポイントのサポートを有効にする必要があります。 この機能は、Azure portal の [App Service Environment configuration](Azure App Service Environment 構成) ペインから、または次のように CLI を使用してアクティブにできます。

az appservice ase update --name myasename --allow-new-private-endpoint-connections true

固有の要件

仮想ネットワークがアプリとは異なるサブスクリプションにある場合、仮想ネットワークがあるサブスクリプションが Microsoft.Web リソース プロバイダーに登録されていることを確認する必要があります。 プロバイダーは、こちらのドキュメントに従って明示的に登録できますが、サブスクリプションで最初の Web アプリを作成するときにも自動的に登録されます。

価格

料金の詳細については、「Azure Private Link の料金」をご覧ください。

制限事項

  • Elastic Premium プランで Azure Function をプライベート エンドポイントと共に使用する場合、Azure portal で関数を実行するには、ネットワークに直接アクセスする必要があります。そうしないと、HTTP 403 エラーが発生します。 つまり、Azure portal から関数を実行するには、ブラウザーからプライベート エンドポイントに到達できる必要があります。
  • 最大 100 個のプライベート エンドポイントを特定のアプリに接続できます。
  • リモート デバッグ機能は、プライベート エンドポイント経由では使用できません。 スロットにコードをデプロイし、そこでリモート デバッグすることをお勧めします。
  • FTP アクセスは、受信パブリック IP アドレスを介して提供されます。 プライベート エンドポイントでは、アプリへの FTP アクセスがサポートされていません。
  • IP ベースの SSL は、プライベート エンドポイントではサポートされていません。
  • プライベート エンドポイントを使用して構成するアプリでは、サービス エンドポイントベースのアクセス制限規則は使用できません。

Azure Private Link 機能とプライベート エンドポイントの改善は定期的に実施されています。制限に関する最新情報については、こちらの記事を確認してください。

次のステップ