Daniel López Azaña

Tema

Social Media

Securización de infraestructura AWS con bastion host avanzado, 2FA y auditoría de accesos

Implementación de arquitectura de seguridad en AWS con bastion host como punto único de entrada, autenticación de dos factores con Google Authenticator, control de acceso basado en roles, túneles SSH cifrados para servicios internos y sistema completo de auditoría de sesiones de usuario para cumplimiento normativo.

Las organizaciones que operan infraestructura en AWS enfrentan un desafío crítico de seguridad: proteger el acceso a recursos internos sensibles como bases de datos, servidores de aplicaciones y sistemas de archivos, sin exponerlos directamente a internet ni comprometer la productividad de equipos distribuidos que requieren acceso administrativo legítimo desde ubicaciones remotas.

Infraestructura de seguridad AWS con bastion host

Múltiples organizaciones de diferentes industrias necesitaban transformar su modelo de seguridad de red en AWS, eliminando la exposición directa de servidores internos y estableciendo controles de acceso granulares con trazabilidad completa de actividad administrativa. Como arquitecto cloud especializado en seguridad, he diseñado e implementado esta arquitectura de seguridad basada en bastion host con autenticación multifactor para diversos clientes, proporcionando control de acceso basado en roles, túneles SSH cifrados para servicios internos y un sistema completo de auditoría de sesiones para cumplimiento normativo.

El desafío: acceso seguro a infraestructura interna sin exposición pública

Las arquitecturas tradicionales de AWS suelen exponer instancias EC2 con IPs públicas o configurar VPNs corporativas complejas. Ambos enfoques presentan desventajas significativas:

Problemas identificados en el modelo anterior:

Superficie de ataque ampliadaServidores internos con IPs públicas expuestas directamente a internet.
Autenticación de factor únicoSolo contraseña o clave SSH sin segundo factor de autenticación.
Cuentas compartidas entre usuariosImposibilidad de rastrear acciones a usuarios individuales (compliance).
Auditoría insuficienteSin capacidad de reproducir sesiones administrativas para investigación de incidentes.
Gestión manual de accesosProcesos manuales propensos a errores para altas, bajas y modificaciones de permisos.

Requisitos de la solución:

  • Punto único de entrada seguro para acceso administrativo a VPC privada.
  • Autenticación multifactor obligatoria para todos los usuarios.
  • Control de acceso basado en roles con permisos granulares por grupo de usuarios.
  • Túneles SSH cifrados para acceso a servicios internos (PostgreSQL, MySQL, RDP, SFTP).
  • Auditoría completa de sesiones con capacidad de reproducción para compliance.
  • Automatización de gestión de usuarios mediante scripts centralizados.
  • SFTP con chroot para usuarios externos que requieren transferencia de archivos.

La solución: arquitectura de seguridad AWS completamente rediseñada con bastion host de alta seguridad, autenticación 2FA, segmentación de accesos por roles y auditoría exhaustiva.

Arquitectura de la solución

La arquitectura implementada es un diseño de seguridad Zero Trust para AWS que establece un punto único de entrada fuertemente securizado, eliminando completamente la necesidad de IPs públicas en servidores internos.

Componentes principales

ComponenteTecnologíaPropósito
Bastion HostEC2 hardened + OpenSSHPunto único de entrada SSH a la VPC privada
Autenticación 2FAGoogle Authenticator + PAMSegundo factor obligatorio basado en TOTP
Túneles SSHSSH Port ForwardingAcceso cifrado a servicios internos (DB, RDP, SFTP)
Control de accesoGrupos Linux + sshd_configPermisos granulares por rol de usuario
Auditoría de sesionessudo + sudoreplayGrabación y reproducción de sesiones administrativas
Gestión de usuariosScripts Bash + base de datosAutomatización de altas, bajas y permisos
DNSRoute53Resolución de nombres para bastion host
FirewallSecurity Groups + iptablesControl de tráfico a nivel de red y host

Diagrama de arquitectura

Arquitectura de seguridad AWS con bastion host, 2FA y auditoría de accesos

Proyecto relacionado

¿Quieres entender la diferencia entre un bastion host y una máquina de salto (jump box)? Estos términos se usan frecuentemente de forma intercambiable, pero existen distinciones técnicas importantes. Aprende sobre las diferencias arquitectónicas y cuándo usar cada enfoque en esta comparativa detallada.

