Руководство. Создание и администрирование виртуальных сетей Azure для виртуальных машин Linux с помощью Azure CLI

Область применения: ✔️ Виртуальные машины Linux ✔️ Гибкие масштабируемые наборы

Виртуальные машины Azure осуществляют внутреннее и внешнее взаимодействие через сеть Azure. В этом руководстве содержатся сведения о развертывании двух виртуальных машин и настройке для них сети Azure. Примеры, описанные в этом руководстве, предполагают, что на виртуальных машинах размещается веб-приложение с сервером базы данных, но здесь не описывается развертывание самого приложения. В этом руководстве описано следующее:

  • Создание виртуальной сети и подсети
  • Создание общедоступного IP-адреса
  • Создание интерфейсной виртуальной машины
  • Защита сетевого трафика
  • Создание внутренней виртуальной машины.

При работе с этим руководством используется интерфейс командной строки (CLI) в Azure Cloud Shell, который всегда обновлен до последней версии. Чтобы открыть Cloud Shell, выберите Попробовать в верхнем углу любого блока кода.

Если вы решили установить и использовать интерфейс командной строки локально, то для работы с этим руководством вам понадобится Azure CLI 2.0.30 или более поздней версии. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Обзор сети виртуальной машины

Виртуальные сети Azure позволяют устанавливать безопасные сетевые подключения между виртуальными машинами, в Интернете, а также между другими службами Azure, такими как База данных SQL Azure. Виртуальные сети разбиты на логические сегменты — подсети. Подсети позволяют контролировать поток сетевого трафика. Это своего рода периметр безопасности. При развертывании виртуальная машина обычно содержит виртуальный сетевой интерфейс, подключенный к подсети.

Завершив работу с руководством, вы создадите следующие ресурсы виртуальной сети:

Виртуальная сеть с двумя подсетями

  • myVNet. Виртуальная сеть, которую используют виртуальные машины для взаимодействия между собой и в Интернете.
  • myFrontendSubnet. Подсеть в myVNet, используемая ресурсами внешних интерфейсов.
  • myPublicIPAddress. Общедоступный IP-адрес, используемый для доступа к myFrontendVM из Интернета.
  • myFrontentNic. Сетевой интерфейс, используемый myFrontendVM для взаимодействия с myBackendVM.
  • myFrontendVM. Виртуальная машина, используемая для взаимодействия Интернета и myBackendVM.
  • myBackendNSG. Группа безопасности сети, которая управляет взаимодействием между myFrontendVM и myBackendVM.
  • myBackendSubnet. Подсеть, связанная с myBackendNSG и используемая внутренними ресурсами.
  • myBackendNic. Сетевой интерфейс, используемый myBackendVM для взаимодействия с myFrontendVM.
  • myBackendVM. Виртуальная машина, использующая порт 22 и 3306 для взаимодействия с myFrontendVM.

Создание виртуальной сети и подсети

В этом руководстве создается виртуальная сеть с двумя подсетями: интерфейсная подсеть для размещения веб-приложения и внутренняя подсеть для размещения сервера базы данных.

Прежде чем создать виртуальную сеть, выполните команду az group create, чтобы создать группу ресурсов. Следующий пример позволяет создать группу ресурсов myRGNetwork в расположении eastus.

az group create --name myRGNetwork --location eastus

Создание виртуальной сети

Создайте виртуальную сеть с помощью команды az network vnet create. В этом примере создается сеть mvVnet с префиксом адреса 10.0.0.0/16, а также подсеть myFrontendSubnet с префиксом 10.0.1.0/24. Далее в этом руководстве мы подключим интерфейсную виртуальную машину к этой подсети.

az network vnet create \
  --resource-group myRGNetwork \
  --name myVNet \
  --address-prefix 10.0.0.0/16 \
  --subnet-name myFrontendSubnet \
  --subnet-prefix 10.0.1.0/24

Создание подсети

Добавьте новую подсеть к виртуальной сети с помощью команды az network vnet subnet create. В этом примере создается подсеть myBackendSubnet с префиксом адреса 10.0.2.0/24. Она используется со всеми внутренними службами.

az network vnet subnet create \
  --resource-group myRGNetwork \
  --vnet-name myVNet \
  --name myBackendSubnet \
  --address-prefix 10.0.2.0/24

На этом этапе мы создали сеть и разбили ее на две подсети — одна для интерфейсных служб, а вторая для внутренних служб. В следующем разделе мы создадим виртуальные машины и подключим их к этим подсетям.

Создание общедоступного IP-адреса

Общедоступный IP-адрес обеспечивает доступность ресурсов Azure в Интернете. Метод распределения общедоступного IP-адреса может быть динамическим или статическим. По умолчанию выделяется динамический общедоступный IP-адрес. После освобождения виртуальной машины освобождаются также и динамические IP-адреса. Таким образом, IP-адреса изменяются во время каждой операции с освобождением виртуальной машины.

