Azure Private Link

Desde el pasado 16 de septiembre ya tenemos en versión preliminar pública la característica Private Link en Azure.

¿Qué es Azure Private Link? Es un nuevo servicio de Azure que nos permite mantener protegidas las conexiones con los servicios PaaS que hayamos desplegado en Azure. Las conexiones se llevarán a cabo a través del backbone de Azure y no será necesario que el tráfico de estas conexiones pase por Internet. Esto diferencia Azure Private Link de los ya conocidos VNet Service Endpoint, en los que el acceso a ellos se hace mediante una IP pública y no podemos conectarnos mediante ExpressRoute o VPN para incrementar la seguridad.

Con Azure Private Link se asignará una IP privada dentro de una VNet a los servicios PaaS como bases de datos SQL, MySQL, PostgreSQL o a cuentas de almacenamiento. Al asignarles una IP privada, podremos acceder a estos servicios desde una red on-premises mediante VPN o ExpressRoute. Igualmente podremos acceder a estos servicios desde otros elementos de nuestra VNet, como máquinas virtuales, sin necesidad de que el tráfico pase por Internet.

En este post vamos a ver un ejemplo de cómo configuramos Azure Private Link para conectar una máquina virtual en una VNet con una cuenta de almacenamiento, a la que Private Link le asignará una IP privada en la misma VNet.

Tendremos una VNet “RG-PrivateLink-vnet” con el rango 10.0.1.0/24, en la que tenemos una subred “default” que usa todo ese rango 10.0.1.0/24. En esta subred creamos una máquina virtual, por ejemplo, un Windows Server al que se asigna la primera IP disponible en esa subred, 10.0.1.4/24.

También contaremos con una Storage Account. Al crear el Azure Private Link, se asignará a la Storage Account una IP dentro de la misma subred, 10.0.1.5/24, de forma que la máquina virtual podrá llegar a la Storage Account sin tener que salir a Internet.

Partimos de una máquina virtual creada en una VNet de Azure:

En este caso está creada en la región “East US 2”.

También tenemos una Storage Account en la región “East US”:

Ahora vamos a crear un Private Link para esta cuenta de almacenamiento de forma que sea accesible con una IP privada en la misma subred en la que tenemos la máquina virtual:

Seleccionamos la opción “Build a private connection to a service”:

Le damos un nombre y elegimos una región, que no tiene por qué coincidir con la región de la cuenta de almacenamiento, pero sí que debe estar en la misma región que la VNet en la que se encuentra la máquina virtual:

En el siguiente paso seleccionamos “Microsoft.Storage/storageAccounts” como el tipo de recurso, nuestra cuenta de almacenamiento como recurso y, por ejemplo, “blob” como el sub-recurso:

Si el Private Link lo hemos creado en la región “East US 2”, donde se encuentra la máquina y la VNet, nos dará esta red como opción:

Lo configuramos para que se integre con la zona DNS privada y la máquina virtual será capaz de resolver la IP que se va a asignar al Private Endpoint.

Ya solo nos queda confirmar la creación:

Cuando termine de crearse ya tendremos el Private Endpoint con la IP privada en el rango de la VNet:

De hecho, si desde la máquina virtual tratamos de resolver el FQDN del Private Endpoint:

Vemos que resuelve a la 10.0.1.5.

Si en la máquina virtual instalamos Azure Storage Explorer, podremos comprobar que usando la cadena de conexión podemos acceder a la cuenta de almacenamiento:

Lo mismo que nos hemos conectado a una cuenta de almacenamiento, también podemos usar Azure Private Link para conectarnos a una base de datos SQL Server desde nuestra máquina virtual.

Partimos de un servidor SQL Server que tenemos en Azure en la región “East US”:

Y también tenemos una base de datos creada:

Igual que para la cuenta de almacenamiento, vamos a crear un Private Link:

Lo creamos en la región en la que se encuentra la VNet:

Y conectamos con nuestro servidor SQL Server:

Nos dará una IP dentro del rango 10.0.1.0/24:

Una vez creado, ya tendremos el Private Endpoint con la IP 10.0.1.6/24:

Y si instalamos SQL Server Management Studio en la máquina virtual podremos acceder a nuestra base de datos: