Skip to main content

VPN

Los recursos de Explorax viven en VPCs, algunos de ellos pertecen a subredes privadas, por lo que su acceso solo es posible desde otros recursos dentro de la red, un ejemplo claro son las Bases de datos.

Para que la experiencia no consistiera en ejecutar varios comando SSH, se optó por usar tailscale como sevicio VPN.

¿Como Funciona?

Tailscale es un servicio de VPN que permite la comunicación entre clientes de diferentes redes al comunicarse con un servidor central manejado por ellos, este servidor central es el responsable de decidir si un dispositivo puede comunicarse con otro y se configuraca por medio de ACLs en su panel de control.

La instalación es tan simple como instalar el cliente en el dispositivo y autenticarse con un correo registrado previamente en el panel de control.

VPN y Redes

El diagrama de abajo demuestra como tailscale esta instalado en las redes de Explorax. En esencia Tailscale se encuentra instalado en una EC2 llamada backends-jumpbox (dado que es una caja negra que nos permite saltar a otros servicios privados).

Solo se tiene acceso a la VPC de explorax-backends

Para asegurar que se pueden acceder a los servicios correctos desde jumpbox se cuentan con 3 capas de protección

  1. Security Groups: Los security groups del jumpbox y otro recursos deben permitir el trafico.
  2. Advertising Routes: la jumpbox public explicitamente a que subredes pueden acceder los clientes.
  3. ACLs de Tailscale: Los Access Control Lists indican que clientes pueden conectarse con que dispositivos en la VPN.

Aquí una guia para su instalación en una EC2: https://tailscale.com/docs/install/cloud/aws

Configuracion para RDS

Para permitir la conexión desde la jumpbox a recursos de RDS se requirió de configuración extra dada por esta guia:

https://tailscale.com/docs/install/cloud/aws/aws-rds

Una vez hecho se puede conectar desde cualquier cliente utilizando el endpoint de la DB como : example.cf31a9a61ariu.us-east-1.rds.amazonaws.com

Tailscale ACLs

Este es un ejemplos de ACLs para permitir el acceso a usuarios del grupo dev y admin acceso a los dispositivos con la etiqueta dbjumpbox y sus redes publicadas.

// Example ACLs for connections to jumbox.
{
// Declare static groups of users. Use autogroups for all users or users with a specific role.
"groups": {
"group:dev": ["example@gmail.com"],
},

// Define the tags which can be applied to devices and by which users.
"tagOwners": {
"tag:dbjumpbox": ["autogroup:admin"],
},

// Define grants that govern access for users, groups, autogroups, tags,
// Tailscale IP addresses, and subnet ranges.
"grants": [
// Allow connections to jumpbox server and its published subnets
{
"src": ["group:dev", "autogroup:admin"],
"dst": ["tag:dbjumpbox", "10.140.0.0/24", "10.140.8.0/24"],
"ip": ["*"],
},
],

// Define users and devices that can use Tailscale SSH.
"ssh": [
// Allow all users to SSH into their own devices in check mode.
{
"action": "check",
"src": ["autogroup:member"],
"dst": ["autogroup:self"],
"users": ["autogroup:nonroot", "root"],
},
// Allow admin users to SSH into devices with tag 'dbjumbox'
{
"action": "check",
"src": ["autogroup:admin"],
"dst": ["tag:dbjumbox"],
"users": ["autogroup:nonroot", "root"],
},
],
}