Упражнение. Создание групп безопасности сети и управление ими
Как архитектор решений для производственной компании, вы решаете начать перемещение ERP-приложения и серверов баз данных в Azure. В качестве первого шага вы собираетесь протестировать план безопасности сети с использованием двух серверов.
В этом разделе вы настроите группу безопасности сети и правила безопасности для ограничения сетевого трафика к определенным серверам. Ваш сервер приложений должен иметь возможность подключиться к серверу базы данных по протоколу HTTP. Сервер базы данных не должен использовать протокол HTTP для подключения к серверу приложений.
Замечание
Это упражнение является необязательным. Если вы хотите выполнить это упражнение, перед началом работы необходимо создать подписку Azure. Если у вас нет учетной записи Azure или вы не хотите создавать ее в данный момент, вы можете ознакомиться с инструкциями, чтобы понять информацию, представленную.
Замечание
Чтобы выполнить действия, описанные в этом упражнении, необходимо использовать группу ресурсов. Вы можете использовать уже созданную группу ресурсов или создать новую группу ресурсов специально для этого упражнения. Если вы решили создать новую группу ресурсов, это позволит упростить очистку всех ресурсов, создаваемых при выполнении упражнения. Если у вас нет существующей группы ресурсов или вы хотите создать новую специально для этого упражнения, выполните действия, описанные в статье "Использование портала Azure и Azure Resource Manager для управления группами ресурсов для создания группы ресурсов с помощью портала Azure", или выполните действия, описанные в статье "Управление группами ресурсов Azure" с помощью Azure CLI для создания группы ресурсов с помощью Azure CLI .
Замечание
В этом уроке вы используете Azure Cloud Shell в качестве терминала. Доступ к Cloud Shell можно получить через портал Azure или вход Cloud Shell. Чтобы ее использовать, не нужно ничего устанавливать на ваш ПК или ноутбук.
Создание виртуальной сети и группы безопасности сети
Сначала вы создадите виртуальную сеть и подсети для серверных ресурсов. Затем вы создадите группу безопасности сети.
Откройте Azure Cloud Shell и выполните следующую команду, чтобы назначить имя группы ресурсов переменной
rg. Замените myResourceGroupName именем группы ресурсов.rg="myResourceGroupName"Чтобы создать виртуальную сеть 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Чтобы создать подсеть баз данных , выполните следующую команду в Cloud Shell:
az network vnet subnet create \ --resource-group $rg \ --vnet-name ERP-servers \ --address-prefixes 10.0.1.0/24 \ --name DatabasesЧтобы создать группу безопасности сети ERP-SERVERS-NSG , выполните следующую команду в Cloud Shell:
az network nsg create \ --resource-group $rg \ --name ERP-SERVERS-NSG
Создание виртуальных машин под управлением Ubuntu
Затем вы создадите две виртуальные машины с именем AppServer и DataServer. Вы развертываете AppServer в подсети "Приложения" и DataServer в подсети "Базы данных ". Добавьте сетевые интерфейсы виртуальной машины в группу безопасности сети ERP-SERVERS-NSG . Затем используем эти виртуальные машины, чтобы протестировать группу безопасности сети.
Чтобы создать виртуальную машину 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>Чтобы создать виртуальную машину 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>Запуск виртуальных машин может занять несколько минут. Чтобы убедиться в том, что виртуальные машины запущены, выполните приведенную ниже команду в 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) для каждой виртуальной машины. Помните, что к этому моменту вы уже развернули группу безопасности сети с правилами по умолчанию.
Чтобы подключиться к виртуальным машинам, используйте протокол SSH непосредственно из Cloud Shell. Для этого вам потребуются общедоступные IP-адреса, которые были назначены виртуальным машинам. Чтобы получить список IP-адресов, которые будут использоваться для подключения к виртуальным машинам, выполните приведенную ниже команду в Cloud Shell:
az vm list \ --resource-group $rg \ --show-details \ --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \ --output tableЧтобы упростить подключение к виртуальным машинам в оставшейся части этого упражнения, необходимо занести эти общедоступные 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)"Чтобы проверить, можно ли подключиться к виртуальной машине AppServer , выполните следующую команду в Cloud Shell:
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5Вы получите сообщение
Connection timed out.Чтобы проверить, можно ли подключиться к виртуальной машине DataServer , выполните следующую команду в Cloud Shell:
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5Вы получите то же сообщение о сбое подключения.
Помните, что правила по умолчанию запрещают весь входящий трафик в виртуальной сети, если только этот трафик не поступает из той же виртуальной сети. Правило "Запретить все входящие" блокировало только что предпринятые попытки входящих подключений SSH.
Прибывающий
| Имя. | Приоритет | Исходный IP-адрес | IP-адрес назначения | Открыть |
|---|---|---|---|---|
| Разрешить входящий трафик виртуальной сети | 65000 | Виртуальная сеть | Виртуальная сеть | Разрешить |
| Запретить весь входящий трафик | 65500 | * | * | Запрет |
Создайте правило безопасности для SSH
Как вы уже узнали, правила по умолчанию в группе безопасности сети ERP-SERVERS-NSG включают правило "Запретить все входящие". Теперь вы добавите правило, чтобы использовать SSH для подключения к AppServer и DataServer.
Чтобы создать правило безопасности для входящего трафика, которое включит доступ по протоколу 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"Чтобы проверить, можно ли подключиться к виртуальной машине AppServer , выполните следующую команду в Cloud Shell:
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5На то, чтобы правило группы безопасности сети вступило в силу, может уйти пара минут. Если вы получаете сообщение об ошибке подключения, подождите минуту и повторите попытку.
Теперь можно подключиться. После сообщения
Are you sure you want to continue connecting (yes/no)?введитеyes.Введите пароль, заданный при создании виртуальной машины.
Чтобы закрыть сеанс AppServer , введите
exit.Чтобы проверить, можно ли подключиться к виртуальной машине DataServer , выполните следующую команду в Cloud Shell:
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5Теперь можно подключиться. После сообщения
Are you sure you want to continue connecting (yes/no)?введитеyes.Введите пароль, заданный при создании виртуальной машины.
Чтобы закрыть сеанс DataServer , введите
exit.
Создайте правило безопасности для предотвращения веб-доступа
Теперь добавьте правило, чтобы AppServer могли взаимодействовать с DataServer по протоколу HTTP, но DataServer не может взаимодействовать с AppServer по протоколу HTTP. Ниже приведены внутренние IP-адреса этих серверов.
| Имя сервера | IP-адрес |
|---|---|
| AppServer | 10.0.0.4 |
| Датасервер | 10.0.1.4 |
Чтобы создать правило безопасности для входящего трафика, которое запретит доступ по протоколу 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.
Чтобы подключиться к виртуальной машине AppServer , в Cloud Shell выполните следующую команду. Проверьте, может ли AppServer взаимодействовать с DataServer по протоколу HTTP.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'Введите пароль, заданный при создании виртуальной машины.
Ответ должен содержать сообщение
200 OK.Чтобы подключиться к виртуальной машине DataServer , в Cloud Shell выполните следующую команду. Проверьте, может ли DataServer взаимодействовать с AppServer по протоколу HTTP.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'Введите пароль, заданный при создании виртуальной машины.
Эта попытка должна завершиться неудачей, так как вы заблокировали доступ через порт 80. Через несколько минут вы должны получить сообщение
Connection timed out. Чтобы остановить команду до истечения времени ожидания, нажмите клавиши CTRL+C.
Развертывание группы безопасности приложений
Далее вы создадите группу безопасности приложений для серверов баз данных, чтобы всем серверам в этой группе можно было назначить одни и те же параметры. Вы планируете развернуть дополнительные серверы баз данных и хотите запретить им доступ к серверам приложений по протоколу HTTP. Собрав источники в группу безопасности приложений, вы устраняете необходимость вручную настраивать список IP-адресов в группе безопасности сети. Вместо этого вы назначите сетевые интерфейсы виртуальных машин, которыми вы хотите управлять, в группу безопасности приложений.
Чтобы создать новую группу безопасности приложений с именем ERP-DB-SERVERS-ASG, выполните следующую команду в Cloud Shell:
az network asg create \ --resource-group $rg \ --name ERP-DB-SERVERS-ASGЧтобы связать 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Чтобы обновить правило 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
Чтобы подключиться к виртуальной машине AppServer , выполните следующую команду в Cloud Shell. Проверьте, может ли AppServer взаимодействовать с DataServer по протоколу HTTP.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'Введите пароль, заданный при создании виртуальной машины.
Как и раньше, ответ должен содержать сообщение
200 OK. На то, чтобы правило группы безопасности приложений вступило в силу, может уйти одна-две минуты. Если вы не получили сообщения200 OKизначально, подождите минуту и повторите попытку.Чтобы подключиться к dataServer, выполните следующую команду в Cloud Shell. Проверьте, может ли DataServer взаимодействовать с AppServer по протоколу HTTP.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'Введите пароль, заданный при создании виртуальной машины.
Как и ранее, эта попытка должна завершиться неудачей, так как вы заблокировали доступ через порт 80. Через несколько минут вы должны получить сообщение
Connection timed out. Чтобы остановить команду до истечения времени ожидания, нажмите клавиши CTRL+C.
Теперь вы подтвердили, что правило группы безопасности сети работает с помощью группы безопасности приложений так же, как и при использовании исходного IP-адреса. Если мы добавили дополнительные серверы данных, мы могли бы легко убедиться, что у них есть правильная сетевая безопасность, добавив новые серверы в ERP-DB-SERVERS-ASG.