Azure Network Security GroupsまたはAzure NSGは、1つ以上のAzureリソースからのネットワークトラフィックを入力および出力の両方でフィルタリングすることができます。Azureリソースへのアクセスを制限する必要がある場合は、NSGの動作原理を理解する必要があります。
この記事では、Azure NSGの目的と、PowerShellスクリプト言語を使用してそれらを設定する方法を学びます。
前提条件
- ターゲットにするAzureリソース。このチュートリアルでは、従量課金制のサブスクリプションとWindows Server 2019のAzure仮想マシンを使用します。
- PowerShell 7+。以前のバージョンのPowerShellでも動作する場合がありますが、このチュートリアルではPowerShell 7.0.1を使用しています。
- Azure Azモジュール PowerShellモジュール
Azure NSGの理解
Azure NSGをファイアウォールと考えてください。ファイアウォールには、着信および送信トラフィックに対して実行するアクションを定義するルールセットがあります。ファイアウォールには通常、ファイアウォールを通過できるものとできないものを制御するデフォルトのルールセットが付属しています。Azure NSGにも同様のルールセットがあります。Azure NSGも同様です。
従来のファイアウォールとは異なり、Azure NSGにはサービスタグというクラウド概念があります。サービスタグは、管理を容易にするためにアドレス範囲を抽象化するAzureの方法です。
これらの重要なトピックを簡単に説明しましょう。
ルールの構成を簡素化するためのサービスタグの使用
クラウドサービスでは、IPアドレスや範囲が頻繁に変更されることがあります。これにより、手動で定義したAzure IP範囲ルールセットの管理が困難になることがあります。幸いなことに、Azureでは多くの異なるサービスタグが定義されており、NSGルールの対象となることができます。
サービスタグは常に最新のアドレスリストを使用する概念です。サービスタグは、アドレス範囲のセットにプレースホルダーを割り当てるための方法です。

デフォルトのルールセットに注意してください
Azure NSGを作成して適用する際には、まずそのNSGが自動的に適用するルールについて知る必要があります。これらのデフォルトルールセットは変更できず、受信および送信トラフィックの両方に対して作成されます。
Azure NSGのルールセットの各ルールには優先順位があります。優先順位は操作の順序または他のルールの上書きを決定します。たとえば、すべての受信トラフィックをブロックする優先順位65000のルールが存在し、ポート80を許可する優先順位64999のルールを作成した場合、Azure NSGはポート80を除いてすべてのトラフィックをブロックします。