При использовании статического метода выделения IP-адрес остается назначенным виртуальной машине, даже если она в освобожденном состоянии. В этом случае вы не сможете указать IP-адрес. Он выделяется из пула доступных адресов.

az network public-ip create --resource-group myRGNetwork --name myPublicIPAddress

При создании виртуальной машины с помощью команды az vm create по умолчанию выделяется динамический общедоступный IP-адрес. При создании виртуальной машины с помощью команды az vm create добавьте аргумент --public-ip-address-allocation static, чтобы назначить статический общедоступный IP-адрес. Эта операция не описана в этом руководстве, но в следующем разделе показано, как изменить динамический IP-адрес на статический.

Изменение метода выделения

Метод выделения IP-адресов можно изменить с помощью команды az network public-ip update. В этом примере метод выделения IP-адреса интерфейсной виртуальной машины изменяется на статический.

Сначала отмените подготовку виртуальной машины.

az vm deallocate --resource-group myRGNetwork --name myFrontendVM

Обновите метод выделения, используя команду az network public-ip update. В этом случае для параметра --allocation-method необходимо задать значение static.

az network public-ip update --resource-group myRGNetwork --name myPublicIPAddress --allocation-method static

Запустите виртуальную машину.

az vm start --resource-group myRGNetwork --name myFrontendVM --no-wait

Создание виртуальной машины без общедоступного IP-адреса

Во многих случаях виртуальная машина не должна быть доступна через Интернет. Чтобы создать виртуальную машину без общедоступного IP-адреса, используйте аргумент --public-ip-address "" с пустыми двойными кавычками. Эта конфигурация рассматривается далее в этом руководстве.

Создание интерфейсной виртуальной машины

Выполните команду az vm create, чтобы создать виртуальную машину myFrontendVM, использующую myPublicIPAddress.

az vm create \
  --resource-group myRGNetwork \
  --name myFrontendVM \
  --vnet-name myVNet \
  --subnet myFrontendSubnet \
  --nsg myFrontendNSG \
  --public-ip-address myPublicIPAddress \
  --image Ubuntu2204 \
  --generate-ssh-keys

Защита сетевого трафика

Группы безопасности сети содержат перечень правил безопасности, которые разрешают или запрещают передачу сетевого трафика к ресурсам, подключенным к виртуальным сетям Azure. Группы безопасности сети (NSG) можно связать с подсетями или отдельными сетевыми интерфейсами. Группа безопасности сети, связанная с сетевым интерфейсом, применяется только к связанной виртуальной машине. Если группа безопасности сети связана с подсетью, эти правила применяются ко всем ресурсам в подсети.

Правила группы безопасности сети

Правила группы безопасности сети определяют сетевые порты, через которые разрешен или запрещен трафик. Эти правила также могут включать исходные и целевые диапазоны IP-адресов, что позволяет контролировать трафик между определенными системами и подсетями. Правилам также присваивается приоритет (от 1 до 4096), и они оцениваются в порядке приоритета. Правило с приоритетом 100 оценивается перед правилом с приоритетом 200.

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

Стандартные правила для NSG:

  • Виртуальная сеть. Входящий и исходящий трафик виртуальной сети разрешен в обоих направлениях.
  • Интернет. Исходящий трафик разрешен, но входящий трафик заблокирован.
  • Подсистема балансировки нагрузки. Разрешает Azure Load Balancer инициировать проверку работоспособности виртуальных машин и экземпляров роли. Если набор балансировки нагрузки не используется, это правило можно переопределить.

Создание групп безопасности сети

Группу безопасности сети можно создать вместе с виртуальной машиной, используя команду az vm create. В этом случае группа безопасности сети связывается с сетевым интерфейсом виртуальных машин и автоматически создается правило NSG, разрешающее прохождение трафика через порт 22 из любого источника. Ранее в этом руководстве мы создали интерфейсную виртуальную машину, вместе с которой была автоматически создана группа безопасности сети переднего плана. Кроме того, было также создано правило NSG для порта 22.

В некоторых случаях есть смысл заранее создать группу безопасности сети, например, если не нужно создавать правила SSH по умолчанию или если группу безопасности сети нужно присоединить к подсети.

Создайте группу безопасности сети с помощью команды az network nsg create.

az network nsg create --resource-group myRGNetwork --name myBackendNSG

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

Обновите имеющуюся подсеть myBackendSubnet, включив в нее новую группу безопасности сети.

az network vnet subnet update \
  --resource-group myRGNetwork \
  --vnet-name myVNet \
  --name myBackendSubnet \
  --network-security-group myBackendNSG