Leer: bastion host vs jump box - diferencias clave

Solución 1: bastion host con autenticación de dos factores

Implementación del bastion host

El bastion host es una instancia EC2 específicamente configurada como punto único de entrada SSH a la VPC, ubicado en una subnet pública con IP elástica y hardening completo del sistema operativo.

Configuración de seguridad implementada:

Autenticación SSH con clave RSA obligatoriaAutenticación por contraseña completamente deshabilitada. Solo claves públicas autorizadas.
Google Authenticator como segundo factorTOTP (Time-based One-Time Password) obligatorio mediante PAM. Cada usuario recibe código QR para configuración.
Security Groups restrictivosSolo puerto SSH accesible desde internet, con listas blancas de IPs corporativas cuando es posible.
Hardening del sistema operativoActualizaciones automáticas de seguridad, fail2ban, deshabilitación de servicios innecesarios.

Integración de Google Authenticator con PAM

La autenticación de dos factores se implementó mediante PAM (Pluggable Authentication Modules) integrado con Google Authenticator, requiriendo tres factores de autenticación:

  1. Algo que tienes: clave privada RSA (almacenada en dispositivo del usuario)
  2. Algo que sabes: passphrase de la clave RSA (opcional pero recomendado)
  3. Algo que posees: dispositivo móvil con Google Authenticator generando TOTP

Flujo de autenticación:

DiagramDiagram

Configuración de roles y permisos granulares

La solución incluye un sistema de control de acceso basado en grupos Linux con permisos específicos definidos en sshd_config mediante directivas Match Group:

GrupoPermisosRestriccionesCasos de uso
admin-groupShell interactiva
SSH jump sin restricciones
Port forwarding ilimitado
Sin auditoría
NingunaAdministradores de sistema con privilegios completos
developer-groupShell interactiva
SSH jump a servidores específicos
Port forwarding restringido
Auditoría completa
Solo túneles RDP y PostgreSQLDesarrolladores que requieren acceso a bases de datos y servidores de desarrollo
external-rwSin shell por defecto
Port forwarding muy restringido
Auditoría completa
Solo servicios específicos autorizados
PermitTTY no
Usuarios externos con acceso lectura/escritura a servicios específicos
external-roSin shell
Port forwarding solo lectura
Auditoría completa
Solo lectura de bases de datos
PermitTTY no
Usuarios externos con acceso solo lectura
sftp-onlySin shell
Sin port forwarding
SFTP con chroot
Auditoría completa
ChrootDirectory configurado
ForceCommand internal-sftp
Usuarios que solo requieren transferencia de archivos

Ejemplo de configuración sshd_config:

# Grupo admin: sin restricciones
Match Group admin-group
    AllowTcpForwarding yes
    PermitOpen any
    PermitTTY yes

# Grupo developer: acceso controlado con auditoría
Match Group developer-group
    AllowTcpForwarding yes
    PermitOpen internal-db-1:5432 internal-db-2:5432 internal-rdp:3389
    PermitTTY yes
    ForceCommand /usr/local/bin/audit-wrapper.sh

# Grupo external-rw: muy restringido
Match Group external-rw
    AllowTcpForwarding yes
    PermitOpen service-api:8080
    PermitTTY no
    ForceCommand /usr/local/bin/audit-wrapper.sh

# Grupo sftp-only: chroot SFTP
Match Group sftp-only
    ChrootDirectory /sftp-home/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitTunnel no
    X11Forwarding no

Solución 2: túneles SSH para acceso a servicios internos

Túneles SSH cifrados

Los túneles SSH permiten acceso seguro a servicios internos sin exponer puertos públicamente, estableciendo un canal cifrado entre el cliente local y el servicio remoto a través del bastion host.

Servicios accesibles mediante túneles:

PostgreSQL y MySQLTúnel local para clientes GUI (pgAdmin, DBeaver, MySQL Workbench).
SFTP a servidores internosTransferencia de archivos a servidores sin IP pública mediante túnel a puerto 22.
RDP para WindowsEscritorio remoto a instancias Windows sin exposición pública del puerto 3389.
Interfaces administrativas webAcceso a paneles de administración internos mediante túneles HTTP/HTTPS.

