Restricción del acceso a la red a los recursos de PaaS mediante puntos de conexión de servicio de red virtual mediante PowerShell

Los puntos de conexión de servicio de red virtual permiten que el acceso de la red a algunos recursos de servicio de Azure esté restringido a una subred de la red virtual. También se puede quitar el acceso de Internet a los recursos. Los puntos de conexión de servicio proporcionan a la red virtual conexión directa con los servicios de Azure compatibles, de modo que se puede usar el espacio de direcciones privadas de la red virtual para acceder a los servicios de Azure. El tráfico destinado a los recursos de Azure a través de los puntos de conexión de servicio siempre se mantiene en la red troncal de Microsoft Azure. En este artículo aprenderá a:

  • Crear una red virtual con una subred
  • Agregar una subred y habilitar un punto de conexión de servicio
  • Crear un recurso de Azure y permitir que la red solo pueda acceder a él desde una subred
  • Implementar una máquina virtual en cada subred
  • Confirmar el acceso a un recurso desde una subred
  • Confirmar que se ha denegado el acceso a un recurso desde una subred e Internet

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Azure Cloud Shell

En Azure se hospeda Azure Cloud Shell, un entorno de shell interactivo que puede utilizar mediante el explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con los servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.

Para iniciar Azure Cloud Shell:

Opción Ejemplo o vínculo
Seleccione Pruébelo en la esquina superior derecha de un bloque de código o de comandos. Solo con seleccionar Pruébelo no se copia automáticamente el código o comando en Cloud Shell. Captura de pantalla que muestra un ejemplo de la opción Pruébelo para Azure Cloud Shell.
Vaya a https://shell.azure.com o seleccione el botón Iniciar Cloud Shell para abrir Cloud Shell en el explorador. Captura de pantalla que muestra cómo iniciar Cloud Shell en una nueva ventana.
Seleccione el botón Cloud Shell en la barra de menús de la esquina superior derecha de Azure Portal. Captura de pantalla que muestra el botón de Cloud Shell en Azure Portal

Para usar Azure Cloud Shell:

  1. Inicie Cloud Shell.

  2. Seleccione el botón Copiar en un bloque de código (o bloque de comandos) para copiar el código o comando.

  3. Pegue el código o comando en la sesión de Cloud Shell. Para ello, seleccione Ctrl+Mayús+V en Windows y Linux, o bien seleccione Cmd+Mayús+V en macOS.

  4. Seleccione Intro para ejecutar el código o comando.

Si decide instalar y usar PowerShell de forma local, para realizar los pasos de este artículo necesita la versión 1.0.0 del módulo de Azure PowerShell o cualquier versión posterior. Ejecute Get-Module -ListAvailable Az para buscar la versión instalada. Si necesita actualizarla, consulte Instalación del módulo de Azure PowerShell. Si PowerShell se ejecuta localmente, también debe ejecutar Connect-AzAccount para crear una conexión con Azure.

Creación de una red virtual

Antes de crear una red virtual, cree un grupo de recursos para ella y los demás recursos que se crearon en este artículo. Cree un grupo de recursos con New-AzResourceGroup. En el ejemplo siguiente se crea un grupo de recursos denominado myResourceGroup:

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Cree una red virtual con New-AzVirtualNetwork. En el ejemplo siguiente se crea una red virtual denominada myVirtualNetwork con el prefijo de dirección 10.0.0.0/16.

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Cree una configuración de subred con New-AzVirtualNetworkSubnetConfig. En el ejemplo siguiente se crea una configuración de subred para una subred denominada Public:

$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig `
  -Name Public `
  -AddressPrefix 10.0.0.0/24 `
  -VirtualNetwork $virtualNetwork

Cree la subred en la red virtual escribiendo la configuración de dicha subred en la red virtual con Set-AzVirtualNetwork:

$virtualNetwork | Set-AzVirtualNetwork

Habilitación de un punto de conexión de servicio

Puede habilitar puntos de conexión de servicio únicamente para los servicios que admiten estos puntos de conexión. Vea los servicios habilitados para puntos de conexión de servicio disponibles en una ubicación de Azure con Get-AzVirtualNetworkAvailableEndpointService. En el ejemplo siguiente se devuelve una lista de servicios habilitados para puntos de conexión de servicio disponibles en la región eastus. La lista de servicios devuelta crecerá con el tiempo a medida que más servicios de Azure pasan a estar habilitados para puntos de conexión de servicio.

Get-AzVirtualNetworkAvailableEndpointService -Location eastus | Select Name

Cree una subred adicional en la red virtual. En este ejemplo, se crea una subred denominada Private con un punto de conexión de servicio para Microsoft.Storage:

$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -VirtualNetwork $virtualNetwork `
  -ServiceEndpoint Microsoft.Storage

