AzureCLIでNSGを操作してみた

AzureCLI AzureCLI

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の作成から削除まで一通りのコマンドを試してみます。

流れとしては以下の通りです。

  1. NSGを作成する
  2. NSGにルールを追加する
  3. NSGに追加したルールに変更を加える
  4. 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 create」コマンド実行結果

「az network nsg list」を利用して作成されていることを確認します。

az network nsg list | select-string "Test-NSG"
「az network nsg list」コマンド実行結果

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 create」コマンド実行結果

「az network nsg rule show」を利用して作成されていることを確認します。

az network nsg rule show -g "Test-RG" --nsg-name "Test-NSG" -n "SSH"
「az network nsg rule show」コマンド実行結果

ルール作成時に出力される内容と同じものが確認できるかと思います。

【参考】ルール作成時にパラメータを指定せずに作成するとどうなるのか?

ルール作成時にパラメータを指定せずに作成するとどうなるのか? について気になったので実際にやってみました。

ルール名だけ「Default」と指定し、そのほかのパラメータは指定せずに作成してみます。

az network nsg rule create -g "Test-RG" --nsg-name "Test-NSG" -n "Default"
パラメータを指定せずにコマンド実行した結果1

「優先度は指定してください」とエラーが吐かれ、怒られました。。(ですが、同時に例文まで出力に表示してくれましたのでとても優しい仕様ですね。笑)

なので優先度:800として再度作成してみます。

az network nsg rule create -g "Test-RG" --nsg-name "Test-NSG" -n "Default" --priority 800
パラメータを指定せずにコマンド実行した結果2

今度は成功しました。

また、デフォルト値は以下のようになっていることもわかりました。

  • 許可の設定は「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 update」コマンド実行結果

「az network nsg rule show」を利用して更新されていることを確認します。

az network nsg rule show -g "Test-RG" --nsg-name "Test-NSG" -n "SSH"
「az network nsg rule show」コマンド実行結果

ルール作成時に出力される内容と同じものが確認できるかと思います。

4.NSGを削除する

最後に「Test-NSG」を削除します。

az network nsg delete -n "Test-NSG" -g "Test-RG"

このときインターフェースの出力には何も出ません。

「az network nsg delete」コマンド実行結果

「az network nsg list」を利用して削除されていることを確認します。

「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
タイトルとURLをコピーしました