クイック スタート: Azure PowerShell を使用して仮想マシン ネットワーク トラフィック フィルターの問題を診断する

このクイックスタートでは、仮想マシンをデプロイし、Network Watcher の IP フローの確認を使用して、さまざまな IP アドレスとの間の接続をテストします。 IP フロー検証の結果を使用して、トラフィックのブロックと通信エラーの原因となっているセキュリティ規則を特定し、それを解決する方法を確認します。 また、ネットワーク インターフェイスの有効なセキュリティ規則を使用して、セキュリティ規則でトラフィックが許可または拒否されている理由を判断する方法についても説明します。

Network Watcher クイックスタートで作成されるリソースを示す図。

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

前提条件

  • アクティブなサブスクリプションが含まれる Azure アカウント。

  • Azure Cloud Shell または Azure PowerShell。

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

    また、Azure PowerShell をローカルにインストールしてコマンドレットを実行することもできます。 このクイックスタートには、Az PowerShell モジュールが必要です。 詳細については、「Azure PowerShell のインストール方法」を参照してください。 インストールされているバージョンを確認するには、Get-InstalledModule -Name Az を実行します。 PowerShell をローカルで実行している場合は、Connect-AzAccount コマンドレットを使用して Azure にサインインします。

仮想マシンの作成

このセクションでは、米国東部リージョンに仮想ネットワークとサブネットを作成します。 その後、既定のネットワーク セキュリティ グループを使用して、サブネットに仮想マシンを作成します。

  1. New-AzResourceGroup を使用してリソース グループを作成します。 Azure リソース グループとは、Azure リソースのデプロイと管理に使用する論理コンテナーです。

    # Create a resource group.
    New-AzResourceGroup -Name 'myResourceGroup' -Location 'eastus' 
    
  2. New-AzVirtualNetworkSubnetConfig を使用して、仮想マシン サブネットと Bastion ホスト サブネットのサブネット構成を作成します。

    # Create subnets configuration.
    $Subnet = New-AzVirtualNetworkSubnetConfig -Name 'mySubnet' -AddressPrefix '10.0.0.0/24'
    
  3. New-AzVirtualNetwork を使用して、仮想ネットワークを作成します。

    # Create a virtual network.
    New-AzVirtualNetwork -Name 'myVNet' -ResourceGroupName 'myResourceGroup' -Location 'eastus' -AddressPrefix '10.0.0.0/16' -Subnet $Subnet
    
  4. New-AzNetworkSecurityGroup を使用して、既定のネットワーク セキュリティ グループを作成します。

    # Create a network security group. 
    New-AzNetworkSecurityGroup -Name 'myVM-nsg' -ResourceGroupName 'myResourceGroup' -Location  'eastus'
    
  5. New-AzVM を使用して、仮想マシンを作成します。 プロンプトが表示されたら、ユーザー名とパスワードを入力します。

    # Create a Linux virtual machine using the latest Ubuntu 20.04 LTS image.
    New-AzVm -ResourceGroupName 'myResourceGroup' -Name 'myVM' -Location 'eastus' -VirtualNetworkName 'myVNet' -SubnetName 'mySubnet' -SecurityGroupName 'myVM-nsg' -Image 'Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest'
    

IP フローの確認を使用してネットワーク通信をテストする

このセクションでは、Network Watcher の IP フローの確認機能を使用して、仮想マシンとの間のネットワーク通信をテストします。

  1. Test-AzNetworkWatcherIPFlow を使用して、IP フロー検証で myVM から 13.107.21.200 への送信通信をテストします (13.107.21.200 は、www.bing.com によって使用されるパブリック IP アドレスの 1 つです)。

    # Place myVM configuration into a variable.
    $vm = Get-AzVM -ResourceGroupName 'myResourceGroup' -Name 'myVM'
    
    # Start the IP flow verify session to test outbound flow to www.bing.com.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Outbound' -Protocol 'TCP' -RemoteIPAddress '13.107.21.200' -RemotePort '80' -LocalIPAddress '10.0.0.4' -LocalPort '60000'
    

    数秒後に、次の例と類似した出力が表示されます。

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/AllowInternetOutBound
    

    このテスト結果は、既定のセキュリティ規則 AllowInternetOutBound が原因で 13.107.21.200 へのアクセスが許可されていることを示しています。 既定では、Azure 仮想マシンはインターネットにアクセスできます。

  2. RemoteIPAddress を「10.0.1.10」に変更し、テストを繰り返します。 10.0.1.10 は、myVNet アドレス空間内のプライベート IP アドレスです。

    # Start the IP flow verify session to test outbound flow to 10.0.1.10.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Outbound' -Protocol 'TCP' -RemoteIPAddress '10.0.1.10' -RemotePort '80' -LocalIPAddress '10.0.0.4' -LocalPort '60000'
    

    数秒後に、次の例と類似した出力が表示されます。

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/AllowVnetOutBound
    

    2 番目のテスト結果は、既定のセキュリティ規則 AllowVnetOutBound が原因で 10.0.1.10 へのアクセスが許可されていることを示しています。 既定では、Azure 仮想マシンは、その仮想ネットワークのアドレス空間内のすべての IP アドレスにアクセスできます。

  3. RemoteIPAddress を「10.10.10.10」に変更し、テストを繰り返します。 10.10.10.10 は、myVNet アドレス空間内のプライベート IP アドレスです。

    # Start the IP flow verify session to test outbound flow to 10.10.10.10.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Outbound' -Protocol 'TCP' -RemoteIPAddress '10.10.10.10' -RemotePort '80' -LocalIPAddress '10.0.0.4' -LocalPort '60000'
    

    数秒後に、次の例と類似した出力が表示されます。

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/DenyAllOutBound
    

    3 番目のテストの結果は、既定のセキュリティ規則 DenyAllOutBound が原因で 10.10.10.10 へのアクセスが拒否されていることを示しています。

  4. [Direction][Inbound] に、[LocalPort] を「80」に、[RemotePort] を「60000」に変更してテストを繰り返します。

    # Start the IP flow verify session to test inbound flow from 10.10.10.10.
    Test-AzNetworkWatcherIPFlow -Location 'eastus' -TargetVirtualMachineId $vm.Id -Direction 'Inbound' -Protocol 'TCP' -RemoteIPAddress '10.10.10.10' -RemotePort '60000' -LocalIPAddress '10.0.0.4' -LocalPort '80'
    

    数秒後に、次の例と類似した出力が表示されます。

    Access RuleName
    ------ --------
    Allow  defaultSecurityRules/DenyAllInBound
    

    4 番目のテストの結果は、既定のセキュリティ規則 DenyAllInBound が原因で 10.10.10.10 からのアクセス拒否されていることを示しています。 既定では、仮想ネットワーク外部からの Azure 仮想マシンへのアクセスはすべて拒否されます。

