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).

explorax-backendsPara asegurar que se pueden acceder a los servicios correctos desde jumpbox se cuentan con 3 capas de protección
- Security Groups: Los security groups del
jumpboxy otro recursos deben permitir el trafico. - Advertising Routes: la
jumpboxpublic explicitamente a que subredes pueden acceder los clientes. - ACLs de Tailscale: Los
Access Control Listsindican 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"],
},
],
}