$virtualNetwork | Set-AzVirtualNetwork

Restricción del acceso de la red para una subred

Cree reglas de seguridad de grupo de seguridad de red con New-AzNetworkSecurityRuleConfig. La siguiente regla permite el acceso de salida a las direcciones IP públicas asignadas al servicio Azure Storage:

$rule1 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-Storage-All `
  -Access Allow `
  -DestinationAddressPrefix Storage `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 100 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

La siguiente regla deniega el acceso a todas las direcciones IP públicas. La regla anterior invalida esta regla porque su prioridad es más alta, lo que permite el acceso a las direcciones IP públicas de Azure Storage.

$rule2 = New-AzNetworkSecurityRuleConfig `
  -Name Deny-Internet-All `
  -Access Deny `
  -DestinationAddressPrefix Internet `
  -DestinationPortRange * `
  -Direction Outbound `
  -Priority 110 `
  -Protocol * `
  -SourceAddressPrefix VirtualNetwork `
  -SourcePortRange *

La siguiente regla permite que el tráfico de Protocolo de escritorio remoto (RDP) pueda entrar en la subred desde cualquier lugar. Se permiten las conexiones de Escritorio remoto a la subred, por lo que puede confirmar acceso a la red a un recurso en un paso posterior.

$rule3 = New-AzNetworkSecurityRuleConfig `
  -Name Allow-RDP-All `
  -Access Allow `
  -DestinationAddressPrefix VirtualNetwork `
  -DestinationPortRange 3389 `
  -Direction Inbound `
  -Priority 120 `
  -Protocol * `
  -SourceAddressPrefix * `
  -SourcePortRange *

Cree un grupo de seguridad de red con New-AzNetworkSecurityGroup. En el ejemplo siguiente se crea un grupo de seguridad de red denominado myNsgPrivate.

$nsg = New-AzNetworkSecurityGroup `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myNsgPrivate `
  -SecurityRules $rule1,$rule2,$rule3

Asocie el grupo de seguridad de red a la subred Private con Set-AzVirtualNetworkSubnetConfig y escriba la configuración de la subred en la red virtual. En el ejemplo siguiente se asocia el grupo de seguridad de red myNsgPrivate a la subred Private:

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $VirtualNetwork `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -ServiceEndpoint Microsoft.Storage `
  -NetworkSecurityGroup $nsg

$virtualNetwork | Set-AzVirtualNetwork

Restricción del acceso de la red a un recurso

Los pasos que deben seguirse para restringir el acceso de la red a los recursos creados con servicios de Azure habilitados para puntos de conexión de servicio varían en función del servicio. Consulte en la documentación de cada servicio concreto los pasos necesarios para dicho servicio. Como ejemplo, de aquí en adelante se explican los pasos necesarios para restringir el acceso de red en una cuenta de Azure Storage.

Crear una cuenta de almacenamiento

Cree una cuenta de almacenamiento de Azure con New-AzStorageAccount. Remplace <replace-with-your-unique-storage-account-name> por un nombre que sea único en todas las ubicaciones de Azure, que tenga entre 3 y 24 caracteres de longitud y que esté compuesto exclusivamente de números y letras en minúscula.

$storageAcctName = '<replace-with-your-unique-storage-account-name>'

New-AzStorageAccount `
  -Location EastUS `
  -Name $storageAcctName `
  -ResourceGroupName myResourceGroup `
  -SkuName Standard_LRS `
  -Kind StorageV2

Después de crear la cuenta de almacenamiento, recupere la clave para dicha cuenta en una variable con Get-AzStorageAccountKey:

$storageAcctKey = (Get-AzStorageAccountKey `
  -ResourceGroupName myResourceGroup `
  -AccountName $storageAcctName).Value[0]

La clave se utiliza para crear un recurso compartido de archivos en un paso posterior. Especifique $storageAcctKey y anote el valor, ya que tendrá que escribirlo manualmente más adelante, cuando asigne el recurso compartido de archivos a una unidad de una máquina virtual.

Creación de un recurso compartido de archivos en la cuenta de almacenamiento

Cree un contexto para la clave y la cuenta de almacenamiento con New-AzStorageContext. El contexto encapsula el nombre y la clave de la cuenta de almacenamiento:

$storageContext = New-AzStorageContext $storageAcctName $storageAcctKey

Cree un recurso compartido de archivos con New-AzStorageShare:

$share = New-AzStorageShare my-file-share -Context $storageContext

Denegación de todo el acceso a la red a una cuenta de almacenamiento

De forma predeterminada, las cuentas de almacenamiento aceptan conexiones de red procedentes de clientes de cualquier red. Para limitar el acceso a redes seleccionadas, cambie la acción predeterminada a Deny con Update-AzStorageAccountNetworkRuleSet. Una vez que se deniega el acceso a la red, no se puede acceder a la cuenta de almacenamiento desde ninguna red.

Update-AzStorageAccountNetworkRuleSet  `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -DefaultAction Deny

Habilitación del acceso de red desde una subred

Recupere la red virtual creada con Get-AzVirtualNetwork y recupere el objeto de subred privada en una variable con Get-AzVirtualNetworkSubnetConfig:

$privateSubnet = Get-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroup" `
  -Name "myVirtualNetwork" `
  | Get-AzVirtualNetworkSubnetConfig `
  -Name "Private"

Permita el acceso a la red a la cuenta de almacenamiento desde la subred Private con Add-AzStorageAccountNetworkRule.

Add-AzStorageAccountNetworkRule `
  -ResourceGroupName "myresourcegroup" `
  -Name $storageAcctName `
  -VirtualNetworkResourceId $privateSubnet.Id

Creación de máquinas virtuales

Para probar el acceso de la red a una cuenta de almacenamiento, implemente una máquina virtual en cada subred.

Creación de la primera máquina virtual

Cree una máquina virtual en la subred Pública con New-AzVM. Cuando ejecute el comando siguiente, se le solicitarán las credenciales. Los valores que especifique se configuran como el nombre de usuario y la contraseña de la máquina virtual. La opción -AsJob crea la máquina virtual en segundo plano, así que puede continuar con el siguiente paso.

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Public" `
    -Name "myVmPublic" `
    -AsJob

Se devuelve una salida similar a la del siguiente ejemplo:

Id     Name            PSJobTypeName   State         HasMoreData     Location             Command                  
--     ----            -------------   -----         -----------     --------             -------                  
1      Long Running... AzureLongRun... Running       True            localhost            New-AzVM     

Creación de la segunda máquina virtual

Cree una máquina virtual en la subred Private:

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Location "East US" `
    -VirtualNetworkName "myVirtualNetwork" `
    -SubnetName "Private" `
    -Name "myVmPrivate"

La operación de creación de la máquina virtual para Azure tarda unos minutos. No continúe con el paso siguiente hasta que Azure termine de crear la máquina virtual y devuelva la salida a PowerShell.

Confirmación del acceso a la cuenta de almacenamiento

Use Get-AzPublicIpAddress para devolver la dirección IP pública de una máquina virtual. En el siguiente ejemplo se devuelve la dirección IP pública de la máquina virtual myVmPrivate:

Get-AzPublicIpAddress `
  -Name myVmPrivate `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Reemplace <publicIpAddress> en el siguiente comando, por la dirección IP pública devuelta por el comando anterior y, a continuación, escriba el siguiente comando:

mstsc /v:<publicIpAddress>

Se crea un archivo de Protocolo de Escritorio remoto (.rdp) y se descarga en su equipo. Abra el archivo .rdp descargado. Cuando se le pida, seleccione Conectar. Escriba el nombre de usuario y la contraseña que especificó al crear la máquina virtual. Puede que deba seleccionar More choices (Más opciones) y, luego, Use a different account (Usar una cuenta diferente), para especificar las credenciales que escribió al crear la máquina virtual. Seleccione Aceptar. Puede recibir una advertencia de certificado durante el proceso de inicio de sesión. Si recibe la advertencia, seleccione o Continuar para continuar con la conexión.

