この記事では、仮想マシン (VM) のネットワーク トラフィック フィルターの問題を診断する方法について説明します。 このプロセスには、ネットワーク セキュリティ グループ (NSG) によって適用される有効なセキュリティ規則の表示が含まれます。
NSG を使うと、VM を出入りするトラフィックの種類を制御できます。 Azure 仮想ネットワーク内のサブネット、または VM に接続されたネットワーク インターフェイス、もしくはその両方に、NSG を関連付けることができます。 ネットワーク インターフェイスに適用される有効なセキュリティ規則は、ネットワーク インターフェイスに関連付けられている NSG およびネットワーク インターフェイスが含まれるサブネットに存在する規則をまとめたものです。 異なる NSG のルールは、互いに競合し、VM のネットワーク接続に影響を与えることがあります。 VM のネットワーク インターフェイスに適用されるすべての有効なセキュリティ規則を NSG から表示できます。 仮想ネットワーク、ネットワーク インターフェイス、または NSG の概念について初めて学ぶ場合は、仮想ネットワークの概要、ネットワーク インターフェイス、ネットワーク セキュリティ グループに関する記事をご覧ください。
シナリオ
インターネットからポート 80 経由で VM に接続しようとしますが、接続は失敗します。 インターネットからポート 80 にアクセスできない理由を特定するために、Azure portal、PowerShell、または Azure CLI を使って、ネットワーク インターフェイスの有効なセキュリティ規則を表示できます。
以下の手順では、有効なセキュリティ規則の表示対象となる既存の VM があるものと仮定します。 既存の VM がない場合は、最初に Linux または Windows VM を展開して、この記事のタスクを実行します。 この記事の例は、myVMVMNic というネットワーク インターフェイスを持つ myVM という VM に関するものです。 VM およびネットワーク インターフェイスは、myResourceGroup というリソース グループおよび "米国東部" リージョンにあります。 必要に応じて、問題を診断する VM の手順の値を変更します。
Azure portal を使用して診断する
Azure portal の上部の検索ボックスに、VM の名前を入力します。 検索結果に VM の名前が表示されたら、それを選択します。
左側のペインで ネットワーク を展開します。 [ ネットワーク設定] を選択します。 次の図は、VM のネットワーク インターフェイスのネットワーク セキュリティ グループの設定を示しています。
前の図に示した規則は、 vm-1445 という名前のネットワーク インターフェイス用です。 次の 2 つの異なるネットワーク セキュリティ グループから、ネットワーク インターフェイスの 受信ポート規則 があることがわかります。
- nsg-subnet: ネットワーク インターフェイスが存在するサブネットに関連付けられています。
- nsg-nic: vm-1445 という名前の VM 内のネットワーク インターフェイスに関連付けられています。
DenyAllInBound という名前のルールが、「シナリオ」で説明したように、ポート 80 経由でのインターネットから VM への受信通信を妨げています。 規則の [ソース] には 0.0.0.0/0 と表示されており、これにはインターネットが含まれます。 優先順位がそれより高くて (小さい値) ポート 80 での受信を許可する規則は他にありません。 インターネットから VM へのポート 80 での受信を許可する方法については、「問題を解決する」をご覧ください。 セキュリティ規則および Azure によるその適用方法について詳しくは、「ネットワーク セキュリティ グループ」をご覧ください。
図の下部には、 送信ポート規則も表示されます。 ネットワーク インターフェイスの送信ポート規則が一覧表示されます。
この図では、NSG ごとに 4 つの受信規則のみが示されていますが、NSG には 4 つ以上の規則が含まれている可能性があります。 この図では、[ソースと宛先] の下に VirtualNetwork が表示され、[ソース] の下に AzureLoadBalancer が表示されます。 VirtualNetwork と AzureLoadBalancer は サービス タグです。 サービス タグは IP アドレス プレフィックスのグループを表し、セキュリティ規則の作成の複雑さを最小限に抑えるのに役立ちます。
有効なセキュリティ規則を表示するには、仮想マシンのネットワーク設定でインターフェイスを選択します。 続行する前に、VM が実行中の状態であることを確認します。
ネットワーク インターフェイスの設定で、[ ヘルプ] を展開し、[ 有効なセキュリティ規則] を選択します。
次の例は、有効なセキュリティ規則が選択されたネットワーク インターフェイス vm-1445 の例を示しています。
表示されている規則はステップ 3 と同じですが、ネットワーク インターフェイスとサブネットに関連付けられている NSG に対する別のタブがあります。 図に示すように、最初の 50 規則のみが表示されています。 すべての規則を含む .csv ファイルをダウンロードするには、 [ダウンロード] を選択します。
前の手順では、 vm-1445 という名前のネットワーク インターフェイスのセキュリティ規則を示しました。 VM に 2 つのネットワーク インターフェイスがある場合はどうしますか? この例の VM には 2 つのネットワーク インターフェイスが接続されています。 有効なセキュリティ規則は、ネットワーク インターフェイスごとに異なる場合があります。
vm-nic-2 ネットワーク インターフェイスの規則を表示するには、それを選択します。 次の例に示すように、ネットワーク インターフェイスのサブネットには vm-1445 ネットワーク インターフェイスと同じ規則が関連付けられています。これは、両方のネットワーク インターフェイスが同じサブネット内にあるためです。 サブネットに NSG を関連付けると、サブネット内のすべてのネットワーク インターフェイスにその規則が適用されます。
vm-1445 ネットワーク インターフェイスとは異なり、vm-nic-2 ネットワーク インターフェイスにはネットワーク セキュリティ グループが関連付けられません。 各ネットワーク インターフェイスとサブネットには、1 つの NSG を関連付けることができ、NSG を関連付けなくてもかまいません。 各ネットワーク インターフェイスまたはサブネットに関連付ける NSG は、同じでも異なっていてもかまいません。 同じネットワーク セキュリティ グループを、任意の数のネットワーク インターフェイスとサブネットに関連付けることができます。
ここでは VM から有効なセキュリティ規則を表示しましたが、以下の個々の項目から有効なセキュリティ規則を表示することもできます。
- ネットワーク インターフェイス: ネットワーク インターフェイスの表示方法をご確認ください。
- NSG: NSG の表示方法をご確認ください。
PowerShell を使用して診断する
注記
Azure を操作するには、Azure Az PowerShell モジュールを使用することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「AzureRM から Az への Azure PowerShell の移行」を参照してください。
以下のコマンドは、Azure Cloud Shell で、またはコンピューターから PowerShell を実行することで実行できます。 Azure Cloud Shell は無料の対話型シェルです。 一般的な Azure ツールが事前にインストールされており、アカウントで使用できるように構成されています。 お使いのコンピューターから PowerShell を実行する場合は、Azure PowerShell モジュール、バージョン 1.0.0 以降が必要です。 コンピューターで Get-Module -ListAvailable Az を実行して、インストールされているバージョンを確認してください。 アップグレードする必要がある場合は、Azure PowerShell モジュールのインストールに関するページを参照してください。 PowerShell をローカルで実行している場合は、 Connect-AzAccount を実行して、 必要なアクセス許可を持つアカウントで Azure にログインする必要もあります。
ネットワーク インターフェイスの有効なセキュリティ規則を取得するには、Get-AzEffectiveNetworkSecurityGroup を使います。 次の例では、test-rg という名前のリソース グループ内にある vm-nic という名前のネットワーク インターフェイスの有効なセキュリティ規則を取得します。
$Params = @{
NetworkInterfaceName = "vm-nic"
ResourceGroupName = "test-rg"
}
Get-AzEffectiveNetworkSecurityGroup @Params
出力は JSON 形式で返されます。 出力を理解する方法については、「コマンドの出力を解釈する」をご覧ください。 出力は、NSG がネットワーク インターフェイスまたはネットワーク インターフェイスが含まれるサブネットのどちらか一方または両方に関連付けられている場合にのみ返されます。 VM は実行状態になっている必要があります。 VM には、異なる NSG が適用された複数のネットワーク インターフェイスがある場合があります。 トラブルシューティングを行うときは、それぞれのネットワーク インターフェイスに対してコマンドを実行します。
接続の問題が引き続き発生する場合は、 その他の診断 と 考慮事項を参照してください。
VM 名がわかっている場合は、次のコマンドを使用して、VM に接続されているすべてのネットワーク インターフェイス ID を一覧表示します。
$Params = @{
Name = "vm-1"
ResourceGroupName = "test-rg"
}
$VM = Get-AzVM @Params
$VM.NetworkProfile
次の例のような出力が返されます。
NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/vm-nic
前の出力では、ネットワーク インターフェイス名は vm-nic です。
Azure CLI を使用して診断する
Azure CLI コマンドを使用してこの記事のタスクを実行する場合は、Azure Cloud Shell でコマンドを実行するか、お使いのコンピューターから Azure CLI を実行してください。 この記事では、Azure CLI バージョン 2.0.32 以降が必要です。 インストールされているバージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。 Azure CLI をローカルで実行している場合、az loginを持つアカウントで を実行して Azure にログインする必要もあります。
az network nic list-effective-nsg を使用して、ネットワーク インターフェイスに対して有効なセキュリティ規則を取得します。 次の例では、test-rg という名前のリソース グループ内にある vm-nic という名前のネットワーク インターフェイスの有効なセキュリティ規則を取得します。
az network nic list-effective-nsg \
--name vm-nic \
--resource-group test-rg
出力は JSON 形式で返されます。 出力を理解する方法については、「コマンドの出力を解釈する」をご覧ください。 出力は、NSG がネットワーク インターフェイスまたはネットワーク インターフェイスが含まれるサブネットのどちらか一方または両方に関連付けられている場合にのみ返されます。 VM は実行状態になっている必要があります。 VM には、異なる NSG が適用された複数のネットワーク インターフェイスがある場合があります。 トラブルシューティングを行うときは、それぞれのネットワーク インターフェイスに対してコマンドを実行します。
接続の問題が引き続き発生する場合は、 その他の診断 と 考慮事項を参照してください。
VM 名がわかっている場合は、次のコマンドを使用して、VM に接続されているすべてのネットワーク インターフェイス ID を一覧表示します。
az vm show \
--name vm-1 \
--resource-group test-rg
返される出力には次の例のような情報が含まれます。
"networkProfile": {
"additionalProperties": {},
"networkInterfaces": [
{
"additionalProperties": {},
"id": "/subscriptions/<ID>/resourceGroups/test-rg/providers/Microsoft.Network/networkInterfaces/vm-nic",
"primary": true,
"resourceGroup": "test-rg"
},
前の出力では、ネットワーク インターフェイス名は vm-nic です
コマンドの出力を解釈する
PowerShell または Azure CLI のどちらを使って問題を診断しても、次の情報が含まれる出力が表示されます。
- NetworkSecurityGroup: ネットワーク セキュリティ グループの ID です。
- 関連付け: ネットワーク セキュリティ グループが NetworkInterface またはサブネットにリンクされているかどうかを示 します。 コマンドを実行する直前に NSG の関連付けの状態が変わる場合は、出力に更新が反映されるまで数秒待ちます。
- EffectiveSecurityRules: 各プロパティの説明について詳しくは、「セキュリティ規則を作成する」をご覧ください。 名前の前に defaultSecurityRules/ が付いている規則は、すべての NSG に存在する既定のセキュリティ規則です。 securityRules/ で始まるルール名は、ユーザーが作成したルールです。 destinationAddressPrefix または sourceAddressPrefix プロパティに対して Internet、VirtualNetwork、AzureLoadBalancer などのサービス タグが指定されている規則は、expandedDestinationAddressPrefix プロパティにも値があります。 expandedDestinationAddressPrefix プロパティには、サービス タグによって表されるすべてのアドレス プレフィックスが一覧表示されます。
NSG がネットワーク インターフェイスとサブネットの両方にリンクされている場合、重複するルールが出力に表示されます。 既定のルールと NSG 間で共有されるすべてのカスタム ルールによって、これらの重複が発生します。
defaultSecurityRules/DenyAllInBound という名前のルールが、「シナリオ」で説明したように、ポート 80 経由でのインターネットから VM への受信通信を妨げています。 優先順位がそれより高くて (小さい値) ポート 80 でのインターネットからの受信を許可する規則は他にありません。
問題を解決する
シナリオで説明されている問題は、Azure portal、PowerShell、または Azure CLIを使用して診断できます。 解決策は、次のプロパティを使用してネットワーク セキュリティ規則を作成することです。
| プロパティ | 値 |
|---|---|
| ソース | [任意] |
| ソースポート範囲 | [任意] |
| 宛先 | VM の IP アドレス、IP アドレスの範囲、またはサブネット内のすべてのアドレス。 |
| 宛先ポート範囲 | 80 |
| プロトコル | TCP |
| アクション | 許可する |
| 優先度 | 100 |
| Name | Allow-HTTP-All |
規則の作成後、既定の DenyAllInBound 規則よりも優先順位が高いため、ポート 80 はインターネットからの受信を許可されます。 NSG がネットワーク インターフェイスとサブネットの両方に関連付けられている場合は、両方の NSG で同じルールを作成します。 方法については、「セキュリティ規則を作成する」をご覧ください。
Azure は、受信トラフィックを処理するときに、サブネットに関連付けられている NSG 内のルールを処理し (関連付けられた NSG がある場合)、ネットワーク インターフェイスに関連付けられている NSG のルールを処理します。 ネットワーク インターフェイスとサブネットに関連付けられている NSG がある場合、トラフィックが VM に到達するには、両方の NSG でポートを開く必要があります。 管理と通信の問題を軽減するため、個々のネットワーク インターフェイスではなくサブネットに NSG を関連付けることをお勧めします。 サブネット内の VM で異なるセキュリティ規則が必要な場合は、アプリケーション セキュリティ グループ (ASG) のネットワーク インターフェイス メンバーを作成し、セキュリティ規則のソースとターゲットとして ASG を指定できます。 詳しくは、「アプリケーション セキュリティ グループ」をご覧ください。
通信の問題が解決しない場合は、「 考慮事項 と診断」を参照してください。
考慮事項
接続問題のトラブルシューティングを行う場合は、次の点を検討してください。
既定のセキュリティ規則は、インターネットからの受信アクセスをブロックし、仮想ネットワークからの受信トラフィックのみを許可します。 インターネットからの受信トラフィックを許可するには、既定の規則より優先順位の高いセキュリティ規則を追加します。 既定のセキュリティ規則またはセキュリティ規則を追加する方法について学習します。
ピアリングされた仮想ネットワークの場合、既定では、 VIRTUAL_NETWORK サービス タグは自動的に拡張され、ピアリングされた仮想ネットワークのプレフィックスが含まれます。 仮想ネットワークのピアリングに関する問題をトラブルシューティングするには、ExpandedAddressPrefix の一覧でプレフィックスを表示できます。 仮想ネットワーク ピアリングおよびサービス タグの詳細を学習してください。
AZURE では、NSG が VM のネットワーク インターフェイスまたはサブネットに関連付けられている場合にのみ、ネットワーク インターフェイスの有効なセキュリティ規則が表示されます。 さらに、VM は実行中の状態である必要があります。
ネットワーク インターフェイスまたはサブネットに NSG が関連付けられていない場合、VM に パブリック IP アドレスがある場合、受信および送信アクセスのすべてのポートが開いたままになります。 この構成により、どこからでも無制限にアクセスできます。 VM をセキュリティで保護するには、パブリック IP アドレスがある場合は、ネットワーク インターフェイスをホストするサブネットに NSG を適用します。
その他の診断
- VM の送受信トラフィックが許可されているかどうかを確認するための簡単なテストを実行するには、Azure Network Watcher の IP フロー検証機能を使用します。 IP フロー検証では、トラフィックが許可されるか拒否されるかが示されます。 拒否される場合、IP フロー検証はトラフィックを拒否しているセキュリティ規則を示します。
- VM のネットワーク接続が失敗する原因となっているセキュリティ規則がない場合、問題の原因は次のとおりです。
- VM のオペレーティング システム内で実行されているファイアウォール ソフトウェア
- 仮想アプライアンスまたはオンプレミスのトラフィック用に構成されたルート。 インターネット トラフィックは、強制トンネリングを使用してオンプレミスのネットワークにリダイレクトできます。 インターネット トラフィックを仮想アプライアンスまたはオンプレミスに強制トンネリングすると、インターネットから VM に接続できない場合があります。 VM からのトラフィックフローを妨げる可能性があるルートの問題を診断する方法については、 仮想マシンのネットワーク トラフィック ルーティングの問題の診断に関するページを参照してください。
次のステップ
- ネットワーク セキュリティ グループとセキュリティ規則のすべてのタスク、プロパティ、および設定について学習します。
- VM の既定のセキュリティ規則、サービス タグ、および受信および送信トラフィックのセキュリティ規則を Azure が処理する方法について学習します。



