Упражнение. Создание групп безопасности сети и управление ими
Как архитектор решений для производственной компании, вы решаете начать перемещение ERP-приложения и серверов баз данных в Azure. В качестве первого шага вы собираетесь протестировать план безопасности сети с использованием двух серверов.
В этом разделе вы настроите группу безопасности сети и правила безопасности для ограничения сетевого трафика к определенным серверам. Ваш сервер приложений должен иметь возможность подключиться к серверу базы данных по протоколу HTTP. Сервер базы данных не должен использовать протокол HTTP для подключения к серверу приложений.
Создание виртуальной сети и группы безопасности сети
Сначала вы создадите виртуальную сеть и подсети для серверных ресурсов. Затем вы создадите группу безопасности сети.
В Azure Cloud Shell выполните следующую команду, чтобы назначить переменной
rg
группу ресурсов "песочницы":rg="<rgn>[sandbox resource group name]</rgn>"
Чтобы создать виртуальную сеть 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
Чтобы создать подсеть Databases, выполните приведенную ниже команду в 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 в подсети Applications, а DataServer — в подсети Databases. Добавим сетевые интерфейсы виртуальных машин в группу безопасности сети 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 | VIRTUAL_NETWORK | VIRTUAL_NETWORK | Разрешить |
Запретить весь входящий трафик | 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 |
DataServer | 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 приведенную ниже команду.в 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.