Ejemplos de túneles SSH

Túnel local para PostgreSQL:

# Túnel desde localhost:5432 a base de datos interna
ssh -N -L 5432:internal-db.vpc.internal:5432 username@bastion-host

# El usuario se conecta localmente
psql -h localhost -p 5432 -U dbuser -d production

Túnel para RDP a Windows:

# Túnel desde localhost:3389 a servidor Windows interno
ssh -N -L 3389:windows-server.vpc.internal:3389 username@bastion-host

# Cliente RDP se conecta a localhost:3389

Túnel para SFTP a servidor interno:

# Túnel desde localhost:2022 a servidor SFTP interno
ssh -N -L 2022:internal-sftp.vpc.internal:22 username@bastion-host

# Cliente SFTP se conecta localmente
sftp -P 2022 deployuser@localhost

Documentación automatizada para usuarios

El sistema incluye generación automática de documentación personalizada para cada usuario, creando archivos README en sus directorios home con:

  • Comandos específicos de túnel SSH para los servicios autorizados
  • Ejemplos de conexión con clientes GUI (DBeaver, pgAdmin, Remmina)
  • Hosts internos accesibles según su grupo de permisos
  • Instrucciones de configuración de 2FA

Solución 3: auditoría completa de sesiones administrativas

Sistema de grabación de sesiones

La auditoría de sesiones se implementó mediante sudo logging integrado con sudoreplay, permitiendo:

  • Grabación completa de sesiones de todos los grupos excepto admin-group
  • Reproducción de sesiones como video ASCII terminal
  • Búsqueda de comandos ejecutados por usuario y fecha
  • Cumplimiento normativo (GDPR, SOC 2, ISO 27001)

Configuración de sudoers para auditoría:

# Configuración en /etc/sudoers.d/audit
Defaults log_output
Defaults!/usr/bin/sudoreplay !log_output
Defaults!/sbin/reboot !log_output

# Excepciones para admin-group (sin auditoría)
%admin-group ALL=(ALL) NOPASSWD: ALL

# Auditoría para developer-group
%developer-group ALL=(ALL) ALL

# Auditoría para external usuarios
%external-rw ALL=(LIMITED) ALL

Reproducción de sesión de usuario:

# Listar sesiones de un usuario específico
sudo sudoreplay -l user dlopez

# Reproducir sesión específica
sudo sudoreplay -d /var/log/sudo-io/00/00/01

# Buscar comando específico en todas las sesiones
sudo sudoreplay -l command mysql

Centralización de logs en CloudWatch

Los logs de auditoría se envían automáticamente a CloudWatch Logs para:

  • Retención a largo plazo (compliance)
  • Análisis centralizado de actividad
  • Alertas en tiempo real ante patrones sospechosos
  • Backup automático fuera del bastion host

Solución 4: automatización de gestión de usuarios

Scripts administrativos centralizados

La solución incluye un conjunto de scripts Bash que automatizan completamente la gestión de usuarios, eliminando tareas manuales propensas a errores:

ScriptFunciónBeneficio
create-new-user.shCrea usuario, asigna grupo, genera 2FA QRAlta automatizada con configuración completa
delete-user.shElimina usuario y limpia configuraciónBaja segura sin residuos
grant-user-authorized-hosts.shOtorga acceso a hosts internos específicosControl granular de permisos
revoke-user-authorized-hosts.shRevoca acceso a hosts internosRevocación inmediata ante incidentes
update-README-files.shActualiza documentación de usuarioDocumentación siempre sincronizada
update-skel-files.shActualiza plantillas de nuevos usuariosEstandarización de configuración

Base de datos de usuarios

Los scripts operan sobre una base de datos simple en archivo plano (users.db) que mantiene:

  • Usuarios activos y grupos asignados
  • Hosts internos autorizados por usuario
  • Fecha de creación y último acceso
  • Estado de 2FA (configurado/pendiente)

Ventajas del sistema automatizado:

Alta de usuario completo en menos de 2 minutos vs. 15-20 minutos manual.
Eliminación de errores humanos en configuración de permisos y grupos.
Estandarización completa del proceso de onboarding de usuarios.
Trazabilidad completa de cambios en permisos y configuración.

