Usar un bastion es cosa del pasado

Usar un bastion es cosa del pasado

Te cuento una muy buena alternativa al uso de una instancia bastion para poder acceder a tus redes privadas en el cloud

Play this article

Introducción

Si te encontraste creando o administrando infraestructura en la nube, seguramente tuviste que encontrar una manera de poder acceder a los recursos que se despliegan en redes privadas, porque la información sensible la despliegas en redes sin acceso a internet, verdad?

image.png

Lo cierto es que para lograr este objetivo existen varias alternativas, pero la que se utilizaba y se sigue utilizando mucho es la de el famoso servidor bastión.

Qué es un servidor bastión?

No es más que una máquina virtual que, a nivel de red, tiene un acceso público protegido (ssh generalmente) y por otro lado acceso a las redes privadas que necesitamos.

image.png

Es una buena alternativa, se puede esconder el puerto utilizando otro que no sea el conocido 22, se pueden permitir solo ciertos accesos, controlar desde qué ip accedemos, etc...

La realidad es que sigue siendo engorroso mas cuando necesitas que desarrolladores accedan por ejemplo a las bases de datos gestionar los usuarios de este sistema, permisos y demás tareas de mantenimiento de servidores que ya están volviendose un poco obsoletas (estás deacuerdo?)

No seas misterioso, que alternativa tenemos

No vamos a descubrir nada nuevo aquí, pero sabemos que las famosas redes privadas virtuales (VPN) nos vienen como anillo al dedo para estas cosas.

El problema es que generar un servidor VPN en una máquina virtual, gestionarlo y todo lo que implica tampoco es muy tentador.

Aquí entra en juego la magia de los proveedores cloud y sus servicios gestionados, en este caso en AWS disponemos de la posibilidad de crear un "Client VPN Endpoint" (dentro de VPC --> VIRTUAL PRIVATE NETWORK (VPN))

Qué es un client VPN endpoint

Pues mira lo clarito que lo indican desde AWS, no hay mucho que agregar:

"AWS Client VPN is a managed client-based VPN service that enables you to securely access your AWS resources and resources in your on-premises network. With Client VPN, you can access your resources from any location using an OpenVPN-based VPN client."

image.png Documentación oficial

Creación de VPN en AWS

Para el ejemplo vamos a utilizar el servicio de VPN Endpoint con una autenticación mediante certificados, podríamos utilizar Active Directory o usuarios federados con SAML

Lo primero que realizaremos será crear localmente los certificados que luego cargaremos en ACM para poder utilizarlos en el servicio de VPN endpoint

Creación de certificados

Para la creación de los certificados vamos a utilizar un repositorio oficial de open-vpn que nos simplifica este proceso: easy-rsa

Clonamos el repositorio e ingresamos a la carpeta

git clone https://github.com/OpenVPN/easy-rsa
cd easy-rsa/easyrsa3

Ejecutamos

./easyrsa init-pki

Creamos nuestro CA

./easyrsa build-ca nopass

Creamos los certificados completos para el server "myserver"

./easyrsa build-server-full myserver nopass

Creamos los certificados completos para el client "client1"

./easyrsa build-client-full client1.domain.tld nopass

Dentro de la carpeta pki tendremos nuestras claves creadas:

ca.crt

pki/issued/myserver.crt

pki/private/myserver.key

pki/issued/client1.domain.tld.crt

pki/private/client1.domain.tld.key

Ahora debemos simplemente importar estos certificados en AWS ACM, en este caso lo realizaremos desde el cli de AWS (asumimos que ya tenemos configurados los accesos programáticos)

Importamos los certificados en AWS ACM

aws acm import-certificate --certificate fileb://pki/issued/myserver.crt --private-key fileb://pki/private/myserver.key --certificate-chain fileb://pki/ca.crt --region us-east-1
aws acm import-certificate --certificate fileb://pki/issued/client1.domain.tld.crt  --private-key fileb://pki/private/client1.domain.tld.key  --certificate-chain fileb://pki/ca.crt --region us-east-1

Ya con estos datos podemos ir a la consola web de AWS y configurar el VPC endpoint

Configuración de VPC endpoint

Una vez nos logueamos en AWS, nos movemos a VPC--> VPN --> Client VPN Endpoints. Hacemos click en "Create Client VPN Endpoint"

Completamos los datos iniciales, con un CIDR de la red que entragara a los clientes.

image.png

Para la autenticación seleccionamos tanto el certificado del servidor como el del cliente

image.png

Luego lo importante es la VPC y el sg para la configuración

image.png

En este punto disponemos de un VPN endpoint crado y configurado pero no está asociado con ninguna de nuestras VPC, para asociarlo simplemente hacemos click en el tab "Associations" y hacemos click en Associate

Configuramos la VPC que necesitamos acceder y seleccionamos una subnet para acceder (importante es una subnet pública que es donde se asocia el endpoint y debemos poder accederlo desde internet)

image.png

Si necesitamos redundancia podemos asociar otra subnet de otra AZ en la misma VPC.

Lo que nos queda por crear es quién puede acceder a este endpoint, nos movemos al tab Authorization y creamos un nuevo ingress

image.png

Aquí ya debemos configurar nuestro CIDR privado y aceptar la configuración

image.png

Una vez terminado todo este calvario de configuraciones podemos simplemente descargarnos el archivo de configuración para el acceso haciendo click en la parte superior en "Download client configuration"

Ingresando a la VPN

Una vez descargado el archivo de configuración solo nos resta utilizar nuestro cliente de openvpn favorito pasarle el archivo y conectarnos.

AWS tiene un cliente, que podemos utilizarlo sin inconvenientes: AWSClient

Conclusión

Como podemos ver existen alternativas al clasico bastion al momento de ingresar a las redes privadas dentro de AWS, espero que sea de utilidad. Compartime tus experiencias con este tipo de accesos. Nos vemos en el próximo post!