Упражнение. Настройка сетевого доступа

Завершено

В этом упражнении вы настроите доступ к виртуальной машине, созданной ранее в этом модуле.

Важно!

Песочница Microsoft Learn по-прежнему должна быть запущена. Если истекло время ожидания для песочницы, необходимо повторить предыдущее упражнение (упражнение "Создание виртуальной машины Azure").

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

az vm list


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

Сейчас созданная и установленная виртуальная машина Nginx недоступна из Интернета. Вы создадите группу безопасности сети, которая изменяет ее, разрешив входящий HTTP-доступ по порту 80.

Задача 1. Доступ к веб-серверу

В этой процедуре вы получаете IP-адрес своей виртуальной машины и пытаетесь получить доступ к домашней странице вашего веб-сервера.

  1. Выполните следующую команду az vm list-ip-addresses, чтобы получить IP-адрес виртуальной машины и сохранить его в переменной Bash:

    IPADDRESS="$(az vm list-ip-addresses \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --name my-vm \
      --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
      --output tsv)"    
    
  2. Выполните следующую команду curl, чтобы загрузить домашнюю страницу:

    curl --connect-timeout 5 http://$IPADDRESS
    

    Аргумент --connect-timeout указывает, что процесс подключения может продолжаться до пяти секунд. Через пять секунд появится сообщение об ошибке, указывающее, что время подключения истекло:

    curl: (28) Connection timed out after 5001 milliseconds
    

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

  3. Вы можете попробовать получить доступ к веб-серверу из браузера (это необязательный шаг).

    1. Выполните следующую команду, чтобы вывести IP-адрес вашей виртуальной машины на консоль:

      echo $IPADDRESS       
      

      Появится IP-адрес, например 23.102.42.235.

    2. Скопируйте этот IP-адрес в буфер обмена.

    3. Откройте новую вкладку браузера и перейдите на свой веб-сервер. Через несколько секунд вы увидите, что подключение не установлено. Если вы дождетесь, пока истечет время ожидания подключения браузера, то увидите что-то подобное следующей картинке:

      Screenshot of a web browser showing an error message that says the connection timed out.

    4. Не закрывайте эту вкладку браузера, она еще пригодится.

Задача 2. Получение списка текущих правил группы безопасности сети

Ваш веб-сервер был недоступен. Чтобы выяснить причину, давайте изучим текущие правила NSG.

  1. Выполните следующую команду az network nsg list, чтобы вывести список групп безопасности сети, связанных с вашей виртуальной машиной:

    az network nsg list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --query '[].name' \
      --output tsv    
    

    Вы увидите примерно такой результат.

    my-vmNSG
    
    
    

    Каждая виртуальная машина в Azure связана как минимум с одной группой безопасности сети. В данном случае Azure создала для вас группу безопасности сети с именем my-vmNSG.

  2. Выполните следующую команду az network nsg rule list, чтобы вывести список правил, связанных с группой безопасности сети my-vmNSG:

    az network nsg rule list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG    
    

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

  3. Еще раз выполните команду az network nsg rule list. Но на этот раз используйте аргумент --query, чтобы получить только имя, приоритет, затрагиваемые порты и доступ (Разрешить или Запретить) для каждого правила. Аргумент --output форматирует выходной результат в виде таблицы, чтобы его было удобно читать.

    az network nsg rule list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG \
      --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
      --output table    
    

    Вы увидите примерно такой результат.

    Name              Priority    Port    Access
    -----------------  ----------  ------  --------
    default-allow-ssh  1000        22      Allow
    
    

    Вы видите правило по умолчанию, default-allow-ssh. Это правило разрешает входящие подключения через порт 22 (SSH). SSH (Secure Shell) — это протокол, который используется в Linux, чтобы позволить администраторам получать удаленный доступ к системе. Это правило имеет приоритет 1000. Правила обрабатываются в порядке приоритета, при этом правила с более низким приоритетом обрабатываются перед правилами с более высоким приоритетом.

По умолчанию NSG виртуальной машины Linux разрешает доступ к сети только через порт 22. Это позволяет администраторам получить доступ к системе. Вам нужно также разрешить входящие подключения через порт 80, позволяющий доступ по HTTP.

Задача 3. Создание правила сетевой безопасности

На этом шаге вы создаете правило сетевой безопасности, разрешающее входящий доступ через порт 80 (HTTP).

  1. Выполните следующую команду az network nsg rule create, чтобы создать правило с именем allow-http, разрешающее входящий доступ через порт 80:

    az network nsg rule create \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG \
      --name allow-http \
      --protocol tcp \
      --priority 100 \
      --destination-port-range 80 \
      --access Allow    
    

    В целях обучения здесь вы устанавливаете приоритет 100. В данном случае приоритет не имеет значения. Приоритет необходимо учитывать, если у вас есть перекрывающиеся диапазоны портов.

  2. Для проверки конфигурации выполните команду az network nsg rule list, чтобы увидеть обновленный список правил:

    az network nsg rule list \
      --resource-group "<rgn>[sandbox resource group name]</rgn>" \
      --nsg-name my-vmNSG \
      --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \
      --output table    
    

    Теперь вы видите оба правила — старое default-allow-ssh и ваше новое allow-http:

    Name              Priority    Port    Access
    -----------------  ----------  ------  --------
    default-allow-ssh  1000        22      Allow
    allow-http          100        80      Allow    
    

Задача 4. Повторный доступ к веб-серверу

Теперь, когда вы настроили сетевой доступ в порту 80, давайте попробуем получить доступ к веб-серверу еще раз.

Примечание.

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

  1. Выполните ту же команду curl, которую выполняли ранее:

    curl --connect-timeout 5 http://$IPADDRESS
    

    Вы увидите примерно такой результат.

    <html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
    
  2. В качестве дополнительного шага обновите вкладку браузера, в которой указан ваш веб-сервер. Вы увидите примерно такой результат.

    A screenshot of a web browser showing the home page from the web server. The home page displays a welcome message.

Отличная работа! На практике вы можете создать изолированную группу безопасности сети, которая включает в себя необходимые вам правила входящего и исходящего сетевого доступа. Если имеется несколько виртуальных машин, которые используются для одной цели, вы можете назначать эту группу безопасности сети каждой виртуальной машине во время ее создания. Таким образом вы сможете контролировать сетевой доступ к нескольким виртуальным машинам с помощью единого центрального набора правил.

Очистка

Когда вы завершите работу с этим модулем, песочница автоматически очистит ваши ресурсы.

Если вы работаете в собственной подписке, в конце проекта следует решить, нужны ли вам созданные ресурсы. Оставленные работающими ресурсы могут создавать затраты. Вы можете удалить ресурсы по отдельности либо удалить всю группу ресурсов.