デフォルトのルールセットは変更できませんが、上記のように優先度の高いルールを使用してオーバーライドすることができます。これらのルールは、TCP、UDP、およびICMPなどのすべてのプロトコルに適用されます。
ルールがデフォルトのルールをオーバーライドするために、
65500
よりも低い番号を使用していることを確認してください!
Azure NSGを作成すると、さまざまなデフォルトのルールが表示されます:
インバウンドルール
AllowVNetInBound
– このインバウンドルールには、仮想ネットワークで定義されたすべてのIPアドレス範囲と、接続されたオンプレミスのアドレススペースが含まれます。さらに、このルールには、ピアリングされた仮想ネットワーク、仮想ネットワークゲートウェイに接続された仮想ネットワーク、ホストの仮想IPアドレス、およびユーザー定義ルートで使用されるアドレスプレフィックスも含まれます。このルールは、65000
の優先度で設定されています。AllowAzureLoadBalancerInBound
–AzureLoadBalancer
サービスタグは、Azureのヘルスプローブが発信されるホストの仮想IPアドレスである168.63.129.16
に変換されます。実際のトラフィックはここを通過せず、Azure Load Balancingを使用しない場合、このルールはオーバーライドできます。ホストの仮想IPアドレスは、すべてのリージョンに存在し、DHCP、DNS、IMDS、およびヘルスモニタリングなどの重要なインフラストラクチャサービスを提供するために特に存在します。このルールは、65001
の優先度で設定されています。DenyAllInbound
– 最後のルールとして設定されており、優先度は65500
です。このルールは明示的に許可されていないすべてのインバウンドトラフィックを拒否します。
アウトバウンドルール
AllowVNetOutBound
– これには、仮想ネットワークに定義されたすべてのIPアドレス範囲、オンプレミスのアドレススペース、ピアリングされた仮想ネットワーク、仮想ネットワークゲートウェイに接続された仮想ネットワーク、ホストの仮想IPアドレス、およびユーザー定義ルートで使用されるアドレスプレフィックスが含まれています。このルールは、65000
の優先順位で設定されています。AllowInternetOutBound
– 仮想ネットワークの外部であり、パブリックインターネットから到達可能なIPアドレススペースです。Azure所有のパブリックIPアドレススペースのアドレス範囲が含まれます。このルールは、65001
の優先順位で設定されています。DenyAllOutBound
– 入力ルールセットと同様に、このルールは最後のルールとして設定され、優先順位は65500
です。このアウトバウンドルールは、明示的に許可されていないトラフィックをすべて拒否します。
Azure NSGのPowerShellでの構築
話はここまでにして、さあAzure NSGの構築を始めましょう!PowerShellコンソールにいて認証されていることを前提として、読み進めてください。
関連記事: Connect-AzAccount: PowerShellでのAzureへのゲートウェイ
Azure NSGをPowerShellで作成するには、1つのコマンドが必要です。それは、New-AzNetworkSecurityGroup
です。このコマンドを使用してNSGを作成するには、名前、NSGを作成するリソースグループ名、および場所を指定します。
以下のコード例は、New-AzNetworkSecurityGroup
コマンドレットを使用して、NSG-MyVM
という名前のNSGを、eastus
のAzureデータセンターにあるArticlesリソースグループに作成しています。
PowerShellを使用してAzure NSGルールを作成する
NSGを取得したら、デフォルトのルールだけでは十分ではありません。独自のルールを作成する必要があります。
リモートデスクトッププロトコルのインバウンドルールの設定
A common administrative task is the need to create an inbound rule for the Remote Desktop Protocol (RDP). In the tutorial’s example, perhaps it’s going to be applied to a Windows Server Azure VM and you need to access the VM via RDP. In that case, you need to open up port 3389 inbound.
既存のNSGに新しいインバウンドルールを追加するには、3つのステップが必要です:
- 既存のNSGを取得するために、
Get-AzNetworkSecurityGroup
コマンドを実行します。 - ルールを作成するために、
Add-AzNetworkSecurityRuleConfig
コマンドを実行します。 - そのルールをNSGに適用するために、
Set-AzNetworkSecurityGroup
コマンドを実行します。
以下のコード例では、Get-AzNetworkSecurityGroup
を使用して既存のNSGを取得し、次にAdd-AzNetworkSecurityRuleConfig
を使用してルールを定義し、Set-AzNetworkSecurityGroup
コマンドレットを使用して既存のNSGに適用します。
優先度パラメータは、ルールが評価されるタイミングを決定します。値
200
は上位に近く、4096
が最も低い優先度ルールです。
アウトバウンドSANS推奨トラフィックの拒否
通常、アウトバウンドトラフィックはブロックされません。なぜなら、アプリケーションが使用する可能性のあるすべてのポートを把握するのが困難だからです。幸いなことに、情報セキュリティの標準で広く信頼されているSANS Instituteからいくつかの専門のイーグレスフィルタリングの推奨事項を見つけることができます。
SANSの推奨事項を実装するために、前述の3つのステップを同じように使用しますが、今回は複数のポートを持つルールを作成し、Direction
をインバウンドではなくアウトバウンドに設定します。
- MS RPC – TCP & UDPポート135
- NetBIOS/IP – TCP & UDPポート137-139
- SMB/IP – TCPポート445
- Trivial File Transfer Protocol (TFTP) – UDPポート69
- Syslog – UDPポート514
- Simple Network Management Protocol (SNMP) – UDPポート161-162
以下のコードは、Get-AzNetworkSecurityGroup
コマンドレットを使用して既存のNSGルールを取得します。アウトバウンドルールは、Add-AzNetworkSecurityRuleConfig
を使用して定義され、Set-AzNetworkSecurityGroup
コマンドレットを介して適用されます。
もちろん、これらのポートのいくつかは、提供するサービスによって価値があり、必要です。おそらく、アプリケーションに必要なものに応じて、このリストをカスタマイズする必要があります。通常、これらはベンダーによって提供されるか、netstatのようなオープンポートを検索するツールを使用します。
関連記事: NetstatとPowerShellを使用したポートの検索
特定のサブネットに対してAzure NSGを構成する
おそらく、サブネットを使用して仮想ネットワークスペースをセグメント化しています。より詳細にするために、NSGを特定のサブネットに適用することで、そのサブネット内のトラフィックを詳細に制御できます。
以下のコードスニペットは、アドレスプレフィックス全体を見つけ、それにNSGを適用しています。
次に、ネットワークインターフェイスを使用して、ネットワークインターフェースなど必要なものにNSGをセグメント化して制限する方法を学びます。
ネットワークインターフェイスにAzure NSGを適用する
サブネットが機能するのと同様に、ネットワークインターフェースに直接NSGルールを適用することができます。この細かなレベルの適用は通常必要ありませんが、仮想マシンごとに複数のネットワークインターフェースがある場合、個々のNICに必要に応じて異なるルールセットを適用することは意味があります。
サブネット制限と同様に、個々のNICにルールを適用することができます。この場合、Get-AzNetworkInterface
コマンドレットを使用して、指定した仮想マシンの特定のNICを取得します。これには以前に作成されたNSGがNetworkSecurityGroup
プロパティに設定されています。
NSGを介したトラフィックの診断と解析については、次に進んでNSGフローログとその使用方法について学びましょう!
NSGフローログを使用したデバッグとトラブルシューティング
NSGの作成と使用中に、ルールのエラーやトラフィックの解析のためにさらなるデバッグが必要な場合があります。フローログは、NSGを通過するIPトラフィックに関する情報を記録するAzure Network Watcherの機能です。
Azure Network Watcherがネットワークトラフィックをキャプチャすると、そのデータをAzureストレージアカウントに保存します。PowerShellを使用して、Azure NSGフローログを構成して、Azureストレージアカウントを解析し、問題の特定やトラブルシューティングをより効果的に行うことができます。
関連記事:AzCopyツールのダウンロードとインストール方法
NSGフローログの有効化には、PowerShellで次の3つの手順が必要です。
Microsoft.Insights
プロバイダーを登録します。- データを保存するために、Operational Insights Workspaceを作成します。
Set-AzNetworkWatcherConfigFlowLog
コマンドを使用して、NSGフローログを有効にします。
Azure NSGフローログの設定を容易にするため、以下のPowerShellコードが必要な手順を簡素化します。特に、このコードはOperational Insights Workspaceを作成し、正しいサブスクリプション、ワークスペース、およびNSGにフローログ設定を関連付けます。
フローログには、ファイアウォールログに典型的なソースIP、宛先IP、ポート、プロトコル、およびタイムスタンプなど、多くの異なるプロパティが含まれています。バージョン1と2のログには、フローステートの概念があるという大きな違いがあります。これにより、フローの継続と終了、およびトラフィックの帯域幅情報がマークされます。
次のステップ
Azure NSGは、リソースへのトラフィックを制限して監査するための強力なツールです。効果的に使用することで、リソースとインフラストラクチャを適切に保護することができます。NSGフローログを介した監査機能や、サブネットやネットワークアダプタにNSGを制限する能力などを活用することで、必要に応じてルールのスコープを設定し、すべてのトラフィックが予想どおりであることを確認することができます。