DEV Community

Cover image for Desplegando servidor SFTP en AWS
Misael Ramirez Espinosa
Misael Ramirez Espinosa

Posted on

Desplegando servidor SFTP en AWS

Introducción

En el presente tutorial mostraremos como podemos subir archivos a la nube de AWS utilizando el protocolo de seguridad SFTP.

Tabla de Contenidos

Requerimientos

  1. Cuenta en AWS.
  2. Aplicación FTP(Utilizamos Filezilla).
  3. ssh-keygen para generación de clave pública y privada.

Arquitectura

ARQUITECTURA

Tutorial

Paso 1

Lo primero que haremos es ir al servicio de S3 y crearemos un bucket que será donde almacenaremos los archivos que subamos mediante el servidor SFTP. En nuestro caso al bucket lo llamaremos demo-sftp-99

Creación Bucket

Paso 2

A continuación, nos dirigimos al servicio AWS Transfer Family y seleccionaremos "Create Server"

Transfer Family

En la sección 1 "Choose protocols" debemos seleccionar el tipo de transferencia que tendrá nuestro servidor, para ello nos desplega las siguientes opciones

  1. SFTP: Transferencia segura utilizando SSH
  2. FTPS: Transferencia segura sobre protocolo de encriptación TLS
  3. FTP: Transferencia sobre canal no encriptado

Seleccionaremos la opción SFTP

Choose protocols SFTP



En la sección 2 "Choose an identity provider" debemos seleccionar el tipo de proveedor que nos permitirá almacenar las credenciales de acceso. Las opciones son las siguientes:

  1. Service Managed: Con Transfer Family administramos las credenciales de acceso.
  2. AWS Directory Service: Utilizamos AWS Directory Service para administrar las credenciales de acceso. Este servicio se utiliza para trabajar en la nube de AWS con Microsoft Active Directory
  3. Custom Identity Provider: Administramos las credenciales de acceso con un proveedor personalizado a elección.

Seleccionaremos la opción de Service Managed para que posteriormente podamos crear un usuario directamente en el servidor SFTP.

Identity provider Service Managed



En la sección 3 "Choose an endpoint" debemos definir la configuración de seguridad del endpoint del servidor, para esto nos permite seleccionar lo siguiente:

  1. Publicy accesible: Para que este disponible a través de internet
  2. VPC Hosted: Para que se encuentre dentro de una VPC y utilizando Security Group

Para este tutorial nos basta con que se encuentre disponible sobre internet ya que la seguridad de la transferencia la estamos manejando con el protocolo SFTP. En el caso que necesitemos aplicar seguridad al servidor, entonces podemos configurar una VPC y seleccionar la opción VPC Hosted.

Al seleccionar esta opción, debemos definir en custom hostname que implica seleccionar como se creará el endpoint del servidor SFTP. Las opciones disponibles son:

  1. None: Crear el endpoint por defecto utilizando AWS Transfer Family.
  2. Amazon Route53 DNS Alias: Utiliza un Alias de DNS generado con Route53.
  3. Other DNS: Utilizar un hostname que hayamos creado previamente con un servicio DNS externo.

Seleccionaremos None para que el endpoint lo genere el mismo servicio de Transfer Family.

La opción FIPS Enabled es para asegurar que el endpoint cumpla con el estándar FIPS. La dejaremos desactivada.
Choose an endpoint



En la sección 4 "Choose a domain" debemos definir el servicio de almacenamiento de los archivos a transferir:

  1. Amazon S3: Para almacenar los archivos en un bucket de S3.
  2. Amazon EFS: Para almacenar los archivos en una instancia de EFS.

Seleccionaremos Amazon S3. La configuración del bucket se realiza al crear el usuario

Choose a domain



En la sección 5 "Configure additional details" debemos primero crear/seleccionar un role para el registro de los logs de CloudWatch. En nuestro caso dejaremos que el mismo servicio cree el role.

Luego en Cryptographic algorithm options debemos elegir la politica de seguridad referente al algoritmo de encriptación, la dejaremos por default "TransferSecurityPolicy-2020-06".

Configure additional details

En la sub-sección Server Host Key nos permite ingresar la clave privada en caso que deseemos migrar desde un servidor SFTP existente. En nuestro caso no aplica por lo que quedará vacio.

En Tags podemos agregar las etiquetas que necesitemos, aunque esto es opcional por lo que nosotros no lo haremos por el momento.

En Managed Workflows nos permite crear/seleccionar un flujo de trabajo en caso que necesitemos generar un procesamiento del tipo copiar, borrar, tagear o invocar una función lambda al archivo subido. Para propósitos de este tutorial no profundizaremos en esto, pero es una opción muy interesante a seguir explorando en el futuro.

Server Host Key



Hemos llegado al término del proceso de creación del servidor SFTP, por lo que en la sección 6 de "Review and create" clickearemos Create Server para lanzar el servicio.

La creación del servicio demora entre 3 a 5 minutos, por lo que cuando su estado sea Online, podemos continuar con el siguiente paso

Servidor creado

Paso 3

Seleccionaremos el servidor que acabamos de desplegar y lo que debemos hacer a continuación es crear el usuario que nos permitirá subir los archivos. Para ello iremos a la sección "Users" y seleccionaremos Add user.

Add user

En la sección User configuration debemos ingresar los parámetros que tendrá el usuario. Para ello en Username colocaremos sftp-user. En Role debemos previamente haber creado un role con la siguiente estructura:

En IAM iremos a Create Role y la primera sección de Choose a use case elegiremos Transfer

Use case

En Attach permissions policies seleccionaremos la politica administrada de AWS AmazonS3FullAccess

