Implementando un servidor SFTP seguro con AWS Transfer Family y Amazon Cognito
Muchas organizaciones necesitan ofrecer servicios de transferencia segura de archivos sin administrar servidores SFTP tradicionales, usuarios del sistema operativo o la gestión manual de llaves SSH.
En este artículo presento una arquitectura basada en servicios nativos de AWS para construir una solución SFTP segura, escalable y totalmente administrada, que soporta autenticación por usuario/contraseña y llaves públicas SSH, además de automatización basada en eventos para el ciclo de vida de los usuarios.
Visión general de la arquitectura
La siguiente imagen muestra la arquitectura de la solución:

Componentes principales
- AWS Transfer Family – Endpoint SFTP administrado
- Amazon Cognito – Autenticación y gestión de usuarios
- AWS Lambda – Proveedor de identidad personalizado y automatización
- Amazon EventBridge – Orquestación basada en eventos
- Amazon S3 – Almacenamiento de datos y llaves públicas
- AWS IAM – Control de acceso con privilegios mínimos
Modelos de autenticación soportados
La solución soporta dos métodos de autenticación:
- Autenticación basada en usuario y contraseña
- Autenticación basada en llaves públicas SSH Ambos métodos son manejados dinámicamente por una función Lambda que actúa como proveedor de identidad personalizado para AWS Transfer Family.
Requisitos previos
Antes de implementar esta solución, asegúrate de cumplir con lo siguiente:
- AWS CloudTrail habilitado, con Management Events activos Esto es necesario para que Amazon EventBridge pueda detectar eventos administrativos provenientes de Amazon Cognito (por ejemplo, creación o eliminación de usuarios). No se requieren configuraciones adicionales previas.
Paso 1: Crear el User Pool de Amazon Cognito
Amazon Cognito funciona como el servicio central de identidad para los usuarios SFTP.
Decisiones clave de configuración
- Inicio de sesión basado en nombre de usuario
- Política de contraseñas fuerte
- Habilitar AdminCreateUser para automatización
- No se requiere Hosted UI Cada usuario creado en Cognito representa un usuario SFTP.
Paso 2: Crear los buckets de Amazon S3
La solución utiliza dos buckets de Amazon S3:
1. Bucket de datos
Almacena los archivos de los usuarios.
Estructura recomendada:
s3://sftp-data-bucket/username/
2. Bucket de llaves públicas
Almacena las llaves públicas SSH de cada usuario.
Estructura recomendada:
s3://sftp-public-keys-bucket/username/key.pub
Las políticas de IAM aseguran que cada usuario solo tenga acceso a su propio prefijo dentro del bucket.
Paso 3: Configurar AWS Transfer Family
Se debe crear un servidor AWS Transfer Family (SFTP) con las siguientes características:
- Protocolo: SFTP
- Tipo de endpoint: VPC
- Security Group permitiendo el puerto TCP 22
- Proveedor de identidad personalizado: AWS Lambda AWS Transfer Family invoca la función Lambda cada vez que un usuario intenta autenticarse.
Paso 4: Implementar la Lambda de autenticación personalizada
Esta función Lambda actúa como proveedor de identidad personalizado.
Flujo de autenticación
- AWS Transfer Family invoca la función Lambda
- La función analiza la solicitud
- Se determina el método de autenticación utilizado Ejemplo de pseudocódigo
if event.get("Password"):
authenticate_user_with_cognito(username, password)
else:
public_keys = get_public_keys_from_s3(username)
Responsabilidades de la función
- Validar credenciales contra Amazon Cognito
- Recuperar llaves públicas SSH desde Amazon S3
- Retornar dinámicamente:
- Rol de IAM
- Política IAM en línea
- Mapeo de directorio home lógico Esto permite autorización dinámica por sesión.
Paso 5: Automatizar la gestión de carpetas con EventBridge
El ciclo de vida de los usuarios se maneja mediante eventos.
Creación de carpetas
- Evento: AdminCreateUser en Cognito
- Servicio: Amazon EventBridge
- Destino: Función Lambda La función Lambda:
- Crea las carpetas del usuario en ambos buckets
- Prepara el entorno antes del primer acceso
Eliminación o renombrado de carpetas
- Evento: AdminDeleteUser
- Servicio: Amazon EventBridge
- Destino: Función Lambda En lugar de eliminar la información, las carpetas pueden: Renombrarse
- Archivarse
- Moverse a un prefijo de resguardo
Paso 6: Modelo de seguridad con IAM
La seguridad se basa en el principio de mínimos privilegios:
- Cada sesión SFTP recibe un rol de IAM temporal
- El acceso se limita a:
- El prefijo del usuario en S3
- Las acciones estrictamente necesarias
- Las llaves públicas están protegidas contra eliminación accidental Este modelo garantiza aislamiento fuerte entre usuarios.
Flujo operativo
Autenticación basada en contraseña
- Se crea el usuario en Cognito
- Se establece la contraseña mediante AWS CLI o CloudShell
- El usuario se conecta usando un cliente SFTP estándar
aws cognito-idp admin-set-user-password \
--user-pool-id <UserPoolId> \
--username <username> \
--permanent \
--password <password>
Autenticación basada en llave pública SSH
- Generar el par de llaves:
ssh-keygen -m PEM
- Cargar la llave pública en S3:
aws s3api put-object \
--bucket <PublicKeyBucketName> \
--key <username>/key.pub \
--body key.pub
- Conectarse usando cualquier cliente SFTP compatible
Beneficios de esta arquitectura
- Sin servidores que administrar
- Autenticación completamente administrada
- Automatización basada en eventos
- Seguridad por diseño
- Escalabilidad automática
- Auditoría completa mediante CloudTrail
Conclusión
Esta arquitectura demuestra cómo los servicios nativos de AWS pueden combinarse para entregar una solución SFTP segura, escalable y fácil de operar.
Al utilizar AWS Transfer Family, Amazon Cognito, Lambda, EventBridge y S3, es posible eliminar servidores SFTP tradicionales sin sacrificar seguridad, control ni trazabilidad.
Top comments (0)