Azureネットワークセキュリティグループをデプロイしてサブネットやネットワークインターフェースに割り当てる

2020-04-17

Azure ネットワークセキュリティグループ(NSG)のデプロイや割り当てをやってみました。

ネットワークセキュリティグループ(公式サイト)

ネットワークセキュリティグループ自体はAzure仮想マシン等のリソースへアクセス制御を行うものになります。。

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

スポンサーリンク

Azure PortalでRDPを許可するネットワークセキュリティグループ(NSG)を作成して割り当てる

Azure Portalを使ってネットワークセキュリティグループ(NSG)を作成する。

ネットワークセキュリティグループを作成する

1)Azure Portalでネットワークセキュリティグループのメニューを表示します。追加を選択します。

作成画面が表示されます。リソースグループと地域を選択し、名前を入力したら確認および作成をクリックします。

※必ず適用する仮想マシンや仮想ネットワーク(サブネット)と同じ地域を選択します。

確認画面が表示されますので、作成を選択します。これでネットワークセキュリティグループの作成は完了です。

作成されたネットワークセキュリティグループの規則を確認する

作成された受信規則や送信規則を確認するとデフォルトでは受信規則はAzure Load Balancerからのアクセスと仮想ネットワーク間のアクセスのみが許可された状態になっています。

NSGの受信規則で必要となる設定項目を確認する

NSGの受信セキュリティ規則設定で必要な項目を確認してみました。

ネットワークセキュリティグループのメニューで受信セキュリティ規則を選択します。追加をクリックします。

必須項目は以下の内容となっている事が確認できます。

ソース、ソースIPアドレス、ソースポート範囲、宛先、宛先ポート範囲、プロトコル、アクション、優先度、名前

RDPの接続許可設定を作成する

特定IPからRDP許可をする設定を作成してみます。名前はRDP-Permitとして作成します。設定が完了したら追加をクリックします。

      • 設定変更内容
        • ソース
          • Any→IP Addresses
        • ソースIPアドレス/CIDR範囲
          • 接続許可するIPアドレスを設定
        • サービス
          • RDP
        • 名前
          • RDP-Permit

※サービスRDPを選択するとプロトコルは自動的にTCPとなります。

作成した受信規則を確認する

受信規則を確認してみると作成したルールが追加されている事が分かります。

サブネットやネットワークインターフェースにネットワークセキュリティグループを割り当てる

サブネットやネットワークインターフェースに作成したNSGを割り当ててみます。

サブネットにネットワークセキュリティグループを割り当てる

サブネットにネットワークセキュリティグループを割り当ててみます。

1)仮想ネットワークの画面でサブネットを選択します。

2)ネットワークセキュリティグループを割り当てるサブネットを選択します。

3)割り当てるネットワークセキュリティグループを選択します。

セキュリティグループの欄に割り当てたNSGが表示されている事が分かります。

ネットワークインターフェースにネットワークセキュリティグループを割り当てる

ネットワークインターフェースにネットワークセキュリティグループを割り当ててみます。

1)仮想マシンのメニューでネットワークを選択します。ネットワークインタフェースが表示されます。ネットワークインタフェースを選択します。

ネットワークインタフェースの画面が表示されます。

2)ネットワークインタフェースのメニューでネットワークセキュリティグループを選択します。ネットワークセキュリティグループが選択できますので、割り当てるネットワークセキュリティグループを選択します。

これで設定は完了です。

ネットワークセキュリティグループをARMテンプレート+Power Shellでデプロイする

今回のARMテンプレートを作成し、Power Shellを使ってデプロイしてみます。

ネットワークセキュリティグループのARMテンプレートを作成する

今回のARMテンプレートで実施する内容は以下の通りになります。

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

NSGのセキュリティ規則については、ソースIP以外をARMテンプレート内のresourcesで指定しています。RDPをすべてのプロトコルで受信許可し、優先度100とする内容としています。

パラメータとして以下の値を指定するようにしています。

      • NSG名
      • ロケーション(デフォルト値を東日本としています)
      • NSGのセキュリティ規則名(デフォルト値をRDP-Permitとしています)
      • ソースIPアドレス(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": []
            }
        }
    ]
}

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

NSGのARMテンプレートをPower Shell使ってデプロイする

作成したNSGの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との関連付けを行ってください。

これをデフォルト適用すれば、間違ってRDPをInterNetにAnyで公開する事を防げないかなぁと思っていたします。

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