Cómo configurar AWS SFTP Transfer Family con Custom DNS conectando desde Windows con FileZilla.

Oscar Ivan Ocampo
9 min readSep 30, 2020

--

En ocasiones tenemos la necesidad de configurar un servicio de SFTP que sea rápido , escalable, seguro , Full administrado y use un almacenamiento de bajo costo como lo es Amazon S3.

El servicio Full Management de SFTP llamado AWS Transfer Family https://aws.amazon.com/es/aws-transfer-family/ puede ser la solución que soporte nuestro caso de uso.

Mostraré los pasos necesarios para realizar la configuración del servicio con la creación de usuarios FTP con identidad administrada por AWS ( usuario — (clave privada) -> SFTP [clave de verificación] — (archivos) -> usuario) que es la manera mas fácil de realizarlo, también existe una segunda forma de autenticar los usuarios a través de identidad personalizada ( user — (password) →SFTP →API Gateway →Lambda[checks password] → API Gateway →SFTP →S3 →sftp →user ) el cuál no veremos en este Post y requiere un uso mas complejo de otros servicios de AWS.

En la Consola de AWS escogemos el servicio AWS transfer Family y damos “Create server

Escogemos la opción de SFTP ( SSH File Transfer Protocol) y damos Next.

Seleccionamos Service managed para la gestión y administración de usuarios que conectarán al servicio.

Como nuestro servicio de SFTP en nuestro caso queremos que sea alcanzado desde internet ( público) seleccionamos “Publicly accesible” y también queremos que sea alcanzado por nuestro DNS Personalizado seleccionamos en Custom hostname Other DNSel nombre DNS personalizado en mi caso ftps.highcloudtec.com y finalizamos con Next

Dejamos por defecto el Role que AWS creará por nosotros con acceso a Cloud Watch para hacer push de los Logs del servicio y damos Next.

Tenemos un resumen del asistente con todas las configuración para aprovisionar el servicio y damos al final Create server.

AWS nos empieza aprovisionar el servicio y dejarlo listo para nosotros.

Si todo ha salido bien , vemos que nuestro servicio ya se encuentra Online

Generación de DNS Personalizado en Route 53 para nuestro SFTP.

Ahora para crear el apuntamiento adecuado, debemos ir copiar el End Point entregado por el servicio de AWS Transfer Family darle un Copy+C y luego en Route 53 crear el respectivo registro Cname.

Ingresamos a la Configuración de AWS Transfer family y copiamos el siguiente End Point para mi caso, recuerde copiar el suyo

s-ada67bb9a7064e52b.server.transfer.us-west-2.amazonaws.com

Ingresamos al dominio público como Zona Hosteada que tenga en mi caso Highcloudtec.com

Creamos un registro

Seleccionamos la opción la opción “Simple routing” → Next

Damos click en “Define Simple Record” → Create Record

Tenemos una confirmación final donde para crear el registro

De esta manera ya el Servicio de SFTP podría resolver de manera pública sftp.highcloudtec.com

Creación de Bucket S3 para que los usuarios puedan subir y bajar Información.

Para que el servicio de AWS Transfer Family le permit a los usuarios subir y bajar información debemos configurar el Bucket de Amazon S3 que servirá para esto.

En la consola vamos al servicio de Amazon S3 → Create Bucket

Damos el nombre al Bucket en mi caso “datasftpblog” y escojo la región donde se encuentra mi servicio de AWS Transfer Family que es Oregon en mi caso y finalizamos con Next.

Dejamos todas las opciones por defecto y damos Next.

Dejamos las opciones por defecto y damos “Create bucket”.

Vemos que el bucket “datasftpblog” usar en el servicio de SFTP ya esta listo

Creación ROL en IAM con Permisos Full Acces a S3.

Debemos crear el Rol en IAM que permitirá a los usuarios creados mas adelante en el servicio de SFTP Transfer Family leer y escribir sobre los buckets en S3.

Nota: Usted puede crear el Rol lo mas granular posible dando acceso única y exclusivamente al Bucket presentado a los usuarios del servicio AWS transfer Family.

Vamos al servicio de AWS IAM → Roles

Es muy importante que escoja el servicio “Transfer” y luego Next Permissions

Seleccionamos la política administrada de AWS “AmazonS3FullAcces” → Next Tags

