クイックスタート: Azure PowerShell を使用してプライベート エンドポイントを作成する

プライベート エンドポイントを作成および使用して Azure App Service Web アプリに安全に接続することにより、Azure Private Link の使用を開始します。

このクイックスタートでは、Azure App Services Web アプリのプライベート エンドポイントを作成した後、仮想マシン (VM) を作成してデブロイしプライベート接続をテストします。

Azure SQL や Azure Storage など、さまざまな Azure サービスに対してプライベート エンドポイントを作成できます。

プライベート エンドポイントのクイックスタートで作成されたリソースの図。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。 Azure アカウントをまだ持っていない場合は、無料でアカウントを作成します

  • 対象の Azure サブスクリプションにデプロイされている "PremiumV2 レベル" 以上のアプリ サービス プランを持つ Azure Web アプリ。

  • Azure Cloud Shell または Azure PowerShell。

    このクイックスタートの手順では、Azure Cloud Shell で Azure PowerShell コマンドレットを対話型で実行します。 Cloud Shell でコマンドを実行するには、コード ブロックの右上隅にある [Cloudshell を開く] を選択します。 [コピー] を選択してコードをコピーし、続いて Cloud Shell に貼り付けて実行します。 Azure portal 内から Cloud Shell を実行することもできます。

    また、Azure PowerShell をローカルにインストールしてコマンドレットを実行することもできます。 この記事の手順では、バージョン 5.4.1 以降の Azure PowerShell モジュールが必要です。 Get-Module -ListAvailable Az を実行して、インストールされているバージョンを見つけます。 アップグレードする必要がある場合は、Azure PowerShell モジュールの更新を参照してください。

    PowerShell をローカルで実行する場合は、Connect-AzAccount を実行して Azure に接続します。

リソース グループを作成する

Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。

New-AzResourceGroup を使用して、次のようにリソース グループを作成します。

$rg = @{
    Name = 'test-rg'
    Location = 'eastus2'
}
New-AzResourceGroup @rg