Solución 5: SFTP con chroot para usuarios externos

Implementación de SFTP seguro

Para usuarios externos que requieren transferencia de archivos sin acceso a shell, la solución implementa SFTP con chroot, aislando completamente a cada usuario en su directorio home.

Configuración de chroot SFTP:

# En /etc/ssh/sshd_config
Match Group sftp-only
    ChrootDirectory /sftp-home/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitTunnel no
    X11Forwarding no
    PermitTTY no

Estructura de directorios:

/sftp-home/
  ├── external-user-1/          # Propiedad root:root, permisos 755
  │   └── uploads/              # Propiedad external-user-1:sftp-only, permisos 770
  │       ├── incoming/
  │       └── outgoing/
  └── external-user-2/
      └── uploads/

Características de seguridad:

  • Usuarios no pueden ver contenido fuera de su directorio
  • Sin acceso a shell (ForceCommand internal-sftp)
  • Sin port forwarding (AllowTcpForwarding no)
  • Autenticación 2FA obligatoria
  • Logs completos de transferencias

Resultados e impacto empresarial

Mejoras de seguridad

Superficie de ataque reducida 90%Eliminación completa de IPs públicas en servidores internos.
Autenticación multifactor 100%2FA obligatorio para todos los usuarios sin excepciones.
Túneles cifrados end-to-endTodo el tráfico administrativo cifrado mediante SSH.
Control de acceso granular por rolesPermisos específicos para cada grupo de usuarios.

Cumplimiento normativo y auditoría

Grabación completa de sesiones administrativasReproducción de sesiones como video terminal para investigación de incidentes.
Trazabilidad a usuario individualCada acción rastreada a usuario específico (eliminación de cuentas compartidas).
Logs centralizados en CloudWatchRetención a largo plazo y análisis centralizado para compliance.
Cumplimiento de estándaresAlineado con requisitos de GDPR, SOC 2, ISO 27001, PCI DSS.

Optimización operativa

Tiempo de alta de usuarios reducido de 15-20 minutos a menos de 2 minutos mediante automatización.
Eliminación completa de errores de configuración manual de permisos.
Documentación auto-generada personalizada para cada usuario con sus túneles autorizados.
Reducción significativa de carga operativa del equipo de sistemas en gestión de accesos.

Historial en producción

Arquitectura de seguridad probada en múltiples entornos de producción

Esta arquitectura de seguridad con bastion host se ha desplegado con éxito múltiples veces para diversos clientes en entornos de producción, protegiendo infraestructura crítica en diferentes industrias y escalas organizacionales.

Historial de seguridad: hasta la fecha, no se ha constatado ningún intento de intrusión exitoso en ninguna de las implementaciones desplegadas, demostrando la efectividad del enfoque de seguridad en capas que combina infraestructura endurecida, 2FA obligatorio, control de acceso basado en roles y auditoría exhaustiva.

Logros técnicos clave

Diseño e implementación de bastion host hardened con 2FA obligatorio para todos los usuarios.
Configuración completa de túneles SSH para PostgreSQL, MySQL, RDP, SFTP y servicios web internos.
Implementación de sistema de control de acceso basado en roles con 5 grupos de permisos diferenciados.
Desarrollo de sistema completo de auditoría de sesiones con sudo logging y sudoreplay.
Creación de suite completa de scripts Bash para automatización de gestión de usuarios y permisos.
Configuración de SFTP con chroot para usuarios externos sin acceso a shell.

Lecciones aprendidas

Lo que funcionó excepcionalmente bien:

  1. Google Authenticator con PAM: integración sencilla y confiable de 2FA sin dependencias de servicios cloud de terceros.
  2. Control de acceso basado en grupos: flexibilidad completa mediante directivas Match Group en sshd_config sin modificar código.
  3. Sudoreplay para auditoría: capacidad de reproducir sesiones como video ASCII resulta invaluable para investigación de incidentes.
  4. Automatización de gestión de usuarios: la inversión en scripts automatizados se amortizó rápidamente reduciendo errores y tiempo operativo.
  5. Documentación auto-generada: los usuarios reciben instrucciones personalizadas actualizadas automáticamente, reduciendo tickets de soporte.

