この記事は更新から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 “<リソースグループ名>” } Set-AzNetworkSecurityGroup -NetworkSecurityGroup $NSG |