¿Cómo puedo configurar un servidor SFTP respaldado por S3 (o similar)

8

Necesito configurar un servidor SFTP que, esencialmente, tenga una capacidad muy grande. Necesito dar a uno de nuestros socios los detalles de inicio de sesión SFTP en un servidor donde cargarán millones de archivos, un total de unos cientos de terabytes. Seré selectivo y raramente leeré algunos de estos archivos. Este es el único requisito real, cualquier opción de tecnología está en juego.

Lo que viene a la mente como la forma más fácil es tener algún tipo de instancia EC2 que ejecute el servidor SFTP de tal manera que cualquier cosa cargada se envíe directamente a S3 o algún tipo de proceso descubra nuevos archivos cuando se carguen y los copie en S3, y los elimina del disco.

Es esta la mejor manera? ¿Hay alguna otra forma de obtener un servidor que esencialmente tenga "espacio en disco infinito y mágicamente creciente"?

¡Gracias por tu ayuda! Daniel

Daniel Magliola
fuente
3
100 TB de transferencia de datos en S3 te costarán casi $ 5,000. El valor de la pornografía de tus "socios" es probablemente mucho menor que eso.
HopelessN00b
2
code.google.com/p/s3fs es probablemente su mejor apuesta. Además de los costos de transferencia, señala @ HopelessN00b, esos mismos 100 TB le costarán $ 3k / mes para almacenar.
ceejayoz
2
Gracias por tu comentario constructivo @ HopelessN00b. Para cualquier otra persona que pueda haber sido disuadida de responder por esa idea ... Hemos hecho los cálculos, sí, transferir y retener esa cantidad de información nos costará mucho dinero. Tener los datos (definitivamente no porno) vale ese costo para nuestro negocio.
Daniel Magliola
1
Muy bien, ¿entonces tu pregunta es ...? ¿Cómo instalar SFTP en una instancia de AWS? ¿Cómo escribir un script para eliminar archivos? ¿Qué? No para ser injusto, pero pensaría que una empresa que quiere gastar decenas de miles de dólares al mes para estos "pocos cientos" TB de datos estaría dispuesta a contratar a un consultor por unos pocos grandes para configurar este sistema para ellos.
HopelessN00b
2
¿Puede explicar el contexto de por qué no es práctico hacer que instalen algo en su extremo para cargarlo directamente a S3 o configurar algo como AWS Storage Gateway? Si está cargando cientos de Terabytes, entonces seguramente pueden darse el lujo de pasar un poco de tiempo instalando un cliente S3 en un servidor con acceso directo a su almacenamiento.
thexacre

Respuestas:

10

Respondí esta misma pregunta en Stack Overflow .

s3fs es de hecho una solución razonable, y en mi caso, lo he combinado con proftpd con excelentes resultados, a pesar de los problemas teóricos / potenciales.

En el momento en que escribí la respuesta, solo había configurado esto para uno de mis clientes de consultoría ... pero desde entonces, también comencé a beber mi propio kool-aid y lo estoy usando en la producción en mi trabajo diario. Las empresas intercambiamos datos con archivos de carga y descarga durante todo el día en mi servidor sftp, que almacena todo directamente en S3. Como beneficio adicional, mi sistema de exportación de informes, que escribe hojas de cálculo de Excel directamente en S3, puede exportar informes "al servidor FTP" simplemente colocándolos directamente en el bucket del servidor ftp, con metadatos apropiados para mostrar el uid, gid y modo de cada archivo. (s3fs usa encabezados x-amz-meta-uid, -gid y -mode para emular los permisos del sistema de archivos). Cuando el cliente inicia sesión en el servidor, los archivos de informe están simplemente ... allí.

Creo que la solución ideal probablemente sería un sftp para el servicio de puerta de enlace S3, pero todavía no he podido diseñar uno, ya que esta solución funciona muy bien ... con algunas advertencias, por supuesto:

No todos los valores predeterminados para s3fs son sanos. Probablemente desee especificar estas opciones:

-o enable_noobj_cache   # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5   # it's beyond me why this safety check is disabled by default

Probablemente sea mejor usar una región que no sea US-Standard, porque esa es la única región que no ofrece consistencia de lectura después de escritura en objetos nuevos. (O, si necesita usar US-Standard, puede usar el nombre your-bucket.s3-external-1.amazonaws.comde host casi indocumentado de la región us-east-1 para evitar que sus solicitudes se enruten geográficamente, lo que puede mejorar la coherencia).

Tengo habilitado el control de versiones de objetos en el bucket, del cual s3fs no es completamente consciente. El beneficio de esto es que incluso si un archivo debe ser "pisoteado", siempre puedo ir a versiones de cubos para recuperar el archivo "sobrescrito". El control de versiones de objetos en S3 se diseñó brillantemente de tal manera que los clientes de S3 que desconocen el control de versiones no están deshabilitados ni confundidos de ninguna manera, porque si no realiza llamadas REST con reconocimiento de versiones, las respuestas que S3 devuelve son compatibles con clientes que tienen sin concepto de versionado.

Tenga en cuenta también que la transferencia de datos a S3 está libre de cargos por transferencia de datos. Solo paga el precio por solicitud. La transferencia de datos desde S3 a EC2 dentro de una región también está libre de cargos de transferencia de datos. Solo cuando realiza una transferencia desde S3 a Internet, a Cloudfront o a otra región de AWS, paga los cargos de transferencia. Si desea utilizar el almacenamiento de redundancia reducida de menor precio, s3fs lo admite con -o use_rrs.

