AzureCLI(azコマンド)を利用してNSGを作成し、変更を加え、最後に削除するという一連の流れを試してみたのでそのやり方やコマンド例、注意点などを紹介していきます。
NSGに変更を加えるコマンド一覧
NSG自体に変更を加えるコマンドとNSGのルールに変更を加えるコマンドで少しだけ内容が異なります。
NSG自体に変更を加えるコマンド(az network nsg …)
az network nsg create | ネットワーク セキュリティ グループを作成します。 |
az network nsg delete | ネットワークセキュリティグループを削除します。 |
az network nsg list | ネットワークセキュリティグループを一覧表示します。 |
az network nsg show | ネットワークセキュリティグループに関する情報を取得します。 |
az network nsg update | ネットワークセキュリティグループを更新します。 |
NSGのルールに変更を加えるコマンド(az network nsg rule …)
az network nsg rule create | ネットワークセキュリティグループの規則を作成します。 |
az network nsg rule delete | ネットワークセキュリティグループの規則を削除します。 |
az network nsg rule list | ネットワークセキュリティグループ内のすべての規則を一覧表示します。 |
az network nsg rule show | ネットワークセキュリティグループの規則の詳細を取得します。 |
az network nsg rule update | ネットワークセキュリティグループの規則を更新します。 |
az network nsg show | ネットワークセキュリティグループに関する情報を取得します。 |
az network nsg update | ネットワークセキュリティグループを更新します。 |
この記事で実施する内容
NSGの作成から削除まで一通りのコマンドを試してみます。
流れとしては以下の通りです。
今回はインターフェースとしてpowershellを利用しています。
1.NSGを作成する
NSGの作成には事前にリソースグループ(RG)を作成しておく必要があるので、RGも併せて作成します。
「東日本」リージョンに「Test-RG」という名前のRGを作成し、その中に「Test-NSG」を作成します。
#RGの作成
az group create -n "Test-RG" -l "japaneast"
#NSGの作成
az network nsg create -n "Test-NSG" -g "Test-RG"
尚、RGを変数として渡し以下のように作成することもできます。
実行している内容は同じです。
$rg = az group create -n "Test-RG" -l "japaneast" | ConvertFrom-Json
az network nsg create -n "Test-NSG" -g $rg.name
実行後以下のように出力が見えてくれば作成完了です。
「az network nsg list」を利用して作成されていることを確認します。
az network nsg list | select-string "Test-NSG"
2.NSGにルールを追加する
上記で作成した「Test-NSG」に「SSH」というルールを追加します。
az network nsg rule create -g "Test-RG" --nsg-name "Test-NSG" -n "SSH" --source-address-prefixes 1.1.1.1/32 --destination-port-range 22 --priority 200
優先度:200、送信先ポート:22、送信元IPアドレスは「1.1.1.1/32」からのみ許可する設定としています。
実行後以下のように出力が見えてくれば作成完了です。
「az network nsg rule show」を利用して作成されていることを確認します。
az network nsg rule show -g "Test-RG" --nsg-name "Test-NSG" -n "SSH"
ルール作成時に出力される内容と同じものが確認できるかと思います。
【参考】ルール作成時にパラメータを指定せずに作成するとどうなるのか?
ルール作成時にパラメータを指定せずに作成するとどうなるのか? について気になったので実際にやってみました。
ルール名だけ「Default」と指定し、そのほかのパラメータは指定せずに作成してみます。
az network nsg rule create -g "Test-RG" --nsg-name "Test-NSG" -n "Default"
「優先度は指定してください」とエラーが吐かれ、怒られました。。(ですが、同時に例文まで出力に表示してくれましたのでとても優しい仕様ですね。笑)
なので優先度:800として再度作成してみます。
az network nsg rule create -g "Test-RG" --nsg-name "Test-NSG" -n "Default" --priority 800
今度は成功しました。
また、デフォルト値は以下のようになっていることもわかりました。
- 許可の設定は「Allow」(”access”: “Allow”)
- 送信先は「any」(”destinationAddressPrefix”: “*”)
- 送信先ポートは「80」(”destinationPortRange”: “80”)
- ルールの向きは「受信規則」(”direction”: “Inbound”)
- プロトコルは「any」(”protocol”: “*”)
- 送信元も「any」(”sourceAddressPrefix”: “*”)
- 送信元ポートも「any」(”sourcePortRange”: “*”)
デフォルト値で設定することはあまりないとは思いますが、デフォルトが受信規則の設定なので、「本来送信規則を設定したいのに間違えて受信規則を設定してしまう」といった間違いはありそうと感じたので、指定するオプションとデフォルト値は覚えておいたほうがよさそうです。
3.NSGに追加したルールに変更を加える
上記で作成した「SSH」というルールに対して変更を加えます。
許可する送信元IPアドレスを「1.1.1.1/32」→「20.20.20.20./32」へと変更します。
az network nsg rule update -g "Test-RG" --nsg-name "Test-NSG" -n "SSH" --source-address-prefixes 20.20.20.20/32
実行後以下のように出力が見えてくれば更新完了です。
「az network nsg rule show」を利用して更新されていることを確認します。
az network nsg rule show -g "Test-RG" --nsg-name "Test-NSG" -n "SSH"
ルール作成時に出力される内容と同じものが確認できるかと思います。
4.NSGを削除する
最後に「Test-NSG」を削除します。
az network nsg delete -n "Test-NSG" -g "Test-RG"
このときインターフェースの出力には何も出ません。
「az network nsg list」を利用して削除されていることを確認します。
NSG作成後の確認結果と異なり、もう存在しないためここでは結果が出力されません。
これにて削除も完了となります。
注意点
仮想マシン作成時にデフォルト値で作成されるNSGは「すべてのIPからのRDP/SSHを許可する」
これはGUIで作成するときも同じですが、仮想マシンを作成する際に、特にNSGを指定することなくデフォルト値で作成されるNSGは「すべてのIPからのRDP or SSHを許可する」設定になっているので変更しないと攻撃対象となってしまいます。
そのため基本的にはNSGは事前に送信元を制限したNSGを仮想マシン作成時に指定して作成することが推奨とされていますが、デフォルト値で作成してしまったなら上記コマンドなどを用いて変更が必要です。
以下に変更する際のAzureCLIのコマンド例を記載しておきます。
【NSG名】と【RG名】と送信元のアドレス帯は適宜変更して利用してください。
az network nsg rule update --name "rdp" --nsg-name "【NSG名】" -g "【RG名】" --source-address-prefixes 1.1.1.1/32