App Service アプリにプライベート エンドポイントを使用する
Note
2024 年 6 月 1 日より、新しく作成されたすべての App Service アプリには、名前付け規則 <app-name>-<random-hash>.<region>.azurewebsites.net
を使用して一意の既定のホスト名を生成するオプションが備わります。 既存のアプリ名は変更されません。
例: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
詳細については、App Service リソースの一意の既定のホスト名に関するページを参照してください。
重要
プライベート エンドポイントは、App Service プランの Basic、Standard、PremiumV2、PremiumV3、IsolatedV2、Functions 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>
です。
プライベート エンドポイントを接続するサブネットに、別のリソースを含めることができます。専用の空のサブネットは必要ありません。 また、プライベート エンドポイントはアプリとは別のリージョンにデプロイすることもできます。
注意
仮想ネットワーク統合機能では、プライベート エンドポイントと同じサブネットを使用できません。これは、仮想ネットワーク統合機能の制限です。
セキュリティの観点から:
- プライベート エンドポイントとパブリック アクセスは、アプリで共存できます。 詳細については、アクセス制限の概要に関するページを参照してください
- アプリへのプライベート エンドポイントを有効にする場合は、確実な分離のために、パブリック ネットワーク アクセスが無効になっていることを確認します。
- 別のリージョン内の仮想ネットワークを含め、別の仮想ネットワークとサブネットで複数のプライベート エンドポイントを有効にすることができます。
- アプリのアクセス制限ルールは、プライベート エンドポイントを通じたトラフィックには評価されません。
- 宛先がタグ "Internet" または Azure サービスであるすべてのネットワーク セキュリティ グループ (NSG) ルールを削除すると、仮想ネットワークからのデータ流出リスクを排除できます。
アプリの Web HTTP ログで、クライアントのソース IP がわかります。 この機能は、TCP プロキシ プロトコルを使用して実装されていて、アプリにクライアント IP プロパティを転送します。 詳細については、「TCP プロキシ v2 を使用した接続情報の取得」を参照してください。
DNS
App Service アプリにプライベート エンドポイントを使用する場合は、要求した URL がアプリの名前と一致している必要があります。 既定では <app-name>.azurewebsites.net
です。 一意の既定のホスト名を使用している場合、アプリ名の形式は <app-name>-<random-hash>.<region>.azurewebsites.net
です。 次の例で、mywebapp は、完全なリージョン固有のホスト名を表すこともできます。
既定では、プライベート エンドポイントを使用しない場合、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 構成後、既定の名前 mywebapp.azurewebsites.net を使用してアプリにプライベートにアクセスできます。 既定の証明書が *.azurewebsites.net に対して発行されるため、この名前を使用する必要があります。
カスタム DNS 名を使用する必要がある場合は、アプリにカスタム名を追加する必要があり、パブリック DNS 解決を使用して、他のカスタム名と同様にそのカスタム名を検証する必要があります。 詳細については、カスタム DNS 検証に関するページをご覧ください。
Kudu コンソールまたは Kudu REST API (Azure DevOps Services セルフホステッド エージェントを使用したデプロイなど) の場合は、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 は、プライベート エンドポイントではサポートされていません。
- プライベート エンドポイントで構成したアプリは、
Microsoft.Web
サービス エンドポイントが有効になっているサブネットからのパブリック トラフィックを受信できず、サービス エンドポイントベースのアクセス制限規則を使用できません。 - プライベート エンドポイントの名前付けは、
Microsoft.Network/privateEndpoints
型のリソースに対して定義されているルールに従う必要があります。 名前付けルールについては、こちらを参照してください。
Azure Private Link 機能とプライベート エンドポイントの改善は定期的に実施されています。制限に関する最新情報については、こちらの記事を確認してください。
次のステップ
- ポータルでアプリのプライベート エンドポイントをデプロイする場合は、Azure portal を使用してアプリに非公開で接続する方法に関するページを参照してください
- Azure CLI でアプリのプライベート エンドポイントをデプロイする場合は、Azure CLI を使用してアプリに非公開で接続する方法に関するページを参照してください
- PowerShell を使用してアプリのプライベート エンドポイントをデプロイする場合は、PowerShell を使用してアプリに非公開で接続する方法に関するページを参照してください
- Azure テンプレートを使用してアプリのプライベート エンドポイントをデプロイする場合は、Azure テンプレートを使用してアプリに非公開で接続する方法に関するページを参照してください
- エンド ツー エンドの例: ARM テンプレートを使用して、セキュリティで保護されたバックエンド アプリに、仮想ネットワーク統合とプライベート エンドポイントによってフロントエンド アプリを接続する方法については、このクイックスタートを参照してください
- エンド ツー エンドの例: terraform を使用して、セキュリティで保護されたバックエンド アプリに、仮想ネットワーク統合とプライベート エンドポイントによってフロントエンド アプリを接続する方法については、このサンプルを参照してください