ARMテンプレートを使ってネットワークセキュリティグループ(NSG)をデプロイ

2020-04-17ARM Template,Azure,Network Security Group,PowerShell/Azure CLI

ARMテンプレートを使ってAzureネットワークセキュリティグループ(NSG)のデプロイをやってみました。
今回は仮想マシンのNSGとして利用頻度が多そうな、RDP(ポート番号3389)を特定のIPからのみ受信許可する設定で試してみました。

※2022年7月9日に記事を再編集しております。

スポンサーリンク

ネットワークセキュリティグループ(NSG)とは

仮想マシン等のAzure リソースに対するアクセス制御に使われるサービスとしてネットワークセキュリティグループ(NSG)があります。 
ネットワークセキュリティグループの概要やAzure Portalを使ったデプロイ方法についてはこちらに纏めています。
併せて見て頂けると大変有難いです。

Azure VM(仮想マシン)に関するNSGの纏めはこちらに纏めています。
併せて見て頂けると大変有難いです。

ネットワークセキュリティグループ(NSG)のARMテンプレート

NSGのARMテンプレートを作成します。

作成するネットワークセキュリティグループ(NSG)の設定値

NSGのARMテンプレートでは2つの設定を行っています。

      • NSGの作成
      • 受信セキュリティ規則の作成

NSGの設定についてはパラメータ指定で指定するようにしています。

設定項目 設定値
名前 パラメータ指定
地域 パラメータ指定
デフォルト値:japaneast

受信セキュリティ規則についてはこのような設定で作成しています。

設定項目 設定値
名前 パラメータ指定

優先度 1000
通信内容 パラメータ指定したIP→VNET
ポート番号 RDP(3389)
プロトコル TCP
許可設定 Allow

使用したパラメータ

ネットワークセキュリティグループのARMテンプレートで利用したパラメータです。

パラメータ名 パラメータで指定する内容
NSGName ネットワークセキュリティグループの名前
Location ネットワークセキュリティグループの地域
デフォルト値:japaneast
NSGRuleName 受信規則名
デフォルト値:RDP-Permit
PermitIP 受信許可するアドレス

※環境に合わせて設定するパラメータは適時変更願います。

ネットワークセキュリティグループ(NSG)のARMテンプレート

ネットワークセキュリティグループのARMテンプレートです。
NSGのデフォルトルールは自動生成される為必要ありません。

{
    “$schema": “https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    “contentVersion": “1.0.0.0",
    “parameters": {
        “NSGName": {
            “type": “String",
            “metadata": {}
        },
        “Location": {
            “type": “String",
            “defaultValue": “japaneast",
            “metadata":{} 
        },
        “NSGRuleName": {
            “type": “String",
            “defaultValue": “RDP-Permit",
            “metadata":{} 
        },
        “PermitIP": {
           “type": “String",
           “metadata":{} 
        }
    },
    “variables": {},
    “resources": [
        {
            “type": “Microsoft.Network/networkSecurityGroups",
            “apiVersion": “2019-11-01",
            “name": “[parameters('NSGName’)]",
            “location": “[parameters('Location’)]",
            “properties": {
                “securityRules": [
                    {
                        “name": “[parameters('NSGRuleName’)]",
                        “properties": {
                            “protocol": “Tcp",
                            “sourcePortRange": “*",
                            “destinationPortRange": “3389",
                            “sourceAddressPrefix": “[parameters('PermitIP’)]",
                            “destinationAddressPrefix": “VirtualNetwork",
                            “access": “Allow",
                            “priority": 1000,
                            “direction": “Inbound",
                            “sourcePortRanges": [],
                            “destinationPortRanges": [],
                            “sourceAddressPrefixes": [],
                            “destinationAddressPrefixes": []
                        }
                    }
                ]
            }
        },
        {
            “type": “Microsoft.Network/networkSecurityGroups/securityRules",
            “apiVersion": “2019-11-01",
            “name": “[concat(parameters('NSGName’), '/’, parameters('NSGRuleName’))]",
            “dependsOn": [
                “[resourceId('Microsoft.Network/networkSecurityGroups’, parameters('NSGName’))]"
            ],
            “properties": {
                “protocol": “Tcp",
                “sourcePortRange": “*",
                “destinationPortRange": “3389",
                “sourceAddressPrefix": “[parameters('PermitIP’)]",
                “destinationAddressPrefix": “VirtualNetwork",
                “access": “Allow",
                “priority": 1000,
                “direction": “Inbound",
                “sourcePortRanges": [],
                “destinationPortRanges": [],
                “sourceAddressPrefixes": [],
                “destinationAddressPrefixes": []
            }
        }
    ]
}

ARMテンプレートをPowerShell使ってデプロイ

作成したNSGのARMテンプレートをPowerShell使ってデプロイします。

デプロイ用のPowerShell

ARMテンプレートのデプロイはNew-AzResourceGroupDeploymentで実施しています。
リソースグループ名、地域名、受信セキュリティ規則名、ARMテンプレートファイルパスはPowerShell内に直接記載しています。
デプロイ時指定するのはNSG名、許可IPとしています。

※環境に合わせて適時修正下さい。

#NSG Template Deploy
param (

  [String] [Parameter(Mandatory=$true)]  $NSGName ,
  [String] [Parameter(Mandatory=$true)]  $Address
    )

$resourceGroupName = “リソースグループ名"
$Location = “地域名"
$NSGRuleName =“受信セキュリティ規則名"
$TemplateFilePath = “ARMテンプレートファイルのパス"

New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
  -TemplateFile $TemplateFilePath `
  -NSGName $NSGName `
  -NSGRuleName $NSGRuleName `
  -PermitIP $Address `
  -Location $Location

デプロイ実行

デプロイしてみます。
ARMテンプレートはNSG_20220709.jsonとして保存してます。
デプロイ用のPowerShellはNSG_Template_Deploy_20220709.ps1として保存してます。

受信セキュリティ規則、送信セキュリティ規則
 NSG_Template_Deploy_20220709.ps1を実行します。
パラメータの入力値を聞かれるので入力します。
実行が完了するとNSGが生成されている事が分かります。
受信セキュリティ規則も生成されている事が分かります。
規則permit-rdpを確認すると入力値通りの設定で作成されている事が分かります。

最後に

ARMテンプレートを使ったNSGの作成をやってみました。
今回はPowerShellを使ったデプロイしていますが、Azure Portal上にあるテンプレートを利用しても同様の事が出来ます。
同じような設定で作成する場合はARMテンプレートを使いまわす事で非常に便利かと思います。

スポンサーリンク