Damos el nombre del Rol que describa para que es y alguna descripción seguidamente “Create role”

Se confirma que el ROL ha sido creado

Creación de Usuario para el servicio de SFTP Transfer Family.

Ingresamos en l consola al servicio Transfer Family y damos click en el Server ID s-ada67bb9a7064e52b

Adicionamos un usuario nuevo → Add User

Ingresamos usuario, escogemos Rol y Bucket.

Para introducir la llave publica del usuario oscar.ocampo en el campo SSH public Key, debe ir al siguiente paso de como crear la llave antes de dar Add.

Como Crear SSH Public Key para el usuario windows oscar.ocampo

Como Prerrequisito en el cliente Windows que conectará a nuestro servidor SFTP Transfer family, deberá tener instalado los siguientes paquetes:

  1. Putty Gen para S.O Windows

Link referencia → https://www.ssh.com/ssh/putty/windows/puttygen

2. FileZilla cliente para S.O Windows

Link referencia →https://download.filezilla-project.org/client/FileZilla_3.50.0_win64_sponsored-setup.exe

Abrimos el Puttygen previamente instalado en el cliente Windows

Damos Click en Generate y movemos el Mouse en el area en blanco hasta completar.

Al terminar se ha generado la llave y guardamos en el cliente la Public Key

Le ponemos un nombre ( llaveftp) a la llave y la guardamos por ejemplo en mis documentos.

Guardamos de igual manera la llave Privada ( llaveprivada) que será usada más adelante en la conexión FileZilla.

Navegamos en Mis documentos para localizar la llave Publica guardada y abrimos el archivo en modo edición.

La selección de inicio y fin de la llave es la que se encuentra sombreada de color azul y debe editarla al punto , de dejarla en una sola linea y sin espacios para poder copiarla ( control+c) y pegarla en AWS Transfer Family.

Recuerde debe copiar toda la llave sin espacios la cuál has dejado en una sola linea.

Ahora en AWS Transfer Family Creación del usuario debes pegar la llave anteponiendo ssh-rsa Control+v la llave pública del cliente windows que editamos eliminando los espacios.

De esta manera ya hemos creado un usuario con su respectiva llave segura de conexión y así podrías ir creando todos los usuarios uno a uno.

Prueba de Conexión FileZilla cliente Windows al Servicio de AWS Transfer Family.

En el cliente Windows donde vamos a probar la conexión ingresamos a crear un sitio, teniendo en cuenta para este caso Quickconnect no aplica.

Click en “New site

Creamos todos los siguientes datos de configuración necesarios en la conexión

  1. Nombre de la conexión descriptiva en mi caso ftps.highcloudtec.com
  2. Debes seleccionar el protocolo seguro de conexión SFTP — SSH File Transfer Protocol.
  3. Debes poner el host personalizado público que fue creado en Route 53 en mi caso ftps.highcloudtec.com y escoger el puerto 22.
  4. Selecionar en el tipo de Login con Key File.
  5. En user seleccionar el usuario creado en AWS Transfer Family en mi caso oscar.ocampo
  6. explorar en mis documentos y navegar para seleccionar la llave millaveprivada.ppk en mi caso llaveprivada.ppk
  7. Probar la conexión.

Una vez damos conectar nos indica que si queremos siempre confiar en esta conexión para que nunca vuelva a salir ningún mensaje, a lo cuál seleccionamos “always trust this host, add key to the cache” y damos OK

Vemos que la conexión fue Exitosa y vemos el bucket en amazon S3, en el cuál podemos subir y descargar información.

Aquí vemos como subimos 2 archivos llaveprivada.ppk y el archivo ntuser.ini

Como ver los Logs del Servicios AWS Transfer Family

Si queremos ver todos los Logs del uso del servicio por parte de los usuarios , podemos ingresar al Servicio AWS Transfer Family y en la opción View Logs

Nos lleva directamente a Cloud Watch donde se encuentran todos los Logs y veremos el último donde esta la subida de los 2 files.

De esta manera podemos tener un Servicio de SFTP con AWS totalmente gestionado, escalable y que crece en almacenamiento elástico a través del servicio de AWS S3.

--

--

Oscar Ivan Ocampo

Entrepreneur, travel lover, AWS x3, CIO High Cloud Tec , AWS Community Builder, passionate about cloud learning