A medida que la complejidad y número de recursos crece en Azure, podemos necesitar agruparlos además de en grupos de recursos, en redes virtuales y subnets. Vamos a ver como con Powershell podemos hacer esto añadiendo un paso extra sobre la creación de Network Security Groups para controlar el tráfico en cada una de ellas.

azurevm

 

Creando el grupo de recursos

En caso que no tengamos ningún grupo de recursos creado, vamos a ver a continuación cómo hacerlo. Tener al menos un grupo de recursos creado es necesario para los siguientes pasos. No nos meteremos en sí en la gestión de grupos de recursos, esto ya lo trataremos en otro cybertruco.
Podemos crear un grupo de recursos con el cmdlet New-AzResourceGroup

New-AzResourceGroup -name resourcegroupcyberseguridad -location “west europe”

Creando la red virtual

A modo de ejemplo vamos a crear una red virtual con varias subnets. A la hora de crear la vnet es básico decidir de antemano el rango de IPs y pensarlo bien ya que posteriormente no se permite cambiarlo. Podemos usar un rango como el 192.168.0.0/16 que nos permitirá crear más que suficientes subnets.

Creamos nuestra vnet indicando el grupo de recursos con el cmdlet New-AzVirtualNetwork. En este caso indicamos la zona "west europe", aunque podemos indicar cualquier otra, el listado lo podemos obtener con el cmdlet Get-AzureRMLocation

New-AzVirtualNetwork -Name cyberseguridadvnet -AddressPrefix 192.168.0.0/16 -ResourceGroupName resourcegroupcyberseguridad -Location "west europe”

Creando subnets

Ahora ya solo nos queda crear subnets con el cmdlet New-AzureVirtualNetworkSubnetConfig. A este le tendremos que pasar nuestra vnet por lo que primero la asignamos a una variable como vemos a continuación.

$vnet = Get-AzVirtualNetwork -Name cyberseguridadvnet -ResourceGroupName resourcegroupcyberseguridad

$configuracionsubnet = New-AzVirtualNetworkSubnetConfig -Name subnetejemplo -AddressPrefix 192.168.0.0/24

$vnet.Subnets.Add($configuracionsubnet)

Set-AzVirtualNetwork -VirtualNetwork $vnet

Hay que tener en cuenta que si necesitamos conectividad desde nuestras oficinas a través de ExpressRoute o de una VPN la subnet debe llamarse GatewaySubnet, ya que es un nombre reservado para ello. Podríamos añadir una segunda subnet simplemente cambiando nombre y el parámetro -addressprefix por ejemplo a 192.168.1.0/24

Securizando las subnets

Una vez las tenemos creadas y con los recursos asignados, debemos asegurarnos que el tráfico que tiene permiso para acceder a esta subnet está controlado. Para ello debemos crear un Network Security Group (NSG), el cual nos permitirá indicar reglas para filtrar el tráfico entrante y saliente de los diferentes recursos en la subnet. En el caso de trabajar sobre una subnet GatewaySubnet, Microsoft no recomienda aplicar ningún NSG. Como no es el caso en nuestro ejemplo vamos a crear un par de reglas para permitir RDP y SSH en nuestra subnet de ejemplo.

Utilizaremos el cmdlet New-AZNetworkSecurityRuleConfig para especificar cada una de las reglas y luego el New-AZNetworkSecurityGroup para crear en NSG con las reglas previamente creadas.

$rdp = New-AzNetworkSecurityRuleConfig -Name "allow-rdp-internet" -SourcePortRange * -Protocol TCP -SourceAddressPrefix Internet -Access Allow -Priority 110 -Direction Inbound -DestinationPortRange 3389 -DestinationAddressPrefix *

$ssh = New-AzNetworkSecurityRuleConfig -Name "allow-ssh-internet" -SourcePortRange * -Protocol TCP -SourceAddressPrefix Internet -Access Allow -Priority 120 -Direction Inbound -DestinationPortRange 22 -DestinationAddressPrefix *

New-AzNetworkSecurityGroup -Name NSGsubnetejemplo -SecurityRules $rdp, $ssh -ResourceGroupName resourcegroupcyberseguridad -Location "west europe"

Por último solo nos queda asignar el NSG a nuestra subnet con las siguientes líneas de código. A través de ellas asignamos el NSG NSGsubnetejemplo a la subnet subnetejemplo en la vnet cyberseguridadvnet. Primero guardamos en variable los datos necesarios y finalmente ejecutamos el cmdlet Set-AzVirtualNetwork con todos los datos necesarios.

$vnet = Get-AzVirtualNetwork -Name cyberseguridadvnet -ResourceGroupName resourcegroupcyberseguridad

$nsg = Get-AzNetworkSecurityGroup -Name NSGsubnetejemplo -ResourceGroupName resourcegroupcyberseguridad

$subnet = Get-AzVirtualNetworkSubnetConfig -Name subnetejemplo -VirtualNetwork $vnet

$vnetConfig = Set-AzVirtualNetworkSubnetConfig -Name subnetejemplo -VirtualNetwork $vnet -NetworkSecurityGroup $nsg -AddressPrefix $subnet.AddressPrefix

Set-AzVirtualNetwork -VirtualNetwork $vnetConfig

Adicionalmente a esto, recomendamos el uso de Just in Time (JIT) para la apertura de puertos en los recursos bajo demanda, de manera automática y basado en comprobaciones sobre permisos RBAC. Pero esto lo trataremos en un futuro Cybertruco