Упражнение. Создание групп безопасности сети и управление ими

Завершено

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

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

Diagram of exercise scenario network security groups.

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

Сначала вы создадите виртуальную сеть и подсети для серверных ресурсов. Затем вы создадите группу безопасности сети.

  1. В Azure Cloud Shell выполните следующую команду, чтобы назначить переменной rg группу ресурсов "песочницы":

    rg="<rgn>[sandbox resource group name]</rgn>"
    
  2. Чтобы создать виртуальную сеть ERP-servers и подсеть Applications, выполните приведенную ниже команду в Cloud Shell:

    az network vnet create \
        --resource-group $rg \
        --name ERP-servers \
        --address-prefixes 10.0.0.0/16 \
        --subnet-name Applications \
        --subnet-prefixes 10.0.0.0/24
    
  3. Чтобы создать подсеть Databases, выполните приведенную ниже команду в Cloud Shell:

    az network vnet subnet create \
        --resource-group $rg \
        --vnet-name ERP-servers \
        --address-prefixes 10.0.1.0/24 \
        --name Databases
    
  4. Чтобы создать группу безопасности сети ERP-SERVERS-NSG, выполните приведенную ниже команду в Cloud Shell:

    az network nsg create \
        --resource-group $rg \
        --name ERP-SERVERS-NSG
    

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

Далее создадим две виртуальные машины — AppServer и DataServer. Вы развернете AppServer в подсети Applications, а DataServer — в подсети Databases. Добавим сетевые интерфейсы виртуальных машин в группу безопасности сети ERP-SERVERS-NSG. Затем используем эти виртуальные машины, чтобы протестировать группу безопасности сети.

  1. Чтобы создать виртуальную машину AppServer , выполните следующую команду в Cloud Shell. Для учетной записи администратора замените <password> сложным паролем.

    wget -N https://raw.githubusercontent.com/MicrosoftDocs/mslearn-secure-and-isolate-with-nsg-and-service-endpoints/master/cloud-init.yml && \
    az vm create \
        --resource-group $rg \
        --name AppServer \
        --vnet-name ERP-servers \
        --subnet Applications \
        --nsg ERP-SERVERS-NSG \
        --image Ubuntu2204 \
        --size Standard_DS1_v2 \
         --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
        --no-wait \
        --admin-password <password>
    
  2. Чтобы создать виртуальную машину DataServer , выполните следующую команду в Cloud Shell. Для учетной записи администратора замените <password> сложным паролем.

    az vm create \
        --resource-group $rg \
        --name DataServer \
        --vnet-name ERP-servers \
        --subnet Databases \
        --nsg ERP-SERVERS-NSG \
        --size Standard_DS1_v2 \
        --image Ubuntu2204 \
        --generate-ssh-keys \
        --admin-username azureuser \
        --custom-data cloud-init.yml \
         --no-wait \
        --admin-password <password>
    
  3. Запуск виртуальных машин может занять несколько минут. Чтобы убедиться в том, что виртуальные машины запущены, выполните приведенную ниже команду в Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \
        --output table
    

    После завершения создания виртуальной машины вы увидите следующие выходные данные:

    Name        Provisioned    Power
    ----------  -------------  ----------
    AppServer   Succeeded      VM running
    DataServer  Succeeded      VM running
    

Проверка возможности подключения по умолчанию

Теперь попробуйте открыть сеанс Secure Shell (SSH) для каждой виртуальной машины. Помните, что к этому моменту вы уже развернули группу безопасности сети с правилами по умолчанию.

  1. Чтобы подключиться к виртуальным машинам, используйте протокол SSH непосредственно из Cloud Shell. Для этого вам потребуются общедоступные IP-адреса, которые были назначены виртуальным машинам. Чтобы получить список IP-адресов, которые будут использоваться для подключения к виртуальным машинам, выполните приведенную ниже команду в Cloud Shell:

    az vm list \
        --resource-group $rg \
        --show-details \
        --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \
        --output table
    
  2. Чтобы упростить подключение к виртуальным машинам в оставшейся части этого упражнения, необходимо занести эти общедоступные IP-адреса в переменные. Чтобы сохранить общедоступные IP-адреса AppServer и DataServer в переменных, выполните приведенную ниже команду в Cloud Shell:

    APPSERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name AppServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
    DATASERVERIP="$(az vm list-ip-addresses \
                     --resource-group $rg \
                     --name DataServer \
                     --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \
                     --output tsv)"
    
  3. Чтобы проверить возможность подключения к вашей виртуальной машине AppServer, выполните приведенную ниже команду в Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

    Вы получите сообщение Connection timed out.

  4. Чтобы проверить возможность подключения к вашей виртуальной машине DataServer, выполните приведенную ниже команду в Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    

    Вы получите то же сообщение о сбое подключения.

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

Входящая

Имя. Приоритет Исходный IP-адрес IP-адрес назначения Открыть
Разрешить входящий трафик виртуальной сети 65000 VIRTUAL_NETWORK VIRTUAL_NETWORK Разрешить
Запретить весь входящий трафик 65500 * * Запрет

Создайте правило безопасности для SSH