Защита входящего трафика

При создании интерфейсной виртуальной машины также было создано правило NSG, разрешающее входящий трафик через порт 22. Это правило разрешает SSH-подключения к виртуальной машине. В этом примере трафик также необходимо разрешить через порт 80. Такая конфигурация обеспечивает доступ к веб-приложению на виртуальной машине.

Создайте правило для порта 80 с помощью команды az network nsg rule create.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myFrontendNSG \
  --name http \
  --access allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 200 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range 80

Интерфейсная виртуальная машина доступна только через порты 22 и 80. Весь остальной входящий трафик блокируется группой безопасности сети. Иногда есть смысл визуализировать конфигурации правил NSG. Получите конфигурацию правила NSG с помощью команды az network rule list.

az network nsg rule list --resource-group myRGNetwork --nsg-name myFrontendNSG --output table

Защита трафика между виртуальными машинами

Правила группы безопасности сети также можно применить между виртуальными машинами. В этом примере интерфейсная виртуальная машина должна взаимодействовать с внутренней виртуальной машиной через порт 22 и 3306. Эта конфигурация разрешает SSH-подключения из интерфейсной виртуальной машины, а также разрешает приложению, расположенному на этой виртуальной машине, взаимодействовать с внутренней базой данных MySQL. Весь остальной трафик между интерфейсной и внутренней виртуальными машинами должен блокироваться.

Создайте правило для порта 22 с помощью команды az network nsg rule create. Обратите внимание, что аргумент --source-address-prefix имеет значение 10.0.1.0/24. Такая конфигурация гарантирует, что только трафик из интерфейсной подсети сможет пройти через группу безопасности сети.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myBackendNSG \
  --name SSH \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 100 \
  --source-address-prefix 10.0.1.0/24 \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range "22"

Теперь добавьте правило, разрешающее трафик MySQL через порт 3306.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myBackendNSG \
  --name MySQL \
  --access Allow \
  --protocol Tcp \
  --direction Inbound \
  --priority 200 \
  --source-address-prefix 10.0.1.0/24 \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range "3306"

И наконец, так как группы безопасности сети имеют правила по умолчанию, разрешающие весь трафик между виртуальными машинами в той же виртуальной сети, вы можете создать правило блокировки всего трафика во внутренних группах безопасности сети. Обратите внимание, что аргумент --priority имеет значение 300, что меньше значения приоритета правил NSG и MySQL. Такая конфигурация гарантирует, что трафик SSH и MySQL по-прежнему сможет проходить через группу безопасности сети.

az network nsg rule create \
  --resource-group myRGNetwork \
  --nsg-name myBackendNSG \
  --name denyAll \
  --access Deny \
  --protocol Tcp \
  --direction Inbound \
  --priority 300 \
  --source-address-prefix "*" \
  --source-port-range "*" \
  --destination-address-prefix "*" \
  --destination-port-range "*"

Создание внутренней виртуальной машины

Теперь создайте виртуальную машину и присоедините ее к подсети myBackendSubnet. Обратите внимание, что в качестве значения аргумента --nsg используются пустые двойные кавычки. Вместе с виртуальной машиной не нужно создавать группу безопасности сети. Виртуальная машина будет подключена к внутренней подсети, которая защищена с помощью предварительно созданной внутренней группы безопасности сети. Эта группа безопасности сети применяется к виртуальной машине. Кроме того, обратите внимание, что в качестве значения аргумента --public-ip-address используются пустые двойные кавычки. Эта конфигурация создает виртуальную машину без общедоступного IP-адреса.

az vm create \
  --resource-group myRGNetwork \
  --name myBackendVM \
  --vnet-name myVNet \
  --subnet myBackendSubnet \
  --public-ip-address "" \
  --nsg "" \
  --image Ubuntu2204 \
  --generate-ssh-keys

Внутренняя виртуальная машина доступна только через порты 22 и 3306 из интерфейсной подсети. Весь остальной входящий трафик блокируется группой безопасности сети. Иногда есть смысл визуализировать конфигурации правил NSG. Получите конфигурацию правила NSG с помощью команды az network rule list.

az network nsg rule list --resource-group myRGNetwork --nsg-name myBackendNSG --output table

Следующие шаги

В этом руководстве вы создали и защитили сети Azure с точки зрения виртуальных машин. Вы научились выполнять следующие задачи:

  • Создание виртуальной сети и подсети
  • Создание общедоступного IP-адреса
  • Создание интерфейсной виртуальной машины
  • Защита сетевого трафика
  • Создание внутренней виртуальной машины

Дополнительные сведения о защите дисков виртуальной машины см. в статье Резервное копирование и аварийное восстановление дисков.