Blog de Amazon Web Services (AWS)

Utiliza la IP de origen como factor de autorización para el servicio de AWS Transfer for SFTP (AWS SFTP)

AWS Transfer for SFTP (AWS SFTP) es un servicio de AWS completamente administrado que te permite transferir archivos utilizando el protocolo de transferencia de archivos seguro (SFTP) hacia y desde el almacenamiento de Amazon Simple Storage Service (Amazon S3). SFTP se usa en los flujos de intercambio de datos en diversas industrias, como los servicios financieros, la salud y el comercio minorista, entre otros.

Recientemente se publicó una nueva funcionalidad para el servicio de AWS Transfer que te permite utilizar la IP del cliente como un factor para autorizar el acceso a repositorios (buckets) en Amazon S3.

En esta publicación mostraré como desplegando la plantilla de ejemplo proporcionada en la guía de usuario, para usar AWS Secrets Manager como proveedor de identidad accedida por una función Lambda, podemos acceder a la dirección IP de origen de donde el cliente inicia la conexión al servicio de AWS Transfer for SFTP.

Como referencia, ya existe una publicación que te muestra como realizar la configuración para lograr autenticación de los usuarios mediante usuario y contraseña utilizando AWS Secrets Manager, sin embargo, esta versión actualizada de la plantilla nos permitirá usar nuevos parámetros como sourceIP y protocol para controlar el acceso.

Arquitectura base de servicios

Tomando como referencia la arquitectura siguiente para utilizar AWS Secrets Manager como proveedor de identidad (IdP) con Amazon API Gateway, podemos describir el flujo siguiente:

1. El usuario intenta autenticarse, proporcionando usuario y contraseña o su llave privada SSH.

2. El servicio de AWS Transfer for SFTP recibe las credenciales y es capaz de determinar el protocolo utilizado y la IP de origen de donde fue requerida la conexión. Esos valores son enviados al punto de acceso del servicio Amazon API Gateway, el cual está integrado a una función Lambda.

3. La función Lambda consulta al proveedor de identidad personalizado, que en este caso es nuestro secreto almacenado en AWS Secrets Manager.

4. AWS Secrets Manager regresa los valores asociados al usuario o secreto que fue consultado, el cual contiene la contraseña, el rol que será utilizado por el usuario, el directorio raíz o directorio objetivo y ahora la dirección IP.

5. El acceso es validado cuando la función Lambda compara los valores proporcionados por el usuario con los presentados por AWS Secrets Manager. En este punto es donde podemos utilizar la contraseña, la llave SSH o la IP de origen para permitir, denegar o limitar el acceso del usuario.

Comprobar la información que estamos recibiendo

Descarga y despliega la plantilla de AWS CloudFormation. Permite la creación del servidor SFTP en las opciones de configuración.

Después de unos minutos debes tener un servidor SFTP con el punto de acceso de Amazon API Gateway como tu proveedor de identidad.

Intentemos acceder al servicio proporcionando un usuario-contraseña simulado como prueba:

Ahora revisemos las entradas en Amazon CloudWatch que vienen de la función Lambda para validar la información que estamos recibiendo:

Podemos observar que el parámetro de sourceIp contiene la dirección IP del cliente intentando conectarse al servicio, y el de protocol, contiene el respectivo protocolo utilizado de la familia de AWS Transfer (SFTP, FTP o FTPS).

Cabe mencionar que la función Lambda de la plantilla actualmente no hace ninguna validación utilizando la IP de origen del cliente, sin embargo, puedes observar como lo hace con el valor de la contraseña (password) e integrar algo similar con la nueva información de la dirección IP o el protocolo, ahora que conoces el nombre de los parámetros dentro del evento.

Para esta demostración, fue necesario agregar la siguiente línea de código a la función Lambda con la finalidad de imprimir la información recibida al momento de invocarla:

print (event)

Actualiza la plantilla ejemplo o directamente la función Lambda de acuerdo a tus necesidades.

Limpieza del ambiente

Si terminaste de usar los recursos creados por la plantilla de ejemplo, no olvides eliminarlos para evitar incurrir en cargos adicionales. Confirma que tanto los archivos como el bucket en Amazon S3 fueron descartados satisfactoriamente.

Conclusiones

Estos nuevos parámetros nos permiten agregar una capa adicional al modelo de autorización para los usuarios de AWS Transfer for SFTP, así como proporcionar permisos, directorios o roles granulares dependiendo del protocolo que utiliza o la dirección IP de donde se conectan, mejorando así la postura de seguridad tal como lo mencionan dos de los principios de diseño del pilar de seguridad del AWS Well Architected Framework:

1. Implemente bases sólidas de identidad: Aplique el principio del menor privilegio y haga cumplir la separación de funciones con la autorización apropiada para cada interacción con sus recursos de AWS.

2. Implemente seguridad en todas las capas: En lugar de centrarse en la protección de una sola capa exterior, aplique un enfoque de defensa en profundidad con otros controles de seguridad.


Sobre el autor

Omner Barajas (omner) es Arquitecto de Soluciones Especialista en Seguridad en AWS México.

 

 

 

 

Sobre los revisores

Daniel García (dgarcat) es Arquitecto de Soluciones Especialista en Seguridad en AWS Brasil.

 

 

 

 

Darío Goldfarb (goldfarb) es Arquitecto de Soluciones Especialista en Seguridad en AWS LATAM.