仮想ネットワークの作成

  1. New-AzVirtualNetwork を使用して、eastus2 という場所の test-rg リソースグループに、vnet-1 という名前で、IP アドレス プレフィックスが 10.0.0.0/16 の仮想ネットワークを作成します。

    $vnet = @{
        Name = 'vnet-1'
        ResourceGroupName = 'test-rg'
        Location = 'eastus2'
        AddressPrefix = '10.0.0.0/16'
    }
    $virtualNetwork = New-AzVirtualNetwork @vnet
    
  2. Azure によって、仮想ネットワーク内のサブネットにリソースをデプロイします。 Add-AzVirtualNetworkSubnetConfig を使用して、subnet-1 という名前で、アドレス プレフィックスが 10.0.0.0/24 のサブネット構成を作成します。

    $subnet = @{
        Name = 'subnet-1'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.0.0/24'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  3. 続いて、Set-AzVirtualNetwork を使用して、サブネット構成を仮想ネットワークに関連付けます。

    $virtualNetwork | Set-AzVirtualNetwork
    

Azure Bastion をデプロイする

Azure Bastion では、プライベート IP アドレスを使用して Secure Shell (SSH) またはリモート デスクトップ プロトコル (RDP) を介して、仮想ネットワーク内の VM にブラウザーで接続します。 VM には、パブリック IP アドレス、クライアント ソフトウェア、または特別な構成は必要ありません。 Azure Bastion の詳細については、Azure Bastion に関するページをご覧ください。

Note

時間単位の価格は、送信データの使用状況に関係なく、Bastion がデプロイされた時点から開始します。 詳しくは、「価格」および「SKU」を参照してください。 チュートリアルまたはテストの一環で Bastion をデプロイする場合は、使用終了後にこのリソースを削除することをお勧めします。

  1. 仮想ネットワークの Azure Bastion サブネットを構成します。 このサブネットは、Azure Bastion リソース専用に予約されており、名前を AzureBastionSubnet にする必要があります。

    $subnet = @{
        Name = 'AzureBastionSubnet'
        VirtualNetwork = $virtualNetwork
        AddressPrefix = '10.0.1.0/26'
    }
    $subnetConfig = Add-AzVirtualNetworkSubnetConfig @subnet
    
  2. 構成を設定します。

    $virtualNetwork | Set-AzVirtualNetwork
    
  3. Azure Bastion のパブリック IP アドレスを作成します。 Bastion ホストは、パブリック IP を使用して、ポート 443 経由で Secure Shell (SSH) とリモート デスクトップ プロトコル (RDP) にアクセスします。

    $ip = @{
            ResourceGroupName = 'test-rg'
            Name = 'public-ip'
            Location = 'eastus2'
            AllocationMethod = 'Static'
            Sku = 'Standard'
            Zone = 1,2,3
    }
    New-AzPublicIpAddress @ip
    
  4. New-AzBastion コマンドを使用して、AzureBastionSubnet に新しい Standard SKU Azure Bastion ホストを作成します。

    $bastion = @{
        Name = 'bastion'
        ResourceGroupName = 'test-rg'
        PublicIpAddressRgName = 'test-rg'
        PublicIpAddressName = 'public-ip'
        VirtualNetworkRgName = 'test-rg'
        VirtualNetworkName = 'vnet-1'
        Sku = 'Basic'
    }
    New-AzBastion @bastion
    

Bastion リソースのデプロイには、数分かかります。

プライベート エンドポイントの作成

プライベート エンドポイントをサポートする Azure サービスは、プライベート エンドポイントと仮想ネットワークへの接続を設定するために必要です。 この記事の例では、前提条件の Azure App Service WebApp を使用しています。 プライベート エンドポイントをサポートする Azure サービスの詳細については、「Azure Private Link の可用性」を参照してください。

プライベート エンドポイントは、静的な、または動的に割り当てられた IP アドレスを持つことができます。

重要

この記事の手順を続行するには、以前にデプロイした Azure App Services WebApp が必要です。 詳細については、「前提条件」を参照してください。

このセクションでは、次のことを行います。

## Place the previously created webapp into a variable. ##
$webapp = Get-AzWebApp -ResourceGroupName test-rg -Name webapp-1

## Create the private endpoint connection. ## 
$pec = @{
    Name = 'connection-1'
    PrivateLinkServiceId = $webapp.ID
    GroupID = 'sites'
}
$privateEndpointConnection = New-AzPrivateLinkServiceConnection @pec

## Place the virtual network you created previously into a variable. ##
$vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'

## Create the private endpoint. ##
$pe = @{
    ResourceGroupName = 'test-rg'
    Name = 'private-endpoint'
    Location = 'eastus2'
    Subnet = $vnet.Subnets[0]
    PrivateLinkServiceConnection = $privateEndpointConnection
}
New-AzPrivateEndpoint @pe

プライベート DNS ゾーンを構成する

プライベート DNS ゾーンは、仮想ネットワーク内のプライベート エンドポイントの DNS 名を解決するために使用されます。 この例では、Azure App Services Web アプリの DNS 情報を使用しています。プライベート エンドポイントの DNS 構成の詳細については、「Azure プライベート エンドポイントの DNS 構成」を参照してください。

このセクションでは、次のことを行います。

## Place the virtual network into a variable. ##
$vnet = Get-AzVirtualNetwork -ResourceGroupName 'test-rg' -Name 'vnet-1'

## Create the private DNS zone. ##
$zn = @{
    ResourceGroupName = 'test-rg'
    Name = 'privatelink.azurewebsites.net'
}
$zone = New-AzPrivateDnsZone @zn

## Create a DNS network link. ##
$lk = @{
    ResourceGroupName = 'test-rg'
    ZoneName = 'privatelink.azurewebsites.net'
    Name = 'dns-link'
    VirtualNetworkId = $vnet.Id
}
$link = New-AzPrivateDnsVirtualNetworkLink @lk

## Configure the DNS zone. ##
$cg = @{
    Name = 'privatelink.azurewebsites.net'
    PrivateDnsZoneId = $zone.ResourceId
}
$config = New-AzPrivateDnsZoneConfig @cg

## Create the DNS zone group. ##
$zg = @{
    ResourceGroupName = 'test-rg'
    PrivateEndpointName = 'private-endpoint'
    Name = 'zone-group'
    PrivateDnsZoneConfig = $config
}
New-AzPrivateDnsZoneGroup @zg

テスト用の仮想マシンを作成する

静的 IP アドレスとプライベート エンドポイントの機能を確認するには、テスト仮想マシンが仮想ネットワークに接続されている必要があります。

このセクションでは、次のことを行います。

## Create the credential for the virtual machine. Enter a username and password at the prompt. ##
$cred = Get-Credential

## Place the virtual network into a variable. ##
$vnet = Get-AzVirtualNetwork -Name vnet-1 -ResourceGroupName test-rg

## Create a network interface for the virtual machine. ##
$nic = @{
    Name = 'nic-1'
    ResourceGroupName = 'test-rg'
    Location = 'eastus2'
    Subnet = $vnet.Subnets[0]
}
$nicVM = New-AzNetworkInterface @nic

## Create the configuration for the virtual machine. ##
$vm1 = @{
    VMName = 'vm-1'
    VMSize = 'Standard_DS1_v2'
}
$vm2 = @{
    ComputerName = 'vm-1'
    Credential = $cred
}
$vm3 = @{
    PublisherName = 'MicrosoftWindowsServer'
    Offer = 'WindowsServer'
    Skus = '2022-Datacenter'
    Version = 'latest'
}
$vmConfig = 
New-AzVMConfig @vm1 | Set-AzVMOperatingSystem -Windows @vm2 | Set-AzVMSourceImage @vm3 | Add-AzVMNetworkInterface -Id $nicVM.Id

## Create the virtual machine. ##
New-AzVM -ResourceGroupName 'test-rg' -Location 'eastus2' -VM $vmConfig

Note

Bastion ホストがある仮想ネットワーク内の仮想マシンには、パブリック IP アドレスが必要ありません。 Bastion がパブリック IP を提供し、VM はプライベート IP を使用してネットワーク内で通信します。 bastion ホストがある仮想ネットワーク内のいずれの VM からも、パブリック IP を削除できます。 詳細については、「パブリック IP アドレスの関連付けを Azure VM から解除する」を参照してください。

Note

パブリック IP が割り当てられていない VM、または内部の Basic Azure Load Balancer のバックエンド プール内にある VM に対しては、Azure によって既定のアウトバウンド アクセス IP が提供されます。 デフォルト送信アクセス IP メカニズムは、構成できないアウトバウンド IP アドレスを提供します。

次のいずれかのイベントが発生すると、既定のアウトバウンド アクセス IP は無効になります。

  • パブリック IP アドレスが VM に割り当てられます。
  • アウトバウンド規則の有無にかかわらず、VM は標準ロード バランサーのバックエンド プール内に配置されます。
  • Azure NAT Gateway リソースが VM のサブネットに割り当てられます。

フレキシブル オーケストレーション モードの仮想マシン スケール セットによって作成された VM には、既定のアウトバウンド アクセスがありません。

Azure のアウトバウンド接続の詳細については、「Azure での既定の送信アクセス」および「送信接続での送信元ネットワーク アドレス変換 (SNAT)を使用する」を参照してください。

プライベート エンドポイントへの接続のテスト

前に作成した仮想マシンを使用して、プライベート エンドポイント経由で Web アプリに接続します。

  1. ポータルの上部にある検索ボックスに、「仮想マシン」と入力します。 [仮想マシン] を選択します。

  2. vm-1 を選択します。

  3. vm-1 の概要ページで、[接続] を選択した後に、[Bastion] タブを選択します。

  4. [Bastion を使用する] を選択します。

  5. VM の作成時に使用したユーザー名とパスワードを入力します。

  6. [接続] を選択します。

  7. 接続した後、サーバーで PowerShell を開きます。

  8. nslookup webapp-1.azurewebsites.net」と入力します。 次の例のようなメッセージが表示されます。

    Server:  UnKnown
    Address:  168.63.129.16
    
    Non-authoritative answer:
    Name:    webapp-1.privatelink.azurewebsites.net
    Address:  10.0.0.10
    Aliases:  webapp-1.azurewebsites.net
    

    前の手順で静的 IP アドレスを選択した場合、Web アプリ名として 10.0.0.10 というプライベート IP アドレスが返されます。 このアドレスは、先ほど作成した仮想ネットワークのサブネット内に存在します。

  9. vm-1 への bastion 接続で、Web ブラウザーを開きます。

  10. Web アプリ https://webapp-1.azurewebsites.net の URL を入力します。

    Web アプリがデプロイされていない場合は、次の既定の Web アプリ ページが表示されます。

    ブラウザでの既定の Web アプリ ページのスクリーンショット。

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

必要がなくなれば、Remove-AzResourceGroup コマンドを使用して、リソース グループや仮想ネットワーク、その他のリソースを削除できます。

Remove-AzResourceGroup -Name 'test-rg'

次の手順

プライベート エンドポイントをサポートするサービスの詳細については、以下を参照してください。