Группа безопасности сети позволяет фильтровать входящий и исходящий трафик ресурсов Azure в виртуальной сети Azure.
Группы безопасности сети содержат правила безопасности, которые фильтруют трафик по IP-адресу, порту и протоколу. Если группа безопасности сети связана с подсетью, правила безопасности применяются к ресурсам, развернутыми в этой подсети.
В этом руководстве описано следующее:
- Создание группы безопасности сети и правил безопасности.
- Создание групп безопасности приложений
- Создание виртуальной сети и привязка группы безопасности сети к подсети.
- Развертывание виртуальных машин и связывание их сетевых интерфейсов с группами безопасности приложений.
Предварительные требования
Azure Cloud Shell
В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.
Начало работы с Azure Cloud Shell
| Вариант |
Пример и ссылка |
| Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. |
|
| Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. |
|
| Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. |
|
Чтобы использовать Azure Cloud Shell, выполните следующие действия:
Запустите Cloud Shell.
Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.
Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.
Нажмите клавишу ВВОД, чтобы запустить код или команду.
Чтобы установить и использовать PowerShell локально для работы с этой статьей, вам понадобится модуль Azure PowerShell 1.0.0 или более поздней версии. Выполните команду Get-Module -ListAvailable Az, чтобы узнать установленную версию. Если вам необходимо выполнить обновление, ознакомьтесь со статьей, посвященной установке модуля Azure PowerShell. При использовании PowerShell на локальном компьютере также нужно запустить Connect-AzAccount, чтобы создать подключение к Azure.
Если у вас нет аккаунта Azure, создайте бесплатную учетную запись перед началом.
- Для работы с этой статьей требуется Azure CLI версии 2.0.28 или более поздней. Если вы используете Azure Cloud Shell, последняя версия уже установлена.
Следующая процедура создает виртуальную сеть с подсетью ресурсов.
На портале найдите и выберите "Виртуальные сети".
На странице Виртуальные сети выберите команду + Создать.
На вкладке Основные сведения подменю Создать виртуальную сеть введите или выберите нижеприведенную информацию:
| Настройка |
Значение |
|
Сведения о проекте |
|
| Подписка |
Выберите свою подписку. |
| Группа ресурсов |
Выберите Создать новое.
Введите test-rg в name.
Нажмите кнопку ОК. |
|
Сведения об экземпляре |
|
| Имя. |
Введите vnet-1. |
| Область/регион |
Выберите регион Восточная часть США 2. |
Нажмите кнопку "Далее ", чтобы перейти на вкладку "Безопасность ".
Нажмите кнопку "Далее ", чтобы перейти на вкладку IP-адресов .
В поле адресного пространства в подсетях выберите подсеть по умолчанию .
В области "Изменить подсеть" введите или выберите следующие сведения:
| Настройка |
Значение |
|
Сведения о подсети |
|
| Шаблон подсети |
Оставьте значение по умолчанию Default. |
| Имя. |
Введите подсеть-1. |
| Начальный адрес |
Оставьте значение по умолчанию 10.0.0.0. |
| Размер подсети |
Оставьте значение по умолчанию /24(256 адресов). |
Выберите Сохранить.
Выберите "Рецензирование" и "Создать " в нижней части экрана. После прохождения проверки выберите Создать.
Создайте группу ресурсов для всех ресурсов, созданных в рамках этой статьи, выполнив командлет New-AzResourceGroup. В следующем примере создается группа ресурсов в расположении westus2 :
$rg = @{
ResourceGroupName = "test-rg"
Location = "westus2"
}
New-AzResourceGroup @rg
Создайте виртуальную сеть с помощью командлета New-AzVirtualNetwork. В следующем примере создается виртуальная сеть с именем vnet-1:
$vnet = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "vnet-1"
AddressPrefix = "10.0.0.0/16"
}
$virtualNetwork = New-AzVirtualNetwork @vnet
Создайте конфигурацию подсети с помощью командлета Set-AzVirtualNetworkSubnetConfig, а затем сохраните эту конфигурацию подсети в виртуальную сеть с помощью командлета Set-AzVirtualNetwork. В следующем примере в виртуальную сеть добавляется подсеть с именем subnet-1 и связывается с ней группа безопасности сети nsg-1 :
$subnet = @{
Name = "subnet-1"
VirtualNetwork = $virtualNetwork
AddressPrefix = "10.0.0.0/24"
}
Add-AzVirtualNetworkSubnetConfig @subnet
$virtualNetwork | Set-AzVirtualNetwork
Создайте группу ресурсов с помощью команды az group create для всех ресурсов, созданных в рамках этой статьи. В следующем примере создается группа ресурсов в расположении westus2 :
az group create \
--name test-rg \
--location westus2
Создайте виртуальную сеть с помощью команды az network vnet create. В следующем примере создается виртуальная сеть с именем vnet-1:
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefixes 10.0.0.0/16
Добавьте подсеть в виртуальную сеть при помощи команды az network vnet subnet create. В следующем примере в виртуальную сеть добавляется подсеть с именем subnet-1 и связывается с ней группа безопасности сети nsg-1 :
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-1 \
--address-prefix 10.0.0.0/24
Создание групп безопасности приложений
Группа безопасности приложений позволяет группировать серверы с аналогичными функциями, например веб-серверы.
В поле поиска в верхней части портала введите группу безопасности приложений. Выберите группы безопасности приложений в результатах поиска.
Выберите + Создать.
На вкладке "Основы" создайте группу безопасности приложений, введите или выберите следующую информацию:
| Настройка |
Значение |
|
Сведения о проекте |
|
| Подписка |
Выберите свою подписку. |
| Группа ресурсов |
Выберите test-rg. |
|
Сведения об экземпляре |
|
| Имя. |
Введите asg-web. |
| Область/регион |
Выберите Западная часть США 2. |
Выберите Review + create.
Выберите + Создать.
Повторите предыдущие шаги, указав следующие значения:
| Настройка |
Значение |
|
Сведения о проекте |
|
| Подписка |
Выберите свою подписку. |
| Группа ресурсов |
Выберите test-rg. |
|
Сведения об экземпляре |
|
| Имя. |
Введите asg-mgmt. |
| Область/регион |
Выберите Западная часть США 2. |
Выберите Review + create.
Нажмите кнопку создания.
Создайте группу безопасности приложений, используя командлет New-AzApplicationSecurityGroup. Группа безопасности приложений позволяет группировать серверы с аналогичными требованиями к фильтрации портов. В следующем примере создаются две группы безопасности приложений.
$web = @{
ResourceGroupName = "test-rg"
Name = "asg-web"
Location = "westus2"
}
$webAsg = New-AzApplicationSecurityGroup @web
$mgmt = @{
ResourceGroupName = "test-rg"
Name = "asg-mgmt"
Location = "westus2"
}
$mgmtAsg = New-AzApplicationSecurityGroup @mgmt
Создайте группу безопасности приложений с помощью команды az network asg create. Группа безопасности приложений позволяет группировать серверы с аналогичными требованиями к фильтрации портов. В следующем примере создаются две группы безопасности приложений.
az network asg create \
--resource-group test-rg \
--name asg-web \
--location westus2
az network asg create \
--resource-group test-rg \
--name asg-mgmt \
--location westus2
Создание группы безопасности сети
Группа безопасности сети защищает трафик в вашей виртуальной сети.
В поле поиска в верхней части портала введите группу безопасности сети. В результатах поиска выберите Группы безопасности сети.
Примечание.
В результатах поиска для групп безопасности сети могут отображаться группы безопасности сети (классическая модель). Выберите группы безопасности сети.
Выберите + Создать.
На вкладке «Основы» окна «Создать группу сетевой безопасности» введите или выберите следующие сведения:
| Настройка |
Значение |
|
Сведения о проекте |
|
| Подписка |
Выберите свою подписку. |
| Группа ресурсов |
Выберите test-rg. |
|
Сведения об экземпляре |
|
| Имя. |
Введите nsg-1. |
| Расположение |
Выберите Западная часть США 2. |
Выберите Review + create.
Нажмите кнопку создания.
Создайте группу безопасности сети с помощью командлета New-AzNetworkSecurityGroup. В следующем примере создается группа безопасности сети с именем nsg-1:
$nsgParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "nsg-1"
}
$nsg = New-AzNetworkSecurityGroup @nsgParams
Создайте группу безопасности сети с помощью команды az network nsg create. В следующем примере создается группа безопасности сети с именем nsg-1:
# Create a network security group
az network nsg create \
--resource-group test-rg \
--name nsg-1
Связывание группы безопасности сети с подсетью
В этом разделе описано, как связать группу безопасности сети с подсетью созданной ранее виртуальной сети.
В поле поиска в верхней части портала введите группу безопасности сети. В результатах поиска выберите Группы безопасности сети.
Выберите nsg-1.
Выберите Подсети в разделе Параметры элемента nsg-1.
На странице Подсети выберите + Ассоциировать:
В разделе Привязать подсеть выберите vnet-1 (test-rg) для Виртуальная сеть.
Выберите подсеть-1 для подсети, затем выберите ОК.
Используйте Get-AzVirtualNetwork для извлечения объекта виртуальной сети, а затем используйте Set-AzVirtualNetworkSubnetConfig , чтобы связать группу безопасности сети с подсетью. В следующем примере извлекается объект виртуальной сети и обновляется конфигурация подсети, чтобы связать группу безопасности сети:
# Retrieve the virtual network
$vnet = Get-AzVirtualNetwork -Name "vnet-1" -ResourceGroupName "test-rg"
# Update the subnet configuration to associate the network security group
$subnetConfigParams = @{
VirtualNetwork = $vnet
Name = "subnet-1"
AddressPrefix = $vnet.Subnets[0].AddressPrefix
NetworkSecurityGroup = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
}
Set-AzVirtualNetworkSubnetConfig @subnetConfigParams
# Update the virtual network with the new subnet configuration
$vnet | Set-AzVirtualNetwork
Используйте az network vnet subnet update , чтобы связать группу безопасности сети с подсетью. В следующем примере группа безопасности сети nsg-1 связывается с подсетью-1.
az network vnet subnet update \
--resource-group test-rg \
--vnet-name vnet-1 \
--name subnet-1 \
--network-security-group nsg-1
Создание правил безопасности
Выберите правила безопасности для входящего трафика в разделе "Параметры" nsg-1.
На странице правил безопасности для входящего трафика нажмите кнопку +Добавить.
Создайте правило безопасности, разрешающее порт 80 для группы безопасности приложения asg-web. На странице "Добавление правила безопасности для входящего трафика" введите или выберите следующие сведения:
| Настройка |
Значение |
| Оригинал |
Оставьте значение по умолчанию Любое. |
| Диапазоны исходных портов |
Оставьте значение по умолчанию для (*). |
| Назначение |
Выберите Группа безопасности приложений. |
| Целевые группы безопасности приложений |
Выберите asg-web. |
| Сервис |
Оставьте значение по умолчанию Настраиваемое. |
| Диапазоны портов назначения |
Введите 80. |
| Протокол |
Выберите TCP. |
| Действие |
Оставьте значение по умолчанию Разрешить. |
| Приоритет |
Оставьте значение по умолчанию 100. |
| Имя. |
Введите allow-http-web. |
Выберите Добавить.
Выполните предыдущие действия со следующей информацией.
| Настройка |
Значение |
| Оригинал |
Оставьте значение по умолчанию Любое. |
| Диапазоны исходных портов |
Оставьте значение по умолчанию для (*). |
| Назначение |
Выберите Группа безопасности приложений. |
| Группа безопасности приложений для назначения |
Выберите asg-mgmt. |
| Сервис |
Оставьте значение по умолчанию Настраиваемое. |
| Диапазоны портов назначения |
Введите 8080. |
| Протокол |
Выберите TCP. |
| Действие |
Оставьте значение по умолчанию Разрешить. |
| Приоритет |
Оставьте значение по умолчанию 110. |
| Имя. |
Введите allow-8080-mgmt. |
Выберите Добавить.
Создайте правило безопасности с помощью командлета New-AzNetworkSecurityRuleConfig. В следующем примере мы создадим правило, разрешающее входящий трафик из интернета в группу безопасности приложений asg-web через порт 80.
$webAsgParams = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$webAsg = Get-AzApplicationSecurityGroup @webAsgParams
$webRuleParams = @{
Name = "Allow-HTTP-Web"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 100
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $webAsg.id
DestinationPortRange = 80
}
$webRule = New-AzNetworkSecurityRuleConfig @webRuleParams
В следующем примере создается правило, разрешающее входящий трафик из Интернета в группу безопасности приложений asg-mgmt через порт 8080:
$mgmtAsgParams = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtAsg = Get-AzApplicationSecurityGroup @mgmtAsgParams
$mgmtRuleParams = @{
Name = "Allow-8080-Mgmt"
Access = "Allow"
Protocol = "Tcp"
Direction = "Inbound"
Priority = 110
SourceAddressPrefix = "Internet"
SourcePortRange = "*"
DestinationApplicationSecurityGroupId = $mgmtAsg.id
DestinationPortRange = 8080
}
$mgmtRule = New-AzNetworkSecurityRuleConfig @mgmtRuleParams
Используйте Get-AzNetworkSecurityGroup для получения существующей группы безопасности сети, а затем добавьте новые правила с оператором += . Наконец, обновите группу безопасности сети с помощью Set-AzNetworkSecurityGroup:
# Retrieve the existing network security group
$nsg = Get-AzNetworkSecurityGroup -Name "nsg-1" -ResourceGroupName "test-rg"
# Add the new rules to the security group
$nsg.SecurityRules += $webRule
$nsg.SecurityRules += $mgmtRule
# Update the network security group with the new rules
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg
Создайте правило безопасности с помощью команды az network nsg rule create. В следующем примере создается правило, которое разрешает входящий трафик из Интернета в группу безопасности веб-приложений asg-web через порт 80.
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-HTTP-Web \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-web" \
--destination-port-range 80
В следующем примере создается правило, разрешающее входящий трафик из Интернета в группу безопасности приложений asg-mgmt через порт 8080:
az network nsg rule create \
--resource-group test-rg \
--nsg-name nsg-1 \
--name Allow-8080-Mgmt \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 110 \
--source-address-prefix Internet \
--source-port-range "*" \
--destination-asgs "asg-mgmt" \
--destination-port-range 8080
Создание виртуальных машин
Создайте две виртуальные машины в виртуальной сети.
На портале найдите и выберите "Виртуальные машины".
На виртуальных машинах нажмите кнопку +Создать, а затем виртуальную машину.
В подменю Создать виртуальную машину введите или выберите следующую информацию на вкладке Основные сведения:
| Настройка |
Значение |
|
Сведения о проекте |
|
| Подписка |
Выберите свою подписку. |
| Группа ресурсов |
Выберите test-rg. |
|
Сведения об экземпляре |
|
| Имя виртуальной машины |
Введите vm-web. |
| Область/регион |
Выберите (США) Западная часть США 2. |
| Параметры доступности |
Оставьте значение по умолчанию для параметра Избыточность инфраструктуры не требуется. |
| Тип безопасности |
Выберите Стандартное. |
| Изображение |
Выберите Ubuntu Server 24.04 LTS - x64 Gen2. |
| Экземпляр Azure Spot |
Оставьте по умолчанию снятую галочку. |
| Размер |
Выберите размер. |
|
Учетная запись администратора |
|
| Тип аутентификации |
Выберите Открытый ключ SSH. |
| Имя пользователя |
Введите azureuser. |
| SSH public key source (Источник открытого ключа SSH) |
Выберите Создать новую пару ключей. |
| Имя пары ключей |
Введите vm-web-key. |
|
Правила входящего порта |
|
| Выбрать входящие порты |
Выберите Отсутствует. |
Нажмите кнопку "Далее": диски , а затем " Далее: сеть".
На вкладке Сеть введите или выберите следующие значения параметров.
| Настройка |
Значение |
|
Сетевой интерфейс |
|
| Виртуальная сеть |
Выберите vnet-1. |
| Подсеть |
Выберите подсеть-1 (10.0.0.0/24). |
| Общедоступный IP-адрес |
Оставьте значение по умолчанию "Новый общедоступный IP-адрес". |
| Группа безопасности сети сетевого интерфейса |
Выберите Отсутствует. |
Перейдите на вкладку Просмотр и создание или нажмите синюю кнопку Просмотр и создание внизу страницы.
Нажмите кнопку создания.
При появлении запроса на создание пары ключей выберите "Скачать закрытый ключ" и создайте ресурс. Закрытый ключ скачан на локальный компьютер. Развертывание виртуальной машины может занять несколько минут.
Повторите предыдущие шаги, чтобы создать вторую виртуальную машину с именем vm-mgmt с именем пары ключей vm-mgmt-key.
Прежде чем создавать виртуальные машины, получите объект виртуальной сети с подсетью с помощью командлета Get-AzVirtualNetwork.
$virtualNetworkParams = @{
Name = "vnet-1"
ResourceGroupName = "test-rg"
}
$virtualNetwork = Get-AzVirtualNetwork @virtualNetworkParams
Создайте общедоступный IP-адрес для каждой виртуальной машины с помощью командлета New-AzPublicIpAddress.
$publicIpWebParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-web"
}
$publicIpWeb = New-AzPublicIpAddress @publicIpWebParams
$publicIpMgmtParams = @{
AllocationMethod = "Static"
ResourceGroupName = "test-rg"
Location = "westus2"
Name = "public-ip-vm-mgmt"
}
$publicIpMgmt = New-AzPublicIpAddress @publicIpMgmtParams
Создайте два сетевых интерфейса с помощью командлета New-AzNetworkInterface и назначьте каждому из них общедоступный IP-адрес. В следующем примере создается сетевой интерфейс, к которому привязывается общедоступный IP-адрес public-ip-vm-web.
$webNicParams = @{
Location = "westus2"
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpWeb.Id
}
$webNic = New-AzNetworkInterface @webNicParams
В следующем примере создается сетевой интерфейс, с ним связывается общедоступный IP-адрес public-ip-vm-mgmt .
$mgmtNicParams = @{
Location = "westus2"
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
SubnetId = $virtualNetwork.Subnets[0].Id
PublicIpAddressId = $publicIpMgmt.Id
}
$mgmtNic = New-AzNetworkInterface @mgmtNicParams
Создайте две виртуальные машины в виртуальной сети, чтобы вы могли проверить фильтрацию трафика на более позднем этапе.
Создайте ключи SSH в Azure с помощью New-AzSshKey. В следующем примере создаются ресурсы ключей SSH для каждой виртуальной машины:
# Create SSH key for vm-web
$webSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-web-key"
}
New-AzSshKey @webSshKeyParams
# Create SSH key for vm-mgmt
$mgmtSshKeyParams = @{
ResourceGroupName = "test-rg"
Name = "vm-mgmt-key"
}
New-AzSshKey @mgmtSshKeyParams
Создайте конфигурацию виртуальной машины с помощью командлета New-AzVMConfig, затем создайте виртуальную машину с помощью командлета New-AzVM. В следующем примере создается виртуальная машина, которая служит веб-сервером. Чтобы можно было перейти к следующему шагу, параметр -AsJob позволяет создать виртуальную машину в фоновом режиме.
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-web-key" -ResourceGroupName "test-rg"
$webVmConfigParams = @{
VMName = "vm-web"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$webVmConfig = New-AzVMConfig @webVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-web" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $webNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$webVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $webVmConfig
}
New-AzVM @webVmParams -AsJob
Создайте виртуальную машину в качестве сервера управления:
# Get the SSH public key
$sshKey = Get-AzSshKey -Name "vm-mgmt-key" -ResourceGroupName "test-rg"
$mgmtVmConfigParams = @{
VMName = "vm-mgmt"
VMSize = "Standard_DS1_V2"
}
$vmImageParams = @{
PublisherName = "Canonical"
Offer = "ubuntu-24_04-lts"
Skus = "server"
Version = "latest"
}
$mgmtVmConfig = New-AzVMConfig @mgmtVmConfigParams | `
Set-AzVMOperatingSystem -Linux -ComputerName "vm-mgmt" -Credential (New-Object System.Management.Automation.PSCredential("azureuser", (ConvertTo-SecureString "DummyP@ssw0rd" -AsPlainText -Force))) -DisablePasswordAuthentication | `
Set-AzVMSourceImage @vmImageParams | `
Add-AzVMNetworkInterface -Id $mgmtNic.Id | `
Set-AzVMOSDisk -CreateOption FromImage | `
Set-AzVMBootDiagnostic -Disable | `
Add-AzVMSshPublicKey -KeyData $sshKey.publicKey -Path "/home/azureuser/.ssh/authorized_keys"
$mgmtVmParams = @{
ResourceGroupName = "test-rg"
Location = "westus2"
VM = $mgmtVmConfig
}
New-AzVM @mgmtVmParams
Создание виртуальной машины занимает несколько минут. Не переходите к следующему шагу, пока Azure не закончит создание виртуальной машины.
Создайте две виртуальные машины в виртуальной сети, чтобы вы могли проверить фильтрацию трафика на более позднем этапе.
Создайте виртуальную машину с помощью команды az vm create. В следующем примере создается виртуальная машина, которая служит веб-сервером. Параметр --nsg "" указан для того, чтобы предотвратить создание в Azure группы безопасности сети по умолчанию для сетевого интерфейса, который Azure создает при создании виртуальной машины. Параметр --generate-ssh-keys приводит к тому, что интерфейс командной строки ищет доступный ключ SSH в ~/.ssh. Если он найден, используется этот ключ. Если нет, он создается и хранится в ~/.ssh:
az vm create \
--resource-group test-rg \
--name vm-web \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
Создание виртуальной машины занимает несколько минут. После создания виртуальной машины возвращается результат, аналогичный приведенному ниже.
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-web",
"location": "westus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.0.4",
"publicIpAddress": "203.0.113.24",
"resourceGroup": "test-rg"
}
Создайте виртуальную машину с помощью команды az vm create. В следующем примере создается виртуальная машина, которая служит сервером управления:
az vm create \
--resource-group test-rg \
--name vm-mgmt \
--image Ubuntu2404 \
--vnet-name vnet-1 \
--subnet subnet-1 \
--nsg "" \
--admin-username azureuser \
--generate-ssh-keys
Создание виртуальной машины занимает несколько минут. Не переходите к следующему шагу, пока Azure не закончит создание виртуальной машины.
Связывание сетевых интерфейсов с группой безопасности приложений
При создании виртуальной машины Azure создает сетевой интерфейс для каждой виртуальной машины и подключает их к виртуальным машинам.
Добавьте сетевой интерфейс для каждой виртуальной машины в одну из созданных ранее групп безопасности приложений:
В поле поиска в верхней части портала введите Виртуальная машина. Выберите виртуальные машины в результатах поиска, а затем выберите vm-web.
Выберите группы безопасности приложений в разделе Сетевое взаимодействие для vm-web.
Выберите "Добавить группы безопасности приложений", а затем на вкладке "Добавить группы безопасности приложений" выберите asg-web. Наконец, нажмите Добавить.
Повторите предыдущие шаги для vm-mgmt, выбрав asg-mgmt на вкладке "Добавление групп безопасности приложений".
Используйте Get-AzNetworkInterface для получения сетевого интерфейса виртуальной машины, а затем используйте Get-AzApplicationSecurityGroup для получения группы безопасности приложений. Наконец, используйте Set-AzNetworkInterface , чтобы связать группу безопасности приложений с сетевым интерфейсом. В следующем примере группа безопасности приложений asg-web связывается с сетевым интерфейсом vm-web-nic:
$params1 = @{
Name = "vm-web-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-web"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Повторите команду, чтобы связать группу безопасности приложений asg-mgmt с сетевым интерфейсом vm-mgmt-nic.
$params1 = @{
Name = "vm-mgmt-nic"
ResourceGroupName = "test-rg"
}
$nic = Get-AzNetworkInterface @params1
$params2 = @{
Name = "asg-mgmt"
ResourceGroupName = "test-rg"
}
$asg = Get-AzApplicationSecurityGroup @params2
$nic.IpConfigurations[0].ApplicationSecurityGroups = @($asg)
$params3 = @{
NetworkInterface = $nic
}
Set-AzNetworkInterface @params3
Используйте az network nic update , чтобы связать сетевой интерфейс с группой безопасности приложений. В следующем примере группа безопасности приложений asg-web связывается с сетевым интерфейсом vm-web-nic:
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-web --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-web \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-web
Повторите команду, чтобы связать группу безопасности приложений asg-mgmt с сетевым интерфейсом vm-mgmt-nic.
# Retrieve the network interface name associated with the virtual machine
nic_name=$(az vm show --resource-group test-rg --name vm-mgmt --query 'networkProfile.networkInterfaces[0].id' -o tsv | xargs basename)
# Associate the application security group with the network interface
az network nic ip-config update \
--name ipconfigvm-mgmt \
--nic-name $nic_name \
--resource-group test-rg \
--application-security-groups asg-mgmt
Тестирование фильтров трафика
В поле поиска в верхней части портала введите Виртуальная машина. В результатах поиска выберите Виртуальные машины.
Выберите vm-web.
Выберите команду "Выполнить" в разделе "Операции ".
Выберите RunShellScript.
В области "Запуск командного скрипта " введите следующие команды:
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
Выберите Выполнить. Дождитесь успешного завершения скрипта.
На странице обзора vm-web обратите внимание на общедоступный IP-адрес вашей виртуальной машины.
Чтобы убедиться, что вы можете получить доступ к vm-web веб-серверу из Интернета через порт 80, откройте интернет-браузер на компьютере и откройте страницу http://<public-ip-address-from-previous-step>.
Отображается стандартная страница nginx, так как входящий трафик из Интернета в группу безопасности asg-web разрешен через порт 80.
Сетевой интерфейс, подключенный к vm-web, связан с группой безопасности приложения asg-web и позволяет подключение.
Попробуйте получить доступ к vm-web на порту 443, открыв https://<public-ip-address-vm-web> в вашем браузере. Подключение завершается сбоем или истекает время ожидания, так как правило безопасности для asg-web не разрешает входящие соединения на порт 443 из Интернета.
Теперь настройте vm-mgmt с nginx на порте 8080. Выберите vm-mgmt на странице "Виртуальные машины ".
Выберите команду "Выполнить" в разделе "Операции ".
Выберите RunShellScript.
В области скрипта запуска команд введите следующие команды, чтобы установить nginx на порте 8080:
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
Выберите Выполнить. Дождитесь успешного завершения скрипта.
На странице обзораvm-mgmt обратите внимание на общедоступный IP-адрес виртуальной машины.
Чтобы убедиться, что вы можете получить доступ к веб-серверу vm-mgmt из Интернета через порт 8080, откройте интернет-браузер на компьютере и перейдите к http://<public-ip-address-vm-mgmt>:8080ней.
Вы видите страницу nginx по умолчанию, так как входящий трафик из Интернета в группу безопасности приложений asg-mgmt разрешен через порт 8080.
Попробуйте получить доступ к vm-mgmt через порт 80, введя адрес в адресной строке вашего браузера http://<public-ip-address-vm-mgmt>. Подключение завершается сбоем или истекает, потому что ни одно правило безопасности не разрешает доступ к порту 80 в группу безопасности приложений asg-mgmt.
Сетевой интерфейс, подключенный к vm-web, связан с группой безопасности приложения asg-web и позволяет подключение.
Установите nginx на vm-web с помощью Invoke-AzVMRunCommand:
$webInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-web"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
"@
}
Invoke-AzVMRunCommand @webInstallParams
Выполнение команды может занять несколько минут. После завершения проверьте веб-доступ на виртуальной машине vm-web.
Получите общедоступный IP-адрес vm-web:
$webIPParams = @{
Name = "public-ip-vm-web"
ResourceGroupName = "test-rg"
}
$webIP = Get-AzPublicIpAddress @webIPParams
Write-Host "vm-web IP: $($webIP.IpAddress)"
Чтобы убедиться, что вы можете получить доступ к веб-серверу vm-web из Интернета через порт 80, откройте интернет-браузер на своем компьютере и перейдите на веб-страницу http://<vm-web-ip-address>.
Вы видите страницу по умолчанию nginx, так как входящий трафик из Интернета в группу безопасности веб-приложений asg проходит через порт 80. Сетевой интерфейс, подключенный к виртуальной машине vm-web , находится в этой группе.
Попробуйте получить доступ к vm-web по порту 443, открыв в браузере https://<vm-web-ip-address>. Подключение завершается сбоем или истекает время ожидания, так как правило безопасности для asg-web не разрешает входящие подключения по порту 443 из Интернета.
Теперь установите nginx на порт 8080 на vm-mgmt:
$mgmtInstallParams = @{
ResourceGroupName = "test-rg"
VMName = "vm-mgmt"
CommandId = "RunShellScript"
ScriptString = @"
sudo apt-get update -y
sudo apt-get install -y nginx
# Configure nginx to listen on port 8080
sudo tee /etc/nginx/sites-available/default > /dev/null <<'EOF'
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
sudo systemctl restart nginx
"@
}
Invoke-AzVMRunCommand @mgmtInstallParams
Получите общедоступный IP-адрес vm-mgmt:
$mgmtIPParams = @{
Name = "public-ip-vm-mgmt"
ResourceGroupName = "test-rg"
}
$mgmtIP = Get-AzPublicIpAddress @mgmtIPParams
Write-Host "vm-mgmt IP: $($mgmtIP.IpAddress)"
Чтобы убедиться, что вы можете получить доступ к веб-серверу vm-mgmt из Интернета через порт 8080, откройте интернет-браузер на компьютере и перейдите к http://<vm-mgmt-ip-address>:8080ней.
Вы видите страницу nginx по умолчанию, так как входящий трафик из Интернета в группу безопасности приложений asg-mgmt разрешен через порт 8080.
Попробуйте получить доступ к vm-mgmt через порт 80, введя http://<vm-mgmt-ip-address> в адресной строке вашего браузера. Подключение завершается сбоем или истекает, потому что ни одно правило безопасности не разрешает доступ к порту 80 в группу безопасности приложений asg-mgmt.
Установите nginx на vm-web с помощью az vm run-command invoke:
az vm run-command invoke \
--resource-group test-rg \
--name vm-web \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && sudo apt-get install -y nginx && sudo systemctl enable nginx && sudo systemctl start nginx"
Получите общедоступный IP-адрес для vm-web.
webIP=$(az vm show --show-details --resource-group test-rg --name vm-web --query publicIps --output tsv)
echo "vm-web IP: $webIP"
Чтобы убедиться, что вы можете получить доступ к веб-серверу vm-web из Интернета через порт 80, используйте curl:
curl http://$webIP
Подключение завершается успешно, так как asg-web, группа безопасности, в которой находится сетевой интерфейс, подключенный к виртуальной машине vm-web, разрешает входящий трафик на порт 80 из Интернета.
Попробуйте получить доступ к vm-web через порт 443:
curl -k https://$webIP
Подключение завершается сбоем или истекает, так как правило безопасности для asg-web не разрешает входящий порт 443 из Интернета.
Теперь установите nginx на порт 8080 на vm-mgmt:
az vm run-command invoke \
--resource-group test-rg \
--name vm-mgmt \
--command-id RunShellScript \
--scripts "sudo apt-get update -y && \
sudo apt-get install -y nginx && \
sudo bash -c 'cat > /etc/nginx/sites-available/default <<EOF
server {
listen 8080 default_server;
listen [::]:8080 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
try_files \\\$uri \\\$uri/ =404;
}
}
EOF' && \
sudo systemctl restart nginx"
Получите общедоступный IP-адрес vm-mgmt:
mgmtIP=$(az vm show --show-details --resource-group test-rg --name vm-mgmt --query publicIps --output tsv)
echo "vm-mgmt IP: $mgmtIP"
Чтобы убедиться, что вы можете получить доступ к веб-серверу vm-mgmt из Интернета через порт 8080, используйте curl:
curl http://$mgmtIP:8080
Подключение выполнено успешно, так как входящий трафик из Интернета в группу безопасности приложений asg-mgmt разрешен через порт 8080.
Попробуйте получить доступ к vm-mgmt через порт 80:
curl http://$mgmtIP
Подключение завершается сбоем или истекает, потому что ни одно правило безопасности не разрешает доступ к порту 80 в группу безопасности приложений asg-mgmt.
Завершив использование созданных ресурсов, можно удалить группу ресурсов и все ее ресурсы.
Войдите на портал Azure; найдите в поиске и выберите Группы ресурсов.
На странице групп ресурсов выберите группу ресурсов test-rg.
На странице test-rg выберите "Удалить группу ресурсов".
Введите test-rg в поле Ввод имени группы ресурсов, чтобы подтвердить удаление, а затем нажмите кнопку "Удалить".
Вы можете удалить ненужную группу ресурсов и все содержащиеся в ней ресурсы с помощью командлета Remove-AzResourceGroup:
$params = @{
Name = "test-rg"
Force = $true
}
Remove-AzResourceGroup @params
Вы можете удалить ненужную группу ресурсов и все содержащиеся в ней ресурсы, выполнив команду az group delete.
az group delete \
--name test-rg \
--yes \
--no-wait
Следующие шаги
Изучив это руководство, вы:
- Создали группу безопасности сети и связали ее с подсетью виртуальной сети.
- Созданы группы безопасности приложений для веб-трафика и трафика управления.
- Создали две виртуальные машины Linux с проверкой подлинности ключа SSH и связали их сетевые интерфейсы с группами безопасности приложений.
- Установлены веб-серверы nginx на обеих виртуальных машинах с разными конфигурациями портов.
- Протестирована фильтрация сети группы безопасности приложений, показав, что vm-web разрешает порт 80 (HTTP), но запрещает порт 443, а vm-mgmt разрешает порт 8080, но запрещает порт 80 (HTTP).
Дополнительные сведения о группах безопасности сети см. в статьях Безопасность сети и Create, change, or delete a network security group (Создание, изменение или удаление группы безопасности сети).
Azure маршрутизирует трафик между подсетями по умолчанию. Вместо этого можно выбрать маршрутизацию трафика между подсетями через виртуальную машину, выступая в качестве брандмауэра, например.
Чтобы изучить, как создать таблицу маршрутов, перейдите к следующему учебнику.