セキュリティ規則の詳細を表示する

前のセクションの規則によって通信が許可または拒否された理由を特定するには、Get-AzEffectiveNetworkSecurityGroup コマンドレットを使用して、myVM 仮想マシンのネットワーク インターフェイスに対して有効なセキュリティ規則を確認します。

# Get the effective security rules for the network interface of myVM.
Get-AzEffectiveNetworkSecurityGroup -NetworkInterfaceName 'myVM' -ResourceGroupName 'myResourceGroup'

返される出力には、www.bing.com への送信アクセスを許可した AllowInternetOutbound 規則に関する次の情報が含まれます。

{
 "Name": "defaultSecurityRules/AllowInternetOutBound",
 "Protocol": "All",
 "SourcePortRange": [
   "0-65535"
 ],
 "DestinationPortRange": [
   "0-65535"
 ],
 "SourceAddressPrefix": [
   "0.0.0.0/0",
   "0.0.0.0/0"
 ],
 "DestinationAddressPrefix": [
   "Internet"
 ],
 "ExpandedSourceAddressPrefix": [],
 "ExpandedDestinationAddressPrefix": [
   "1.0.0.0/8",
   "2.0.0.0/7",
   "4.0.0.0/9",
   "4.144.0.0/12",
   "4.160.0.0/11",
   "4.192.0.0/10",
   "5.0.0.0/8",
   "6.0.0.0/7",
   "8.0.0.0/7",
   "11.0.0.0/8",
   "12.0.0.0/8",
   "13.0.0.0/10",
   "13.64.0.0/11",
   "13.104.0.0/13",
   "13.112.0.0/12",
   "13.128.0.0/9",
   "14.0.0.0/7",
   ...
   ...
   ...
   "200.0.0.0/5",
   "208.0.0.0/4"
 ],
 "Access": "Allow",
 "Priority": 65001,
 "Direction": "Outbound"
},

出力を見ると、アドレスのプレフィックス「13.104.0.0/13」が AllowInternetOutBound 規則のアドレスのプレフィックスの中にあることがわかります。 このプレフィックスには、www.bing.com への送信通信をテストするために使用した IP アドレス「13.107.21.200」が含まれます。

同様に、他の規則をチェックして、各規則におけるソースと宛先の IP アドレスのプレフィックスを確認できます。

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

必要なくなったら、Remove-AzResourceGroup を使用して、リソース グループとその中のすべてのリソースを削除します。

# Delete the resource group and all resources it contains.
Remove-AzResourceGroup -Name 'myResourceGroup' -Force

次のステップ

このクイック スタートでは、VM を作成し、受信および送信ネットワーク トラフィック フィルターを診断しました。 ネットワーク セキュリティ グループの規則が、VM との間でやり取りされるトラフィックを許可または拒否することを学習しました。 セキュリティ規則およびセキュリティ規則を作成する方法について、さらに詳しく学習してください。

適切なネットワーク トラフィック フィルターを適用しても、ルーティングの構成が原因で仮想マシンへの通信が失敗する可能性があります。 仮想マシンのルーティングに関する問題の診断方法については、仮想マシン ネットワークのルーティングの問題の診断に関する記事を参照してください。 送信ルーティング、待ち時間、トラフィックのフィルタリングに関する問題を 1 つのツールで診断するには、Azure Network Watcher との接続のトラブルシューティングに関する記事を参照してください。