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.

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:
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
| Componente | Tecnología | Propósito |
|---|---|---|
| Bastion Host | EC2 hardened + OpenSSH | Punto único de entrada SSH a la VPC privada |
| Autenticación 2FA | Google Authenticator + PAM | Segundo factor obligatorio basado en TOTP |
| Túneles SSH | SSH Port Forwarding | Acceso cifrado a servicios internos (DB, RDP, SFTP) |
| Control de acceso | Grupos Linux + sshd_config | Permisos granulares por rol de usuario |
| Auditoría de sesiones | sudo + sudoreplay | Grabación y reproducción de sesiones administrativas |
| Gestión de usuarios | Scripts Bash + base de datos | Automatización de altas, bajas y permisos |
| DNS | Route53 | Resolución de nombres para bastion host |
| Firewall | Security Groups + iptables | Control de tráfico a nivel de red y host |
Diagrama de arquitectura

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 claveSolució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:
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:
- Algo que tienes: clave privada RSA (almacenada en dispositivo del usuario)
- Algo que sabes: passphrase de la clave RSA (opcional pero recomendado)
- Algo que posees: dispositivo móvil con Google Authenticator generando TOTP
Flujo de autenticación:


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:
| Grupo | Permisos | Restricciones | Casos de uso |
|---|---|---|---|
| admin-group | Shell interactiva SSH jump sin restricciones Port forwarding ilimitado Sin auditoría | Ninguna | Administradores de sistema con privilegios completos |
| developer-group | Shell interactiva SSH jump a servidores específicos Port forwarding restringido Auditoría completa | Solo túneles RDP y PostgreSQL | Desarrolladores que requieren acceso a bases de datos y servidores de desarrollo |
| external-rw | Sin 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-ro | Sin shell Port forwarding solo lectura Auditoría completa | Solo lectura de bases de datos PermitTTY no | Usuarios externos con acceso solo lectura |
| sftp-only | Sin 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:
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:
| Script | Función | Beneficio |
|---|---|---|
create-new-user.sh | Crea usuario, asigna grupo, genera 2FA QR | Alta automatizada con configuración completa |
delete-user.sh | Elimina usuario y limpia configuración | Baja segura sin residuos |
grant-user-authorized-hosts.sh | Otorga acceso a hosts internos específicos | Control granular de permisos |
revoke-user-authorized-hosts.sh | Revoca acceso a hosts internos | Revocación inmediata ante incidentes |
update-README-files.sh | Actualiza documentación de usuario | Documentación siempre sincronizada |
update-skel-files.sh | Actualiza plantillas de nuevos usuarios | Estandarizació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:
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
Cumplimiento normativo y auditoría
Optimización operativa
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
Lecciones aprendidas
Lo que funcionó excepcionalmente bien:
- Google Authenticator con PAM: integración sencilla y confiable de 2FA sin dependencias de servicios cloud de terceros.
- Control de acceso basado en grupos: flexibilidad completa mediante directivas Match Group en sshd_config sin modificar código.
- Sudoreplay para auditoría: capacidad de reproducir sesiones como video ASCII resulta invaluable para investigación de incidentes.
- Automatización de gestión de usuarios: la inversión en scripts automatizados se amortizó rápidamente reduciendo errores y tiempo operativo.
- Documentación auto-generada: los usuarios reciben instrucciones personalizadas actualizadas automáticamente, reduciendo tickets de soporte.
Desafíos técnicos superados:
- Configuración de chroot SFTP: requiere permisos específicos en estructura de directorios (root:root para ChrootDirectory) que pueden resultar contra-intuitivos inicialmente.
- Túneles SSH persistentes: los usuarios requieren mantener túneles activos, implementamos scripts wrapper para facilitar la experiencia.
- Compatibilidad de clientes SSH: algunos clientes SSH legacy requieren ajustes de configuración de cifrado, documentamos configuraciones compatibles.
- Logs de auditoría voluminosos: implementamos rotación automática y compresión de logs de sudoreplay para gestionar espacio en disco.
- 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
- 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.
- 2FA no es opcional: la autenticación multifactor debe ser obligatoria sin excepciones para proteger contra robo de credenciales.
- Control de acceso granular desde día uno: implementar roles y permisos diferenciados desde el inicio evita refactorizaciones complejas posteriores.
- Auditoría como requisito no negociable: la capacidad de reproducir sesiones administrativas resulta invaluable para investigación de incidentes y compliance.
- 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 →
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.
Proyectos relacionados

Arquitectura de seguridad de red multinivel en AWS con VPC, NAT Gateway y protección perimetral
Diseño e implementación de arquitectura de seguridad AWS empresarial con VPC multi-nivel, separación de subredes públicas y privadas, NAT Gateway para tráfico saliente controlado, despliegue multi-AZ para alta disponibilidad, AWS Shield para protección DDoS, AWS WAF para seguridad de aplicaciones y estrategia completa de respaldo con AWS Backup.

Arquitectura de balanceo de carga global y alta disponibilidad en AWS
Diseño e implementación de infraestructura altamente disponible multi-región aprovechando AWS Global Accelerator y Application Load Balancers para optimizar latencia, distribución geográfica y recuperación automática entre múltiples zonas de disponibilidad.
Consultoría en arquitectura cloud AWS - Soluciones empresariales para múltiples industrias
Consultoría independiente en arquitectura cloud AWS proporcionando orientación estratégica y liderazgo técnico en el diseño e implementación de soluciones de infraestructura cloud innovadoras para diversos clientes en múltiples industrias, especializado en diseño arquitectónico, despliegue, optimización, seguridad, cumplimiento normativo, gestión de costes y prácticas CI/CD.
Comentarios
Enviar comentario