Desafíos técnicos superados:

  1. Configuración de chroot SFTP: requiere permisos específicos en estructura de directorios (root:root para ChrootDirectory) que pueden resultar contra-intuitivos inicialmente.
  2. Túneles SSH persistentes: los usuarios requieren mantener túneles activos, implementamos scripts wrapper para facilitar la experiencia.
  3. Compatibilidad de clientes SSH: algunos clientes SSH legacy requieren ajustes de configuración de cifrado, documentamos configuraciones compatibles.
  4. Logs de auditoría voluminosos: implementamos rotación automática y compresión de logs de sudoreplay para gestionar espacio en disco.
  5. Configuración inicial de 2FA: automatizamos generación de código QR y envío seguro a usuarios mediante PDF cifrado.

Proyecto relacionado

¿Te preguntas si es mejor un bastion host o una VPN para tu infraestructura? Cada enfoque tiene ventajas distintas para diferentes escenarios. Aprende cuándo usar cada uno, cuándo combinar ambos y cómo implementarlos efectivamente en esta comparativa completa.

Leer: bastion host vs VPN - ¿cuál es el mejor método de acceso seguro?

Conclusión

Este proyecto de securización de infraestructura AWS con bastion host avanzado representa un caso de estudio completo sobre cómo implementar arquitecturas Zero Trust en entornos cloud, eliminando exposición pública innecesaria de recursos internos mientras se mantiene accesibilidad administrativa para equipos distribuidos. Al combinar autenticación multifactor obligatoria, control de acceso granular basado en roles, túneles SSH cifrados y auditoría exhaustiva de sesiones, esta solución de seguridad robusta cumple estándares de compliance sin comprometer la productividad.

La arquitectura resultante establece un modelo de seguridad reproducible aplicable a cualquier organización que opere infraestructura en AWS, VPCs privadas en otros clouds o incluso datacenters on-premise. El sistema proporciona protección en profundidad (defense in depth) mediante múltiples capas de seguridad superpuestas y trazabilidad completa para cumplimiento normativo.

Conclusiones clave para proyectos similares

  1. Bastion host como chokepoint único: centralizar el acceso SSH en un punto único simplifica auditoría, monitorización y aplicación de políticas de seguridad.
  2. 2FA no es opcional: la autenticación multifactor debe ser obligatoria sin excepciones para proteger contra robo de credenciales.
  3. Control de acceso granular desde día uno: implementar roles y permisos diferenciados desde el inicio evita refactorizaciones complejas posteriores.
  4. Auditoría como requisito no negociable: la capacidad de reproducir sesiones administrativas resulta invaluable para investigación de incidentes y compliance.
  5. Automatización para eliminar errores humanos: la gestión manual de usuarios y permisos es propensa a errores de seguridad críticos que la automatización elimina completamente.

¿Necesitas securizar tu infraestructura AWS?

Si tu organización enfrenta desafíos similares:

  • Servidores internos con IPs públicas expuestos directamente a internet.
  • Autenticación de factor único sin 2FA para acceso administrativo.
  • Cuentas compartidas sin trazabilidad a usuarios individuales.
  • Requisitos de compliance (GDPR, SOC 2, ISO 27001, PCI DSS) sin auditoría adecuada.
  • Gestión manual de accesos propensa a errores y lenta.

Como arquitecto cloud AWS con 20+ años de experiencia en seguridad, puedo ayudarte a diseñar e implementar arquitecturas Zero Trust que protejan tus recursos críticos sin comprometer la productividad de tus equipos.

Especializado en bastion hosts hardened, autenticación multifactor, control de acceso basado en roles y sistemas de auditoría para cumplimiento normativo.

Ponte en contacto →

Daniel López Azaña

Sobre el autor

Daniel López Azaña

Emprendedor tecnológico y arquitecto cloud con más de 20 años de experiencia transformando infraestructuras y automatizando procesos.

Especialista en integración de IA/LLM, desarrollo con Rust y Python, y arquitectura AWS & GCP. Mente inquieta, generador de ideas y apasionado por la innovación tecnológica y la IA.

Comentarios

Sé el primero en comentar

Enviar comentario

¿Tienes un proyecto similar en mente?

Hablemos sobre cómo puedo ayudarte a alcanzar tus objetivos

Iniciar conversación