En la máquina virtual myVmPrivate, asigne el recurso compartido de archivos de Azure a la unidad Z con PowerShell. Antes de ejecutar los comandos que siguen, reemplace <storage-account-key> y <storage-account-name> por valores que proporcionó o recuperó en Crear una cuenta de almacenamiento.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

PowerShell devuelve una salida similar a la del ejemplo siguiente:

Name           Used (GB)     Free (GB) Provider      Root
----           ---------     --------- --------      ----
Z                                      FileSystem    \\vnt.file.core.windows.net\my-f...

El recurso compartido de archivos de Azure se ha asignado correctamente a la unidad Z.

Asegúrese de que la máquina virtual no tiene conectividad de salida con otras direcciones IP públicas:

ping bing.com

Dado que el grupo de seguridad de red asociado a la subred Privada no permite el acceso de salida a otras direcciones IP públicas que no sean las direcciones asignadas al servicio Azure Storage, no recibirá ninguna respuesta.

Cierre la sesión de Escritorio remoto a la máquina virtual myVmPrivate.

Confirmación de la denegación del acceso a la cuenta de almacenamiento

Obtenga la dirección IP pública de la máquina virtual myVmPublic:

Get-AzPublicIpAddress `
  -Name myVmPublic `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Reemplace <publicIpAddress> en el siguiente comando, por la dirección IP pública devuelta por el comando anterior y, a continuación, escriba el siguiente comando:

mstsc /v:<publicIpAddress>

En la máquina virtual myVmPublic, intente asignar el recurso compartido de archivos de Azure a la unidad Z. Antes de ejecutar los comandos que siguen, reemplace <storage-account-key> y <storage-account-name> por valores que proporcionó o recuperó en Crear una cuenta de almacenamiento.

$acctKey = ConvertTo-SecureString -String "<storage-account-key>" -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\<storage-account-name>", $acctKey
New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storage-account-name>.file.core.windows.net\my-file-share" -Credential $credential

El acceso al recurso compartido se deniega y recibe el error New-PSDrive : Access is denied. El acceso se deniega porque la máquina virtual myVmPublic está implementada en la subred Public. La subred Public no tiene ningún punto de conexión de servicio habilitado para Azure Storage y la cuenta de almacenamiento solo permite el acceso de red desde la subred Private, no desde la subred Public.

Cierre la sesión de Escritorio remoto a la máquina virtual myVmPublic.

Desde su equipo, intente ver los recursos compartidos de archivos en la cuenta de almacenamiento con el siguiente comando:

Get-AzStorageFile `
  -ShareName my-file-share `
  -Context $storageContext

Se deniega el acceso y se recibe el error Get-AzStorageFile: Error en el servidor remoto: 403 Prohibido. Código de estado HTTP: 403 - Mensaje de error HTTP: This request is not authorized to perform this operation (Esta solicitud no está autorizada para realizar esta operación) porque el equipo no está en la subred Private de la red virtual MyVirtualNetwork.

Limpieza de recursos

Cuando ya no lo necesite, puede usar Remove-AzResourceGroup para quitar el grupo de recursos y todos los recursos que contiene:

Remove-AzResourceGroup -Name myResourceGroup -Force

Pasos siguientes

En este artículo, ha habilitado un punto de conexión de servicio en una subred de la red virtual. Ha aprendido que los puntos de conexión de servicio pueden habilitarse para los recursos implementados con varios servicios de Azure. Ha creado una cuenta de Azure Storage y ha hecho que el acceso de la red a la cuenta de almacenamiento esté limitado exclusivamente a los recursos que se encuentran en una subred de la red virtual. Para más información acerca de los puntos de conexión de servicio, consulte Introducción a los puntos de conexión de un servicio y Administración de subredes.

Si tiene varias redes virtuales en la cuenta, es posible que desee conectar dos de ellas para que los recursos que están dentro de cada red virtual puedan comunicarse entre sí. Para obtener información sobre cómo hacerlo, consulte Conexión de redes virtuales.