Как вы теперь убедились, правила по умолчанию в вашей группе безопасности сети ERP-SERVERS-NSG содержат правило Запретить весь входящий трафик. Теперь добавим правило, которое позволит использовать SSH для подключения к AppServer и DataServer.

  1. Чтобы создать правило безопасности для входящего трафика, которое включит доступ по протоколу SSH, выполните приведенную ниже команду в Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name AllowSSHRule \
        --direction Inbound \
        --priority 100 \
        --source-address-prefixes '*' \
        --source-port-ranges '*' \
        --destination-address-prefixes '*' \
        --destination-port-ranges 22 \
        --access Allow \
        --protocol Tcp \
        --description "Allow inbound SSH"
    
  2. Чтобы проверить возможность подключения к вашей виртуальной машине AppServer, выполните приведенную ниже команду в Cloud Shell:

    ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
    

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

  3. Теперь можно подключиться. После сообщения Are you sure you want to continue connecting (yes/no)? введите yes.

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

  5. Чтобы закрыть сеанс AppServer, введите exit.

  6. Чтобы проверить возможность подключения к вашей виртуальной машине DataServer, выполните приведенную ниже команду в Cloud Shell:

    ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
    
  7. Теперь можно подключиться. После сообщения Are you sure you want to continue connecting (yes/no)? введите yes.

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

  9. Чтобы закрыть сеанс DataServer, введите exit.

Создайте правило безопасности для предотвращения веб-доступа

Теперь добавьте правило, чтобы виртуальная машина AppServer могла обмениваться данными с DataServer по протоколу HTTP, но виртуальная машина DataServer не могла связаться с AppServer по протоколу HTTP. Ниже приведены внутренние IP-адреса этих серверов.

Имя сервера IP-адрес
AppServer 10.0.0.4
DataServer 10.0.1.4
  1. Чтобы создать правило безопасности для входящего трафика, которое запретит доступ по протоколу HTTP через порт 80, выполните приведенную ниже команду в Cloud Shell:

    az network nsg rule create \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes 10.0.1.4 \
        --source-port-ranges '*' \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80"
    

Проверка HTTP-подключения между виртуальными машинами

Здесь вам предстоит проверить, как работает новое правило. AppServer должна иметь возможность взаимодействовать с DataServer по протоколу HTTP. Виртуальная машина DataServer не должна иметь возможности взаимодействовать с AppServer по протоколу HTTP.

  1. Чтобы подключиться к виртуальной машине AppServer, выполните в Cloud Shell приведенную ниже команду. Проверьте, может ли виртуальная машина AppServer взаимодействовать с DataServer по протоколу HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Введите пароль, заданный при создании виртуальной машины.

  3. Ответ должен содержать сообщение 200 OK.

  4. Чтобы подключиться к виртуальной машине DataServer, выполните в Cloud Shell приведенную ниже команду. Проверьте, может ли виртуальная машина DataServer взаимодействовать с AppServer по протоколу HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Введите пароль, заданный при создании виртуальной машины.

  6. Эта попытка должна завершиться неудачей, так как вы заблокировали доступ через порт 80. Через несколько минут вы должны получить сообщение Connection timed out. Для отмены команды до истечения времени ожидания нажмите комбинацию клавиш CTRL+C.

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

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

Diagram of exercise scenario app security groups.

  1. Чтобы создать новую группу безопасности приложений с именем ERP-DB-SERVERS-ASG, выполните приведенную ниже команду в Cloud Shell:

    az network asg create \
        --resource-group $rg \
        --name ERP-DB-SERVERS-ASG
    
  2. Чтобы связать DataServer с группой безопасности приложений, выполните приведенную ниже команду в Cloud Shell:

    az network nic ip-config update \
        --resource-group $rg \
        --application-security-groups ERP-DB-SERVERS-ASG \
        --name ipconfigDataServer \
        --nic-name DataServerVMNic \
        --vnet-name ERP-servers \
        --subnet Databases
    
  3. Чтобы обновить правило HTTP в группе безопасности сети ERP-SERVERS-NSG, выполните приведенную ниже команду в Cloud Shell. Оно должно ссылаться на группу безопасности приложений ERP-DB-Servers.

    az network nsg rule update \
        --resource-group $rg \
        --nsg-name ERP-SERVERS-NSG \
        --name httpRule \
        --direction Inbound \
        --priority 150 \
        --source-address-prefixes "" \
        --source-port-ranges '*' \
        --source-asgs ERP-DB-SERVERS-ASG \
        --destination-address-prefixes 10.0.0.4 \
        --destination-port-ranges 80 \
        --access Deny \
        --protocol Tcp \
        --description "Deny from DataServer to AppServer on port 80 using application security group"
    

Тестирование обновленного правила безопасности HTTP

  1. Чтобы подключиться к виртуальной машине AppServer, выполните приведенную ниже команду в Cloud Shell. Проверьте, может ли виртуальная машина AppServer взаимодействовать с DataServer по протоколу HTTP.

    ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
    
  2. Введите пароль, заданный при создании виртуальной машины.

  3. Как и раньше, ответ должен содержать сообщение 200 OK. На то, чтобы правило группы безопасности приложений вступило в силу, может уйти одна-две минуты. Если вы не получили сообщения 200 OK изначально, подождите минуту и повторите попытку.

  4. Чтобы подключиться к DataServer, выполните в Cloud Shell приведенную ниже команду.в Cloud Shell. Проверьте, может ли виртуальная машина DataServer взаимодействовать с AppServer по протоколу HTTP.

    ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
    
  5. Введите пароль, заданный при создании виртуальной машины.

  6. Как и ранее, эта попытка должна завершиться неудачей, так как вы заблокировали доступ через порт 80. Через несколько минут вы должны получить сообщение Connection timed out. Для отмены команды до истечения времени ожидания нажмите комбинацию клавиш CTRL+C.

Теперь вы подтвердили, что правило группы безопасности сети работает с помощью группы безопасности приложений так же, как и при использовании исходного IP-адреса. Если мы добавили дополнительные серверы данных, мы могли бы легко убедиться, что у них есть правильная сетевая безопасность, добавив новые серверы в ERP-DB-SERVERS-ASG.