ARMテンプレートを使ったAzure Network Security Groupのデプロイ手順

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

ARMテンプレートを使用したNSG(Azure Network Security Group)の作成手順です。

ARMテンプレートのデプロイにはAzure PowerShellを使用しています。
今回は仮想マシン(Azure VM)のNSGとして利用頻度が高いRDP(ポート番号3389)について、特定のIPアドレスからのみ受信を許可する設定で確認しています。

※本記事では、Azure Network Security Group(ネットワークセキュリティグループ)をNSGと表記します。
※本記事では、Azure Virtual Machines(Azure VM)を仮想マシンとして表記しています。

スポンサーリンク

NSG(Azure Network Security Group)とは

仮想マシンなどのAzureリソースへのアクセス制御に使用されるサービスとしてNSGがあります。
ネットワークセキュリティグループの概要、Azure Portalを利用したリソースの作成方法、仮想マシンでの適用例については、こちらで紹介しています。

NSG(Azure Network Security Group)のARMテンプレートを作成

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

作成するNSGの設定値

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

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

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

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

作成した受信セキュリティ規則の設定内容です。

設定項目 設定値
名前 パラメーターで指定
デフォルト値:RDP-Permit
優先度 1000
通信内容 ソース  : パラメーターで指定したパブリックIPアドレス
宛先 : VirtualNetwork
ポート番号 サービス : RDP
宛先ポート範囲 : 3389
プロトコル TCP
許可設定 Allow

NSGのARMテンプレートで使用したパラメーター

NSGのARMテンプレートで使用したパラメーターです。

パラメーター名 パラメーターで指定する内容
NSGName NSGの名前
Location NSGの地域
デフォルト値:japaneast
NSGRuleName 受信規則名
デフォルト値:RDP-Permit
PermitIP 受信許可するアドレス

※設定するパラメーターは、環境にあわせて修正します。

NSGのARMテンプレート

作成したNSGの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": []
            }
        }
    ]
}

—広告—

PowerShellを使用してNSGのARMテンプレートをデプロイ

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

ARMテンプレートのデプロイにはNew-AzResourceGroupDeployment

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

デプロイを実行

NSGのARMテンプレートをデプロイします。
ARMテンプレートはNSG_20220709.jsonとして保存しています。
デプロイ用のPowerShellスクリプトはNSG_Template_Deploy_20220709.ps1として保存しています。

NSG名はps-test-nsg、許可するIPアドレスは192.168.1.1を設定しています。

デプロイを実行
NSG_Template_Deploy_20220709.ps1を実行します。
パラメーターの入力値を求められるので、入力します。
PowerShellの実行が完了すると、NSGが生成されていることが確認できます。
受信セキュリティ規則も生成されていることが確認できます。
受信セキュリティ規則として作成したpermit-rdpを確認します。
入力値通りの設定で作成されていることが確認できます。

最後に

今回は、ARMテンプレートを使用したNSGの作成手順を確認しました。
PowerShellを使ってARMテンプレートをデプロイしていますが、Azure Portal上にあるテンプレート機能を利用しても同様のことが可能です。
ARMテンプレートを使い回すことで、簡単にリソースを複数作成することができて非常に便利かと思いました。

スポンサーリンク