Azure App Service アプリにはプライベート エンドポイントを使用できます。 プライベート エンドポイントを使用すると、プライベート ネットワーク内のクライアントは、Azure Private Link 経由でアプリに安全にアクセスできます。 プライベート エンドポイントでは、Azure 仮想ネットワーク アドレス空間の IP アドレスを使用します。 プライベート ネットワーク上のクライアントとアプリ間のネットワーク トラフィックは、仮想ネットワークと Microsoft バックボーン ネットワーク上の Private Link を経由します。 この構成により、パブリック インターネットからの露出がなくなります。
アプリにプライベート エンドポイントを使用すると、次のことができます。
- プライベート エンドポイントを構成し、パブリック ネットワーク アクセスを無効にしたときにアプリをセキュリティで保護します。これにより、パブリック公開が不要になります。
- VPN または ExpressRoute のプライベート ピアリングを使用することで、仮想ネットワークに接続するオンプレミス ネットワークからアプリに安全に接続します。
- 仮想ネットワークからのデータ流出を避ける。
重要
プライベート エンドポイントは、コンテナー化された、またはホストされていない Windows アプリで使用できます。これは、Basic、Standard、PremiumV2、PremiumV3、IsolatedV2、Functions Premium (Elastic Premium プランとも呼ばれます) の App Service プランでホストされます。
概念の概要
プライベート エンドポイントは、仮想ネットワーク内のサブネット内の App Service アプリのネットワーク インターフェイスです。
アプリ用のプライベート エンドポイントを作成すると、プライベート ネットワーク上のクライアントとアプリ間の安全な接続が提供されます。 プライベート エンドポイントには、仮想ネットワークの IP アドレスの範囲から IP アドレスが割り当てられます。 プライベート エンドポイントとアプリ間の接続には、セキュリティで保護された Private Link が使用されます。 プライベート エンドポイントは、アプリへの受信トラフィックにのみ使用されます。 送信トラフィックでは、プライベート エンドポイントは使用されません。 仮想ネットワーク統合機能を使用して、別のサブネット内のネットワークに送信トラフィックを挿入できます。
アプリの各スロットは別々に構成されます。 スロットあたり最大 100 個のプライベート エンドポイントを使用できます。 スロット間で 1 つのプライベート エンドポイントを共有することはできません。 スロットの subresource
名は sites-<slot-name>
。
プライベート エンドポイントを接続するために使用するサブネットには、他のリソースを含めることができます。 専用の空のサブネットは必要ありません。
また、プライベート エンドポイントはアプリとは別のリージョンにデプロイすることもできます。
注
仮想ネットワーク統合機能では、プライベート エンドポイントと同じサブネットを使用することはできません。
セキュリティに関する考慮事項
プライベート エンドポイントとパブリック アクセスは、アプリ上で共存できます。 詳細については、このアクセス制限の概要に関するページを参照してください。
分離を確保するために、アプリに対してプライベート エンドポイントを有効にする場合は、必ずパブリック ネットワーク アクセスを無効にしてください。 他のリージョンの仮想ネットワークを含め、他の仮想ネットワークとサブネットで複数のプライベート エンドポイントを有効にすることができます。
アプリのアクセス制限規則は、プライベート エンドポイント経由のトラフィックに対して評価されません。 仮想ネットワークからのデータ流出リスクを排除できます。 宛先がインターネットまたは Azure サービスにタグ付けされているすべてのネットワーク セキュリティ グループ (NSG) 規則を削除します。
クライアント ソース IP は、アプリの Web HTTP ログで確認できます。 この機能は、クライアント IP プロパティをアプリに転送する伝送制御プロトコル (TCP) プロキシを使用して実装されます。 詳細については、「 TCP プロキシ v2 を使用した接続情報の取得」を参照してください。
DNS(ドメイン・ネーム・システム)
App Service アプリにプライベート エンドポイントを使用する場合、要求された URL はアプリのアドレスと一致する必要があります。 既定では、プライベート エンドポイントを使用しない場合、Web アプリのパブリック名がクラスターの正規の名前になります。 たとえば、名前解決は次のようになります。
名前 | タイプ | 値 |
---|---|---|
mywebapp.azurewebsites.net |
CNAME |
clustername.azurewebsites.windows.net |
clustername.azurewebsites.windows.net |
CNAME |
cloudservicename.cloudapp.net |
cloudservicename.cloudapp.net |
A |
192.0.2.13 |
プライベート エンドポイントをデプロイすると、ドメイン ネーム システム (DNS) エントリが正規名 ( mywebapp.privatelink.azurewebsites.net
) を指すよう更新されます。
たとえば、名前解決は次のようになります。
名前 | タイプ | 値 | 注記 |
---|---|---|---|
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 |
192.0.2.13 |
<--このパブリック IP はプライベート エンドポイントではありません。 403 エラーが表示されます。 |
プライベート DNS サーバーまたは Azure DNS プライベート ゾーンの設定が必要です。 テストの場合は、テスト マシンのホスト エントリを変更できます。 作成する必要がある DNS ゾーンは、privatelink.azurewebsites.net
です。
A
レコードとプライベート エンドポイント IP を使用して、アプリのレコードを登録します。
Azure プライベート DNS ゾーン グループでは、DNS レコードがプライベート DNS ゾーンに自動的に追加されます。
たとえば、名前解決は次のようになります。
名前 | タイプ | 値 | 注記 |
---|---|---|---|
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 ゾーンでは、プライベート エンドポイントを指すように DNS レコードを更新する必要があります。 既定のホスト名に対して DNS 解決を使用してアプリが既に構成されている場合は、CNAME
を指すカスタム ドメインのmywebapp.azurewebsites.net
レコードを追加することをお勧めします。 カスタム ドメイン名のみをプライベート エンドポイントに解決する場合は、プライベート エンドポイント IP を使用して A
レコードを直接追加できます。
Kudu/scm エンドポイント
Kudu コンソールまたは Kudu REST API (たとえば、Azure DevOps Services セルフホステッド エージェントを使用したデプロイの場合) では、Azure DNS プライベート ゾーンまたはカスタム DNS サーバーのプライベート エンドポイント IP を指す 2 つ目のレコードを作成する必要があります。 1 つ目はアプリ用で、2 つ目はアプリの SCM (ソース管理管理) 用です。 Azure プライベート DNS ゾーン グループでは、scm エンドポイントが自動的に追加されます。
名前 | タイプ | 値 |
---|---|---|
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 レベルでプライベート エンドポイントのサポートを有効にします。 この機能をアクティブ化するには、App Service Environment の構成ウィンドウで Azure portal を使用するか、次の CLI を使用します。
az appservice ase update --name myasename --allow-new-private-endpoint-connections true
固有の要件
仮想ネットワークがアプリとは異なるサブスクリプションにある場合は、仮想ネットワークがあるサブスクリプションが Microsoft.Web
リソース プロバイダーに登録されていることを確かめてください。 プロバイダーを明示的に登録する場合は、「リソース プロバイダーの登録」を参照してください。 サブスクリプションで最初の Web アプリを作成するときに、プロバイダーが自動的に登録されます。
価格
料金の詳細については、「Azure Private Link の料金」をご覧ください。
制限事項
- プライベート エンドポイントで Elastic Premium プランで Azure 関数を使用する場合は、Azure portal で関数を実行するために直接ネットワーク アクセスできる必要があります。 そうしないと、HTTP 403 エラーが発生します。 Azure portal から関数を実行するには、ブラウザーからプライベート エンドポイントに到達できる必要があります。
- 最大 100 個のプライベート エンドポイントを特定のアプリに接続できます。
- リモート デバッグ機能は、プライベート エンドポイント経由では使用できません。 コードをスロットにデプロイし、そこでリモートでデバッグすることをお勧めします。
- FTP アクセスは、受信パブリック IP アドレスを介して提供されます。 プライベート エンドポイントでは、アプリへの FTP アクセスがサポートされていません。
- IP ベースの TLS は、プライベート エンドポイントではサポートされていません。
- プライベート エンドポイントで構成したアプリは、
Microsoft.Web
サービス エンドポイントが有効になっているサブネットからのパブリック トラフィックを受信できません。また、 サービス エンドポイントベースのアクセス制限規則を使用することはできません。 - プライベート エンドポイントの名前付けは、
Microsoft.Network/privateEndpoints
の種類のリソースに対して定義されている規則に従う必要があります。 詳細については、「名前付け規則と制約事項」を参照してください。
制限事項に関する up-to-date 情報については、 このドキュメントを参照してください。
関連するコンテンツ
- クイック スタート: Azure portal を使用してプライベート エンドポイントを作成する
- クイックスタート: Azure CLI を使用してプライベート エンドポイントを作成する
- クイック スタート: Azure PowerShell を使用してプライベート エンドポイントを作成する
- クイック スタート: ARM テンプレートを使用してプライベート エンドポイントを作成する
- クイック スタート: 仮想ネットワーク統合とプライベート エンドポイントを使用して、フロントエンド アプリをセキュリティで保護されたバックエンド アプリに接続するためのテンプレート
- スクリプト: プライベート エンドポイントと仮想ネットワーク統合 (Terraform) で安全に接続された 2 つの Web アプリを作成する