Рубрики
Uncategorized

Шаблоны рук, Использование NSG и групп безопасности приложений в ваших развертываниях Azure

Если вы хотите использовать инфраструктуру в качестве кода в своих проектах, вы должны помнить, что вам нужно поместить … Tagged с DevOps, Azure, IAC, ARM.

Если вы хотите использовать инфраструктуру в качестве кода в своих проектах, вы должны помнить, что вам нужно поместить всю инфраструктуру в коде. Но часто чего -то не хватает, особенно при развертывании IAAS, сетевой безопасности.

В среде IAAS у вас обычно есть виртуальные машины внутри нескольких подсетей. Создание такого рода архитектуры с шаблоном ARM является простым, но обычно одной частью пренебрегают сетевой безопасностью с группами сети. Для этого много причин; Он комплекс, у вас может не быть матрицы соединений, количество виртуальной машины, IP, … так что большую часть времени вы думаете; Группа сети безопасности будет сделана позже. Но позже часто синоним никогда.

Лучшая практика для развертывания групп безопасности Networks так же, как вы развертываете виртуальные машины и другие услуги. Это должно быть в то же время. Держать все вместе.

Возьмите этот пример.

Представьте себе ситуацию, когда вам нужно реализовать шаблон для создания двух виртуальных машин, одного фронта и одного DB -сервера. Две виртуальные машины находятся в отдельных подсетях, и вы знаете, что вам нужно будет добавить несколько ограничений, чтобы фронт сможет подключиться только к БД на ограниченных портах TCP.

Даже если мы еще не знаем, какой порт использует решение, мы можем начать создавать группу безопасности сети в этих подсетах.

Чтобы избежать использования IP -адресов в правилах и иметь возможность сгруппировать несколько виртуальных машин в том же правиле NSG, вам необходимо будет использовать группы безопасности приложений. Группы безопасности приложений — это простой способ связать виртуальную машину, на самом деле, VM NIC, конфигурация сети с объектом, который вы можете использовать в NSG. Вы можете применить группы сети либо к виртуальной NIC, либо к подсети виртуальной машины. Я обычно предпочитаю связывать NSG с подсети, а не с виртуальной машиной.

Для нашего примера нам нужно:

  • Один Vnet
  • Две подчинки; спереди и бэкэнд
  • Два виртуальных машины, фронт01 и DB01

Основная инфраструктура в руке выглядит так:

"resources": [
        {
            "name": "vnet01",
            "type": "Microsoft.Network/virtualNetworks",
            "apiVersion": "2019-11-01",
            "location": "[variables('location')]",
            "properties": {
                "addressSpace": {
                    "addressPrefixes": [
                        "172.24.0.0/24"
                    ]
                },
                "subnets": [
                    {
                        "name": "front",
                        "properties": {
                            "addressPrefix": "172.24.0.0/26"
                        }
                    },
                    {
                        "name": "backend",
                        "properties": {
                            "addressPrefix": "172.24.0.64/26"
                        }
                    }
                ]
            }
        },
        {
            "name": "vmfront01-nic",
            "type": "Microsoft.Network/networkInterfaces",
            "apiVersion": "2019-11-01",
            "location": "[variables('location')]",
            "dependsOn": [

                "[resourceId('Microsoft.Network/virtualNetworks', 'vnet01')]"
            ],
            "properties": {
                "ipConfigurations": [
                    {
                        "name": "ipConfig1",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'vnet01', 'front')]"
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "vmfront01",
            "type": "Microsoft.Compute/virtualMachines",
            "apiVersion": "2019-07-01",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/networkInterfaces', 'vmfront01-nic')]"
            ],

            "properties": {
                "hardwareProfile": {
                    "vmSize": "Standard_F2s_v2"
                },
                "osProfile": {
                    "computerName": "vmfront01",
                    "adminUsername": "[parameters('adminUsername')]",
                    "adminPassword": "[parameters('adminPassword')]"
                },
                "storageProfile": {
                    "imageReference": {
                        "publisher": "MicrosoftWindowsServer",
                        "offer": "WindowsServer",
                        "sku": "2019-Datacenter-Core",
                        "version": "latest"
                    },
                    "osDisk": {
                        "name": "vmfront01-os.vhd",
                        "caching": "ReadWrite",
                        "createOption": "FromImage"
                    }
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces', 'vmfront01-nic')]"
                        }
                    ]
                }
            }
        },
    {
            "name": "vmdb01-nic",
            "type": "Microsoft.Network/networkInterfaces",
            "apiVersion": "2019-11-01",
            "location": "[variables('location')]",
            "dependsOn": [

                "[resourceId('Microsoft.Network/virtualNetworks', 'vnet01')]"
            ],
            "properties": {
                "ipConfigurations": [
                    {
                        "name": "ipConfig1",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'vnet01', 'backend')]"
                            }
                        }
                    }
                ]
            }
        },
        {
            "name": "vmdb01",
            "type": "Microsoft.Compute/virtualMachines",
            "apiVersion": "2019-07-01",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Network/networkInterfaces', 'vmdb01-nic')]"
            ],

            "properties": {
                "hardwareProfile": {
                    "vmSize": "Standard_F2s_v2"
                },
                "osProfile": {
                    "computerName": "vmdb01",
                    "adminUsername": "[parameters('adminUsername')]",
                    "adminPassword": "[parameters('adminPassword')]"
                },
                "storageProfile": {
                    "imageReference": {
                        "publisher": "MicrosoftWindowsServer",
                        "offer": "WindowsServer",
                        "sku": "2019-Datacenter-Core",
                        "version": "latest"
                    },
                    "osDisk": {
                        "name": "vmdb01-os.vhd",
                        "caching": "ReadWrite",
                        "createOption": "FromImage"
                    }
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces', 'vmdb01-nic')]"
                        }
                    ]
                }
            }
        }
    ]

