ネットワークセキュリティグループ(NSG)の一括登録

この記事は更新から24ヶ月以上経過しているため、最新の情報を別途確認することを推奨いたします。

はじめに

VM構築の際にファイアウォールとは別にネットワークセキュリティグループ(NSG)によるアクセス制限をすることが多いかと思います。

AzureportalによるGUI操作でもNSGの設定を行うことが可能ですが、1つ2つならともかく一台に数十個も登録する場合はとても面倒ですし途中でミスに気付き辛くなってしまいます。

そこで本ブログでは、PowerShellを用いて事前に準備したcsvファイルをインポートして、NSGを一括登録する方法をご紹介します。

事前準備

本ブログで記載しているスクリプトは全てAzモジュールを用いて記述しています。事前にPowerShellでAzモジュールが使えるように下記URLを参考にAzurePowerShellのインストールをしてください。

https://docs.microsoft.com/ja-jp/powershell/azure/install-az-ps?view=azps-2.8.0

CSVの準備

NSGで、設定する項目は以下の9点です。

・規則名(Name)

・アクセスの許可or不可(Access)

・プロトコル(Protocol)

・受信or送信(Direction)

・優先度(Priority)

・ソースアドレス(SourceAddressPrefix)

・ソースポート範囲(SourcePortRange)

・宛先(DestinationAddressPrefix)

・宛先ポート範囲(DestinationPortRange)

上記に加え任意で

・説明(Description)

も加えることができますが、この項目の有り無しでスクリプトが若干変わるため今回は割愛いたします。

これらを1行目のセルに記述したcsvファイルを作成します。

※既にNSGがある場合は以下のスクリプトでCSVをエクスポートしてフォーマットを取得する方法もあります。

(Get-AzNetworkSecurityGroup -Name “<NSG名>” -ResourceGroupName “<リソースグループ名>”).SecurityRules| select `
Name, `
Access, `
Protocol, `
Direction, `
Priority, `
@{Name=”SourceAddressPrefix”; Expression={$_.SourceAddressPrefix -join “,”}}, `
@{Name=”SourcePortRange”; Expression={$_.SourcePortRange -join “,”}}, `
@{Name=”DestinationAddressPrefix”; Expression={$_.DestinationAddressPrefix -join “,”}}, ` @{Name=”DestinationPortRange”; Expression={$_.DestinationPortRange -join “,”}} `
| ConvertTo-Csv | select -Skip 1 | Out-File <CSVの排出先ファイルパス>  -Encoding utf8

CSVのフォーマットを作成したら、NSGで設定する情報を入力します。

今回は以下の要件で入力しました。

 

入力の際の注意点として

アクセスの許可or不可:Allow or Deny

受信or送信:Inbound or Outbound

プロトコル,ソースアドレス,ソースポート範囲,宛先,宛先ポート範囲: Anyは*(アスタリスク)

で表現します。

 

NSGの一括適用

CSVの準備ができたら、以下のスクリプトを実行します。

$NSG = Get-AzNetworkSecurityGroup -Name “<NSG名>” -ResourceGroupName “<リソースグループ名>”
$CSV = Import-CSV <インポートするCSVのファイルパス> -Encoding UTF8
$CSV | foreach{
Add-AzNetworkSecurityRuleConfig `
-Name $_.Name `
-NetworkSecurityGroup $NSG `
-Access $_.Access `
-Protocol $_.Protocol `
-Direction $_.Direction `
-Priority $_.Priority `
-SourceAddressPrefix ($_.SourceAddressPrefix -split “,”) `
-SourcePortRange $_.SourcePortRange `
-DestinationAddressPrefix ($_.DestinationAddressPrefix -split “,”) `
-DestinationPortRange $_.DestinationPortRange
}
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $NSG

スクリプトを実行すると変更後のNSGの情報がPowerShell上に表示されます

そして、Azureportalを確認すると

記載した二つの規則が追加されています。

以上で一括登録が完了です。

 

追記

NSG規則を削除したい場合はRemove-AzNetworkSecurityRuleConfigを使います。削除したいNSG規則のみを列挙したCSVファイルを用意して以下のスクリプトを実行することでNSG規則の除外が行えます。

$NSG = Get-AzNetworkSecurityGroup -Name “<NSG名>” -ResourceGroupName “<リソースグループ名>”
$CSV = Import-CSV <インポートするCSVのファイルパス> -Encoding UTF8
$CSV | foreach{
Remove-AzNetworkSecurityRuleConfig `
-Name $_.Name `
-NetworkSecurityGroup $NSG `

}

Set-AzNetworkSecurityGroup -NetworkSecurityGroup $NSG

いいね (この記事が参考になった人の数:6)
(↑参考になった場合はハートマークを押して評価お願いします)
読み込み中...

注意事項・免責事項

※技術情報につきましては投稿日時点の情報となります。投稿日以降に仕様等が変更されていることがありますのでご了承ください。

※公式な技術情報の紹介の他、当社による検証結果および経験に基づく独自の見解が含まれている場合がございます。

※これらの技術情報によって被ったいかなる損害についても、当社は一切責任を負わないものといたします。十分な確認・検証の上、ご活用お願いたします。

※当サイトはマイクロソフト社によるサポートページではございません。パーソルプロセス&テクノロジー株式会社が運営しているサイトのため、マイクロソフト社によるサポートを希望される方は適切な問い合わせ先にご確認ください。
 【重要】マイクロソフト社のサポートをお求めの方は、問い合わせ窓口をご確認ください