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

Завершено

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

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

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

Замечание

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

Замечание

Чтобы выполнить действия, описанные в этом упражнении, необходимо использовать группу ресурсов. Вы можете использовать уже созданную группу ресурсов или создать новую группу ресурсов специально для этого упражнения. Если вы решили создать новую группу ресурсов, это позволит упростить очистку всех ресурсов, создаваемых при выполнении упражнения. Если у вас нет существующей группы ресурсов или вы хотите создать новую специально для этого упражнения, выполните действия, описанные в статье "Использование портала Azure и Azure Resource Manager для управления группами ресурсов для создания группы ресурсов с помощью портала Azure", или выполните действия, описанные в статье "Управление группами ресурсов Azure" с помощью Azure CLI для создания группы ресурсов с помощью Azure CLI .

Замечание

В этом уроке вы используете Azure Cloud Shell в качестве терминала. Доступ к Cloud Shell можно получить через портал Azure или вход Cloud Shell. Чтобы ее использовать, не нужно ничего устанавливать на ваш ПК или ноутбук.

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

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

  1. Откройте Azure Cloud Shell и выполните следующую команду, чтобы назначить имя группы ресурсов переменной rg. Замените myResourceGroupName именем группы ресурсов.

    rg="myResourceGroupName"
    
  2. Чтобы создать виртуальную сеть ERP-серверов и подсеть приложений , выполните следующую команду в 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. Чтобы создать подсеть баз данных , выполните следующую команду в 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 в подсети "Приложения" и DataServer в подсети "Базы данных ". Добавьте сетевые интерфейсы виртуальной машины в группу безопасности сети 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 Виртуальная сеть Виртуальная сеть Разрешить
Запретить весь входящий трафик 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
Датасервер 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-адресов в группе безопасности сети. Вместо этого вы назначите сетевые интерфейсы виртуальных машин, которыми вы хотите управлять, в группу безопасности приложений.

Схема групп безопасности приложений для упражнений.

  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. Проверьте, может ли 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.