Теперь вам нужно будет добавить группы безопасности приложений, один для передней виртуальной машины и один для DB VM. Группы безопасности приложений в ARM просты. Просто имя и местоположение (вы также можете добавить теги в качестве любых других объектов).

 {
            "type": "Microsoft.Network/applicationSecurityGroups",
            "apiVersion": "2019-11-01",
            "name": "frontVMs-asg",
            "location": "[variables('location')]",
            "properties": {}
        },
        {
            "type": "Microsoft.Network/applicationSecurityGroups",
            "apiVersion": "2019-11-01",
            "name": "dbVMs-asg",
            "location": "[variables('location')]",
            "properties": {}
        },

Теперь, когда у вас есть группы безопасности ваших приложений, вы можете связать их с конфигурацией IP виртуальной машины. Вы должны сделать это на уровне виртуального NIC, в свойствах конфигурации IP, добавив свойства ApplicationSecurityGroups.

"ipConfigurations": [
                    {
                        "name": "ipConfig1",
                        "properties": {
                            "privateIPAllocationMethod": "Dynamic",
                            "subnet": {
                                "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', 'vnet01', 'front')]"
                            },
                            "applicationSecurityGroups" : [
                                {
                                    "ID": "[resourceId('Microsoft.Network/applicationSecurityGroups', 'frontVMs-asg')]"
                                }
                            ]
                        }
                    }
                ]

ApplicationSecurityGroups — это массив. Это означает, что вы можете добавить более одного ASG в конфигурацию. Вам нужно будет добавить в зависимости от пункта, чтобы убедиться, что группа безопасности приложений создана перед виртуальной NIC.

"dependsOn": [
                "[resourceId('Microsoft.Network/virtualNetworks', 'vnet01')]",
                "[resourceId('Microsoft.Network/applicationSecurityGroups', 'frontVMs-asg')]"
            ],

Вы можете начать строить группы безопасности сетей. Вы хотите разрешить связь с фронтом на портах 80 и 443, и вы хотите ограничить связь на сервере DB только от передней виртуальной машины.

Чтобы создать правило NSG с использованием групп безопасности приложений, вы должны заменить sourceaddressprefixes/destinationAddressprefixes с помощью SourceApplicationSecurityGroups/destinationApplicationsCurityGroups с идентификатором группы безопасности приложения.

Например, чтобы правило разрешило общение от передней виртуальной машины в DB

 {
                        "name": "sqlRule",
                        "properties": {
                            "description": "Allow Sql Servers flows",
                            "protocol": "Tcp",
                            "sourcePortRange": "*",
                            "destinationPortRange": "1433",
                            "sourceApplicationSecurityGroups": [
                                {
                                    "ID":  "[resourceId('Microsoft.Network/applicationSecurityGroups', 'frontVMs-asg')]"
                                }
                            ],
                            "destinationApplicationSecurityGroups": [
                                {
                                "ID": "[resourceId('Microsoft.Network/applicationSecurityGroups', 'dbVMs-asg')]"
                                }
                            ],
                            "access": "Allow",
                            "priority": 100,
                            "direction": "Inbound"
                        }
                    }

Конечно, вы не должны забывать добавлять зависимость для группы безопасности приложений при создании групп сетевой безопасности.

            "name": "backend-nsg",
            "type": "Microsoft.Network/networkSecurityGroups",
            "apiVersion": "2019-11-01",
            "dependsOn": [
                "[resourceId('Microsoft.Network/applicationSecurityGroups', 'dbVMs-asg')]",
                "[resourceId('Microsoft.Network/applicationSecurityGroups', 'frontVMs-asg')]"

            ]

Группы безопасности приложений просты. Это объект, который вы можете использовать для группы нескольких конфигураций IP из виртуальных NICS. Это делает группы безопасности сети простыми в использовании, поскольку вам не нужно знать IP -адрес виртуальной машины для создания правила. Вы можете масштабировать свои развертывания, не нуждаясь в обновлении групп безопасности сетей. Если вам нужно добавить виртуальную машину в существующее правило, вам просто нужно добавить ее в группу безопасности приложения.

Это так же, если вам нужно добавить правило, не нужно собирать информацию о IP, вам просто нужно добавить справочный идентификатор группы безопасности приложения для создания ваших правил.

Полный файл JSON включен Суть

Оригинал: «https://dev.to/omiossec/arm-templates-using-nsg-and-application-security-groups-in-your-azure-deployments-1one»