Como un comentario divertido, siempre tendrá una sensación cálida y borrosa cuando vea los 256 terabytes de espacio libre (y 0 usado, ya que un cálculo real de los tamaños no es práctico debido al hecho de que S3 es un almacén de objetos, no un sistema de archivos )

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.4G  6.2G  18% /
s3fs            256T     0  256T   0% /srv/s3fs/example-bucket

Por supuesto, puedes montar el cubo en cualquier lugar. Simplemente lo tengo en / srv / s3fs.

Michael - sqlbot
fuente
Aunque no responde a la pregunta que realmente se hizo, si tuviera varios terabytes de datos que quisiera cargar en S3, el recientemente anunciado Amazon Import / Export Snowball sería lo que lanzaría al cliente con fuerza para la carga de datos inicial . Una SAN de 50 TB se envió a su puerta, cárguela, vuélvala a comprar, Amazon carga los datos, a un precio muy inferior al ancho de banda para transferir los datos.
Michael - sqlbot
¿Tiene alguna experiencia ejecutando una GUI basada en web además de esta configuración de FTP? En caso afirmativo, ¿qué ha funcionado o ha sido problemático?
T. Brian Jones
@ T.BrianJones, mi inclinación suele ser evitar las GUI, ya que prefiero el comportamiento claro y obvio que suelen ofrecer los archivos de configuración editables manualmente. Para mis configuraciones, tengo un script personalizado llamado setupftpuserque llama a la ftpasswdutilidad ProFTPd para crear usuarios, crear directorios de inicio y establecer permisos. También realiza una copia de seguridad del archivo de contraseña antes de realizar cambios. Si se llama a un usuario existente, le informa que el usuario ya está aprovisionado y le pregunta si desea cambiar la contraseña. Una GUI que maneja esencialmente el mismo proceso, y debería estar bien si está bien escrita.
Michael - sqlbot
5

Eche un vistazo a SFTP Gateway en AWS Marketplace .

Experimentamos problemas de confiabilidad con s3fs, por lo que desarrollamos una solución personalizada específicamente para este propósito. Lo hemos estado utilizando en producción durante varios años sin problemas y recientemente lo lanzamos al AWS Marketplace.

Jeff
fuente
tenga en cuenta que esto es unidireccional (la carga en sftp almacena el archivo en s3, pero el archivo ya no se puede descargar desde el sftp). Además, poner archivos en s3 no los hace disponibles a través de sftp.
Vincent De Smet el
Solo para aclarar ... SFTP Gateway también tiene un directorio de "descarga" que se sincroniza desde S3 hasta el servidor sftp. Al mantener las cargas y descargas separadas, usted, como administrador, tiene control total sobre lo que las personas pueden cargar y descargar.
Jeff
¿Es esta una característica recién agregada? Ciertamente no existía cuando este comentario fue publicado hace casi un año
Vincent De Smet
Sí, fue una característica agregada después de esta publicación original. Lo mantenemos activamente y seguimos agregando nuevas características como soporte de cifrado del lado del servidor y descargas compartidas.
Jeff
1

Hay dos opciones Puede usar un servicio SFTP administrado nativo agregado recientemente por Amazon (que es más fácil de configurar). O puede montar el depósito en un sistema de archivos en un servidor Linux y acceder a los archivos usando SFTP como cualquier otro archivo en el servidor (lo que le da un mayor control).

Servicio SFTP gestionado

  • En su consola Amazon AWS, vaya a AWS Transfer for SFTP y cree un nuevo servidor.

  • En la página del servidor SFTP, agregue un nuevo usuario (o usuarios) de SFTP.

    • Los permisos de los usuarios se rigen por un rol de AWS asociado en el servicio IAM (para comenzar rápidamente, puede usar la política AmazonS3FullAccess ).

    • El rol debe tener una relación de confianza con transfer.amazonaws.com.

Para obtener más información, consulte mi guía Configuración de un acceso SFTP a Amazon S3 .

Montaje de cubo a servidor Linux

Como @Michael ya respondió , simplemente monte el depósito utilizando el s3fssistema de archivos (o similar) en un servidor Linux (Amazon EC2) y use el servidor SFTP incorporado del servidor para acceder al depósito.

Aquí hay instrucciones básicas:

  • Instala el s3fs
  • Agregue sus credenciales de seguridad en un formulario access-key-id:secret-access-keya la/etc/passwd-s3fs
  • Agregue una entrada de montaje de cubeta a fstab:

    <bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0
    

Para obtener más información, consulte mi guía Configuración de un acceso SFTP a Amazon S3 .

Usar cliente S3

O utilice cualquier "cliente FTP / SFTP" gratuito , que también es un "cliente S3" , y no ha configurado nada en el lado del servidor. Por ejemplo, mi WinSCP o Cyberduck .

Martin Prikryl
fuente
0

AWS ahora proporciona un servicio SFTP sobre S3 llamado AWS Transfer For SFTP . Tiene los beneficios de S3 (almacenamiento distribuido, altamente duradero, disponible) combinado con el conocido y establecido protocolo SFTP.

De manera predeterminada, los usuarios se autentican usando pares de claves privadas / públicas, y usando las políticas de IAM puede configurar permisos para usuarios de SFTP en cubos S3. Puede agregar esquemas de autenticación implementando su propia funcionalidad en AWS API Gateway y AWS Lambda.

Hemos incluido AWS Transfer for SFTP en un complemento de Heroku llamado SFTP To Go para proporcionar esquemas de autenticación flexibles y un TCO más bajo (como punto final del servicio tiene un costo fijo en AWS, pero muchos usuarios pueden compartirlo sin ningún tipo de seguridad o compromiso de rendimiento.

SNeumann
fuente