Ejercicio: Creación y administración de grupos de seguridad de red
Como arquitecto de soluciones de la empresa manufacturera, ahora quiere empezar a migrar a Azure los servidores de bases de datos y la aplicación de ERP. Como primer paso, va a probar el plan de seguridad de red con dos de los servidores.
En esta unidad, configurará un grupo de seguridad de red y reglas de seguridad para restringir el tráfico de red a servidores específicos. Quiere que el servidor de aplicaciones se pueda conectar al servidor de bases de datos a través de HTTP. No quiere que el servidor de bases de datos pueda usar HTTP para conectarse al servidor de aplicaciones.
Creación de una red virtual y un grupo de seguridad de red
En primer lugar, creará la red virtual y las subredes para los recursos de servidor. Después, creará un grupo de seguridad de red.
En Azure Cloud Shell, ejecute el siguiente comando para asignar el grupo de recursos del espacio aislado a la variable
rg
:rg="<rgn>[sandbox resource group name]</rgn>"
Para crear la red virtual ERP-servers y la subred Applications (Aplicaciones), ejecute el comando siguiente en 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
Ejecute el comando siguiente en Cloud Shell para crear la subred Databases (Bases de datos):
az network vnet subnet create \ --resource-group $rg \ --vnet-name ERP-servers \ --address-prefixes 10.0.1.0/24 \ --name Databases
Ejecute el comando siguiente en Cloud Shell para crear el grupo de seguridad de red ERP-SERVERS-NSG:
az network nsg create \ --resource-group $rg \ --name ERP-SERVERS-NSG
Creación de máquinas virtuales que ejecutan Ubuntu
Ahora va a crear dos máquinas virtuales denominadas AppServer y DataServer. Implemente AppServer en la subred Applications y DataServer en la subred Databases. Agregue las interfaces de red de máquina virtual al grupo de seguridad de red ERP-SERVERS-NSG. Luego, para probar el grupo de seguridad de red, use estas máquinas virtuales.
Para compilar la máquina virtual AppServer, ejecute el comando siguiente en Cloud Shell. Para la cuenta de administrador, reemplace
<password>
por una contraseña compleja.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>
Para compilar la máquina virtual DataServer, ejecute el comando siguiente en Cloud Shell. Para la cuenta de administrador, reemplace
<password>
por una contraseña compleja.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>
Las máquinas virtuales pueden tardar varios minutos en estar en estado de ejecución. Ejecute el comando siguiente en Cloud Shell para confirmar que las máquinas virtuales están en ejecución:
az vm list \ --resource-group $rg \ --show-details \ --query "[*].{Name:name, Provisioned:provisioningState, Power:powerState}" \ --output table
Una vez completada la creación de la máquina virtual, debería ver la salida siguiente:
Name Provisioned Power ---------- ------------- ---------- AppServer Succeeded VM running DataServer Succeeded VM running
Comprobación de la conectividad predeterminada
Ahora va a intentar abrir una sesión de Secure Shell (SSH) para cada una de las máquinas virtuales. Recuerde que hasta ahora ha implementado un grupo de seguridad de red con reglas predeterminadas.
Para conectarse a las máquinas virtuales, use SSH directamente desde Cloud Shell. Para ello, necesita las direcciones IP públicas que se han asignado a las máquinas virtuales. Ejecute el comando siguiente en Cloud Shell para mostrar las direcciones IP que se van a usar para conectarse a las máquinas virtuales:
az vm list \ --resource-group $rg \ --show-details \ --query "[*].{Name:name, PrivateIP:privateIps, PublicIP:publicIps}" \ --output table
Para facilitar la conexión a las máquinas virtuales durante el resto de este ejercicio, asigne las direcciones IP públicas a variables. Ejecute el comando siguiente en Cloud Shell para guardar la dirección IP pública de AppServer y DataServer en una variable:
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)"
Ejecute el comando siguiente en Cloud Shell para comprobar si se puede conectar a la máquina virtual AppServer:
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
Aparecerá un mensaje
Connection timed out
.Ejecute el comando siguiente en Cloud Shell para comprobar si se puede conectar a la máquina virtual DataServer:
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
Aparecerá el mismo mensaje de error de conexión.
Recuerde que las reglas predeterminadas deniegan todo el tráfico entrante en una red virtual, a menos que proceda de la misma red virtual. La regla Denegar todo el tráfico entrante ha bloqueado las conexiones SSH entrantes que acaba de intentar.
Entrada
Nombre | Prioridad | IP de origen | IP de destino | Acceso |
---|---|---|---|---|
Permitir el tráfico entrante de red virtual | 65000 | VIRTUAL_NETWORK | VIRTUAL_NETWORK | Permitir |
Denegar todo el tráfico entrante | 65500 | * | * | Denegar |
Creación de una regla de seguridad para SSH
Como acaba de comprobar, las reglas predeterminadas del grupo de seguridad de red ERP-SERVERS-NSG incluyen una regla Denegar todo el tráfico entrante. Ahora agregará una regla para poder usar SSH para conectarse a AppServer y DataServer.
Ejecute el comando siguiente en Cloud Shell para crear una regla de seguridad de entrada para habilitar el acceso SSH:
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"
Ejecute el comando siguiente en Cloud Shell para comprobar si se puede conectar ahora a la máquina virtual AppServer:
ssh azureuser@$APPSERVERIP -o ConnectTimeout=5
La regla del grupo de seguridad de red puede tardar uno o dos minutos en surtir efecto. Si recibe un mensaje de error de conexión, espere un momento e inténtelo de nuevo.
Ahora debería poder conectarse. Después del mensaje
Are you sure you want to continue connecting (yes/no)?
, especifiqueyes
.Escriba la contraseña que ha definido al crear la máquina virtual.
Para cerrar la sesión de AppServer, escriba
exit
.Ejecute el comando siguiente en Cloud Shell para comprobar si se puede conectar ahora a la máquina virtual DataServer:
ssh azureuser@$DATASERVERIP -o ConnectTimeout=5
Ahora debería poder conectarse. Después del mensaje
Are you sure you want to continue connecting (yes/no)?
, especifiqueyes
.Escriba la contraseña que ha definido al crear la máquina virtual.
Para cerrar la sesión de DataServer, especifique
exit
.
Creación de una regla de seguridad para impedir el acceso web
Ahora agregue una regla para que AppServer se pueda comunicar con DataServer a través de HTTP, pero DataServer no se pueda comunicar con AppServer a través de HTTP. Estas son las direcciones IP internas para estos servidores:
Nombre del servidor | Dirección IP |
---|---|
AppServer | 10.0.0.4 |
DataServer | 10.0.1.4 |
Ejecute el comando siguiente en Cloud Shell para crear una regla de seguridad de entrada para denegar el acceso HTTP a través del puerto 80:
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"
Prueba de la conectividad HTTP entre máquinas virtuales
Ahora, comprobará si la nueva regla funciona. AppServer debería poder comunicarse con DataServer a través de HTTP. DataServer no debería poder comunicarse con AppServer a través de HTTP.
Para conectarse a la máquina virtual AppServer, ejecute el comando siguiente en Cloud Shell. Compruebe si AppServer puede comunicarse con DataServer a través de HTTP.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
Escriba la contraseña que ha definido al crear la máquina virtual.
La respuesta debe incluir un mensaje
200 OK
.Para conectarse a la máquina virtual DataServer, ejecute el comando siguiente en Cloud Shell. Compruebe si DataServer puede comunicarse con AppServer a través de HTTP.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
Escriba la contraseña que ha definido al crear la máquina virtual.
Esto no se debería ejecutar de forma correcta porque ha bloqueado el acceso a través del puerto 80. Después de varios minutos, debe obtener un mensaje
Connection timed out
. Para detener el comando antes del tiempo de espera, seleccione Ctrl+C.
Implementación de un grupo de seguridad de aplicaciones
Ahora, cree un grupo de seguridad de aplicaciones para servidores de bases de datos de modo que se pueda asignar la misma configuración a todos los servidores de este grupo. Está planeando implementar más servidores de bases de datos y quiere evitar que estos accedan a servidores de aplicaciones a través de HTTP. Si se asignan orígenes en el grupo de seguridad de aplicaciones, no es necesario mantener de forma manual una lista de direcciones IP en el grupo de seguridad de red, sino que se asignan las interfaces de red de las máquinas virtuales que se quieren administrar al grupo de seguridad de aplicaciones.
Ejecute el comando siguiente en Cloud Shell para crear un grupo de seguridad de aplicaciones denominado ERP-DB-SERVERS-ASG:
az network asg create \ --resource-group $rg \ --name ERP-DB-SERVERS-ASG
Ejecute el comando siguiente en Cloud Shell para asociar DataServer al grupo de seguridad de aplicaciones:
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
Ejecute el comando siguiente en Cloud Shell para actualizar la regla HTTP en el grupo de seguridad de red ERP-SERVERS-NSG. Debería hacer referencia al grupo de seguridad de aplicaciones 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"
Prueba de la regla de seguridad HTTP actualizada
Ejecute el comando siguiente en Cloud Shell para conectarse a la máquina virtual AppServer. Compruebe si AppServer puede comunicarse con DataServer a través de HTTP.
ssh -t azureuser@$APPSERVERIP 'wget http://10.0.1.4; exit; bash'
Escriba la contraseña que ha definido al crear la máquina virtual.
Como antes, la respuesta debe incluir un mensaje
200 OK
. La configuración del grupo de seguridad de aplicaciones puede tardar uno o dos minutos en aplicarse. Si inicialmente no recibe el mensaje200 OK
, espere un minuto e inténtelo de nuevo.Ejecute el comando siguiente en Cloud Shell para conectarse a DataServer. Compruebe si DataServer puede comunicarse con AppServer a través de HTTP.
ssh -t azureuser@$DATASERVERIP 'wget http://10.0.0.4; exit; bash'
Escriba la contraseña que ha definido al crear la máquina virtual.
Como antes, esto no se debería ejecutar de forma correcta porque ha bloqueado el acceso a través del puerto 80. Después de varios minutos, debe obtener un mensaje
Connection timed out
. Para detener el comando antes del tiempo de espera, seleccione Ctrl+C.
Ya ha confirmado que la regla del grupo de seguridad de red funciona con un grupo de seguridad de aplicaciones del mismo modo que cuando se ha usado una dirección IP de origen. Si agregáramos más servidores de datos, se podría garantizar con facilidad que tienen la seguridad de red correcta si se agregan a ERP-DB-SERVERS-ASG.