S3FullAccess

Por último en Review colocaremos el nombre demo-sftp al role.

Nombre Role

Volvemos a la pestaña de creación del usuario del servidor y seleccionaremos el role que acabamos de crear(Si no aparece inmediatamente podemos darle al refresh que está justo a la derecha).

No aplicaremos ninguna política extra al usuario por lo que dejaremos la opción None

En Home Directory debemos seleccionar el bucket que creamos en el paso 1 al cual colocamos demo-sftp-99 e inmediatamente el recuadro inferior lo rellenará con el nombre del usuario que ingresamos en la primera casilla. Esto significa que dentro del bucket de S3, al subir un archivo con este usuario, creará una "carpeta" en donde quedará almacenado. Este valor lo podemos cambiar a discreción, pero se recomienda dejarlo por defecto porque en el futuro podemos crear nuevos usuarios que eventualmente podrian generar confusión al no tener asignada una carpeta con el mismo nombre para cada usuario.

User

En SSH public keys debemos ingresar la clave pública que funcionará como credencial de acceso para este usuario. Para generar la clave pública y privada utilizamos el siguiente comando

ssh-keygen -f nombre_archivo
Enter fullscreen mode Exit fullscreen mode

Esto nos generará dos archivos, uno con terminación .pub(Clave pública) y el otro no(Clave privada). Copiaremos el contenido del archivo .pub y lo pegaremos en la sección SSH public key.
IMPORTANTE ALMACENAR AMBOS ARCHIVOS. LA CLAVE PRIVADA NO DEBE COMPARTIRSE NI ENVIARSE A TRAVÉS DE INTERNET PARA EVITAR QUE EXTERNOS PUEDAN ACCEDER A NUESTRO SERVIDOR SFTP.

Una vez tengamos todos los parámetros ingresado podemos seleccionar "Add user".

Ahora en la sección User veremos el usuario que acabamos de crear.

User creado

Paso 4

Abriremos el programa FTP que hayamos seleccionado, nosotros utilizaremos Filezilla. Iremos a Archivo y luego a Gestor de Sitios.

Esto nos deplegará una ventana en donde crearemos el Nuevo sitio para nuestro servidor. Para ello en la sección Protocolo de la parte derecha de la ventana seleccionaremos SFTP - SSH File Transfer Protocol. En Servidor pegaremos el endpoint ubicado en la sección Endpoint Details de nuestro servidor. El puerto es el 22. En el modo de acceso seleccionamos Archivo de claves y luego en el Usuario colocaremos el nombre del usuario creado en el paso 3, en nuestro caso sftp-user. En archivo de claves seleccionaremos la clave privada que generamos con ssh-keygen en el paso 3.

Ahora ya estamos en condiciones de conectarnos y comenzar a subir los archivos que deseemos

Configuración Filezilla

Paso 5 - Subida de archivos

Para nuestra primera subida solo basta con arrastrar el o los archivos que deseemos a la parte derecha inferior de Filezilla.

Subiendo archivo

Ahora iremos a revisar a S3 el archivo que acabamos de subir, para ello buscaremos el bucket demo-sftp-99 y luego sftp-user, en donde se encontrará el archivo.

Archivo en S3

Costos

Tutorial

Considerando que estamos desplegando el servidor en una cuenta personal, es importante que conozcamos de antemano los costos que tendrá el despliegue de esta solución. Para esto debemos considerar tres aspectos, el primero es cuantos protocolos estamos desplegando(con esto me refiero a si usamos SFTP, FTP, FTPS), el segundo es el tiempo que estará desplegado el servidor SFTP y por último la cantidad de data transferida.
Para este tutorial, tendremos desplegado el servidor durante 1 hora con una transferencia de datos de 0.5 GB

Utilizando la AWS Pricing Calculator realizaremos el cálculo.

Detalle:

  • 1 protocolo SFTP x 1 hora x 0.30 USD = 0.30 USD (costo por protocolos)
  • 0.50 GB x 0.04 USD = 0.02 USD (costo por transferencia de subida)
  • 0.50 GB x 0.04 USD = 0.02 USD (costo por transferencia de bajada)

0.30 USD + 0.02 USD + 0.02 USD = 0.34 USD

Costo AWS Transfer tutorial: 0.34 USD

Costo AWS Transfer tutorial

Ambiente productivo

Considerando que requerimos desplegar esta solución en un ambiente productivo, por lo que consideramos 720 horas al mes(24hr * 30 días) y con una cuota de transferencia de datos de 10 GB en promedio mensual. En base a esto, el detalle es el siguiente

  • 1 protocolo SFTP x 720 horas x 0.30 USD = 216.00 USD (costo por protocolos)
  • 10 GB x 0.04 USD = 0.40 USD (costo por transferencia de subida)
  • 10 GB x 0.04 USD = 0.40 USD (costo por transferencia de bajada)

216.00 USD + 0.40 USD + 0.40 USD = 216.80 USD

Costo AWS Transfer (mensual): 216.80 USD

Evidenciamos que los costos se eleven considerablemente, por lo que si no estamos dispuestos a desembolsar esa cantidad de dólares mensualmente, debemos de buscar alguna estrategia. Una que se me ocurre es desplegar esta solución solo cuando la necesitemos, realizando el despliegue mediante IaaC(Infraestructura como código) mediante un CloudFormation

Costo AWS Transfer ambiente productivo

Tutorial en YouTube

Tutorial

Fuente:
https://calculator.aws/#/createCalculator/TransferFamily
https://aws.amazon.com/aws-transfer-family/pricing/

Discussion (0)