ARMテンプレートを使って、Network Security Groupのデプロイしてみた(特定のIPからRDPを許可)

 

Azure Network Security Group(NSG)のデプロイをARMテンプレート使ってやってみました。

今回は一番初期に使うパターンとして多い、RDP(ポート番号3389)を特定のIPから許可する設定で試してみました。

※間違って、RDPをInterNetにAnyで許可してしまう事を防げないかなぁという事でARMテンプレートを作成してみました。

1 .NSGのテンプレート

今回は、特定IPからのRDPを許可するセキュリティ規則を作成してます。下記サンプルを適当な名前を付けて、JSON形式(拡張子をJSON)にしてファイルを保存します。

サンプルでは以下の値をパラメータとして指定するようにしています。

    • NSG名
    • ロケーション(デフォルト値を東日本としています)
    • NSGのルール名(デフォルト値をRDP-Permitとしています)
    • RDPを許可するIP
{

    “$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”: “*”,
                            “sourcePortRange”: “*”,
                            “destinationPortRange”: “3389”,
                            “sourceAddressPrefix”: “[parameters(‘PermitIP’)]”,
                            “destinationAddressPrefix”: “VirtualNetwork”,
                            “access”: “Allow”,
                            “priority”: 100,
                            “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”: “*”,
                “sourcePortRange”: “*”,
                “destinationPortRange”: “3389”,
                “sourceAddressPrefix”: “[parameters(‘PermitIP’)]”,
                “destinationAddressPrefix”: “VirtualNetwork”,
                “access”: “Allow”,
                “priority”: 100,
                “direction”: “Inbound”,
                “sourcePortRanges”: [],
                “destinationPortRanges”: [],
                “sourceAddressPrefixes”: [],
                “destinationAddressPrefixes”: []
            }
        }
    ]
}

 

※デフォルトルールは、テンプレートには必要無いようです。

.ARMテンプレートをPower Shellでデプロイする

1.で作成したARMテンプレートをPower Shellでデプロイします。
今回のサンプルではリソースグループ名、ロケーション名、セキュリティ規則名はデプロイ用のPower Shellに直接記載しています。Power Shellでデプロイ時にNSGの名前、RDPを許可するIPを指定できるようにしています。

#NSG Template Deploy

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

$resourceGroupName = “リソースグループ名”
$location = “ロケーション名”
$NSGRuleName =“セキュリティ規則名”
$TemplateFilePath = “テンプレートのパス”

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

NSGが出来た後に、SubnetやNetwork Interfaceとの関連付けを行ってください。この編のPower Shellは随時公開していきたいと思います。

今後は、サービスタグの指定、複数のセキュリティ規則を一括して作成するなど、環境に合わせて作成できるようにしていきたい所です。