Ejercicio: Creación y administración de grupos de seguridad de red

Completado

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.

Diagram of exercise scenario network security groups.

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.

  1. 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>"
    
  2. 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
    
  3. 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
    
  4. 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.

  1. 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>
    
  2. 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>
    
  3. 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.

  1. 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
    
  2. 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)"
    
  3. 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.

  4. 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.

  1. 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"
    
  2. 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.

  3. Ahora debería poder conectarse. Después del mensaje Are you sure you want to continue connecting (yes/no)?, especifique yes.

  4. Escriba la contraseña que ha definido al crear la máquina virtual.

  5. Para cerrar la sesión de AppServer, escriba exit.

  6. 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
    
  7. Ahora debería poder conectarse. Después del mensaje Are you sure you want to continue connecting (yes/no)?, especifique yes.

  8. Escriba la contraseña que ha definido al crear la máquina virtual.

  9. 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
  1. 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.

  1. 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'
    
  2. Escriba la contraseña que ha definido al crear la máquina virtual.

  3. La respuesta debe incluir un mensaje 200 OK.

  4. 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'
    
  5. Escriba la contraseña que ha definido al crear la máquina virtual.

  6. 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, presione 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.

Diagram of exercise scenario app security groups.

  1. 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
    
  2. 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
    
  3. 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

  1. 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'
    
  2. Escriba la contraseña que ha definido al crear la máquina virtual.

  3. 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 mensaje 200 OK, espere un minuto e inténtelo de nuevo.

  4. 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'
    
  5. Escriba la contraseña que ha definido al crear la máquina virtual.

  6. 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, presione 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.