Acceso FTP / SFTP a un bucket de Amazon S3 [cerrado]

146

¿Hay alguna manera de conectarse a un bucket de Amazon S3 con FTP o SFTP en lugar de la interfaz de transferencia de archivos de Amazon incorporada en la consola de AWS? Parece extraño que esta no sea una opción fácilmente disponible.

zgall1
fuente
2
AWS lanzado en noviembre de 2018 Servicio SFTP totalmente administrado que permite la transferencia de archivos directamente dentro y fuera de Amazon S3. Transferencia de AWS para SFTP
mitaka

Respuestas:

100

Hay tres 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 utilizando SFTP como cualquier otro archivo en el servidor (lo que le brinda un mayor control).
  • O simplemente puede usar un cliente (GUI) que admita de forma nativa el protocolo S3 (lo que es gratuito).

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

Simplemente monte el depósito utilizando s3fsel sistema de archivos (o similar) en un servidor Linux (por ejemplo, Amazon EC2) y use el servidor SFTP incorporado del servidor para acceder al depósito.

  • Instala el s3fs
  • Agregue sus credenciales de seguridad en un formulario access-key-id:secret-access-keypara/etc/passwd-s3fs
  • Agregue una entrada de montaje del cucharón 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 .

WinSCP tiene incluso secuencias de comandos e interfaz .NET / PowerShell , si necesita automatizar las transferencias.

Martin Prikryl
fuente
2
Tener el cucharón montado como rootda permission deniedproblemas de transferencia posteriores cuando se conecta a ec2-usertravés de SFTP. /mnt/<bucket>La carpeta es propiedad rooty tiene el grupo roottambién.
elvismdev
1
@elvismdev / others - Montar como usuario ftp (usando las opciones uid / gid) y asegúrese de que esté montado con allow_other(o -o allow_othersi lo hace desde la línea de comando s3fs) ... funciona para mí. También es una buena idea escribir los archivos como permisos de solo lectura (-o default_acl = public-read) en mi caso (en un depósito privado).
bshea
66

Actualizar

S3 ahora ofrece un servicio de puerta de enlace SFTP totalmente administrado para S3 que se integra con IAM y se puede administrar usando aws-cli.


Hay razones teóricas y prácticas por las que esta no es una solución perfecta, pero funciona ...

Puede instalar un servicio FTP / SFTP (como proftpd) en un servidor Linux, ya sea en EC2 o en su propio centro de datos ... luego monte un depósito en el sistema de archivos donde el servidor ftp está configurado para chroot, usando s3fs .

Tengo un cliente que sirve contenido de S3, y el contenido se lo proporciona un tercero que solo admite los empujes de ftp ... por lo tanto, con algunas dudas (debido a la falta de coincidencia de impedancia entre S3 y un sistema de archivos real) pero falta Al momento de escribir un paquete de software de servidor de puerta de enlace FTP / S3 adecuado (que todavía tengo la intención de hacer uno de estos días), propuse e implementé esta solución para ellos hace varios meses y no han informado de ningún problema con el sistema.

Como beneficio adicional, dado que proftpd puede agrupar a cada usuario en su propio directorio de inicio y "simular" (hasta donde el usuario lo sepa) que los archivos propiedad del usuario proftpd son propiedad del usuario conectado, esto segrega a cada usuario ftp en un "subdirectorio" del depósito y hace que los archivos de los demás usuarios sean inaccesibles.


Sin embargo, hay un problema con la configuración predeterminada.

Una vez que comience a obtener algunas decenas o cientos de archivos, el problema se manifestará cuando extraiga una lista del directorio, porque ProFTPd intentará leer los .ftpaccessarchivos una y otra vez, y para cada archivo en el directorio, .ftpaccessse verifica para ver si el usuario debería poder verlo.

Puede deshabilitar este comportamiento en ProFTPd, pero sugeriría que la configuración más correcta es configurar opciones adicionales -o enable_noobj_cache -o stat_cache_expire=30en s3fs:

-o stat_cache_expire (el valor predeterminado no caduca)

especificar el tiempo de caducidad (segundos) para las entradas en el caché de estadísticas

Sin esta opción, hará menos solicitudes a S3, pero tampoco siempre descubrirá de manera confiable los cambios realizados en los objetos si los procesos externos u otras instancias de s3fs también están modificando los objetos en el depósito. El valor "30" en mi sistema fue seleccionado de manera algo arbitraria.

-o enable_noobj_cache (el valor predeterminado es deshabilitar)

habilitar entradas de caché para el objeto que no existe. s3fs siempre tiene que verificar si el archivo (o subdirectorio) existe debajo del objeto (ruta) cuando s3fs ejecuta algún comando, ya que s3fs ha reconocido un directorio que no existe y tiene archivos o subdirectorios en sí mismo. Aumenta la solicitud de ListBucket y hace que el rendimiento sea malo. Puede especificar esta opción para el rendimiento, s3fs memoriza en el caché de estadísticas que el objeto (archivo o directorio) no existe.

Esta opción permite que s3fs recuerde que .ftpaccess no estaba allí.


Sin relación con los problemas de rendimiento que pueden surgir con ProFTPd, que se resuelven con los cambios anteriores, también debe habilitarlo -o enable_content_md5en s3fs.

-o enable_content_md5 (el valor predeterminado es deshabilitar)

verificar los datos cargados sin multiparte mediante el encabezado content-md5. Habilite el envío del encabezado "Content-MD5" al cargar un objeto sin publicación de varias partes. Si esta opción está habilitada, tiene algunas influencias en el rendimiento de s3fs al cargar objetos pequeños. Debido a que s3fs siempre verifica MD5 al cargar objetos grandes, esta opción no afecta a los objetos grandes.

Esta es una opción que nunca debería haber sido una opción, siempre debería estar habilitada, porque no hacer esto pasa por alto una comprobación de integridad crítica por solo un beneficio de rendimiento insignificante. Cuando un objeto se carga en S3 con unContent-MD5: encabezado, S3 validará la suma de verificación y rechazará el objeto si está dañado en tránsito. Por improbable que sea, parece miope deshabilitar esta verificación de seguridad.

Las citas son de la página de manual de s3fs. Los errores gramaticales están en el texto original.

Michael - sqlbot
fuente
44
¿Podría explicar las razones por las cuales esta solución no es ideal?
fernio
2
@MarcoMarsala las correcciones para directorios grandes se han agregado a la respuesta.
Michael - sqlbot
1
@ Michael-sqlbot, ¿ha intentado utilizar la directiva "AllowOverride off" en la configuración de ProFTPd para que deje de intentar leer completamente los archivos ".ftpaccess"?
Greg Dubicki
1
He intentado todo y solo puedo configurar user: group / permissions en el nivel de carpeta donde está montado el bucket S3. Luego, esos permisos se propagan a cada carpeta en S3. He intentado muchas cosas, incluidas muchas variaciones en este comando S3FS sudo s3fs bucket-name /local-mount-folder-name/ -o iam_role=sftp-server -o allow_other -o umask=022 -o uid=501 -o gid=501: no puedo cambiar ningún permiso en las carpetas de la carpeta S3 montada una vez que se ha creado.
T. Brian Jones
1
@Sverre Todavía uso esta solución en producción. No me da ningún problema.
Michael - sqlbot
24

Respuesta de 2014 para las personas que me votan negativamente:

Bueno, S3 no es FTP. Sin embargo, hay muchos clientes que admiten S3.

Casi todos los clientes FTP notables en OS X tienen soporte, incluidos Transmit y Cyberduck .

Si está en Windows, eche un vistazo a Cyberduck o CloudBerry .

Respuesta actualizada para 2019:

AWS lanzó recientemente el servicio AWS Transfer for SFTP , que puede hacer lo que está buscando.

Ryan Parman
fuente
2
Cyberduck funciona increíblemente fácil si eres un novato en el servidor como yo. Simplemente hice clic en Abrir conexión, seleccioné S3 del menú desplegable e ingresé mis credenciales. ¡Mucho más fácil que algunas de las opciones mencionadas anteriormente!
Marquizzo
7

O haga girar la instancia de Linux para SFTP Gateway en su infraestructura de AWS que guarda los archivos cargados en su bucket de Amazon S3.

Apoyado por Thorntech

mitaka
fuente
2
Hemos estado usando SFTP Gateway en producción para grandes proyectos durante varios años. Hemos encontrado que es más confiable que s3fs
Jeff
3

Filezilla acaba de lanzar una versión Pro de su cliente FTP. Se conecta a los cubos S3 en una experiencia simplificada como FTP. Lo uso yo mismo (sin afiliación alguna) y funciona muy bien.

petezurich
fuente
3

WinSCp ahora es compatible con el protocolo S3

Primero, asegúrese de que su usuario de AWS con permisos de acceso S3 tenga una "ID de clave de acceso" creada. También debe conocer la "clave de acceso secreta". Las claves de acceso se crean y administran en la página Usuarios de la Consola de administración de IAM.

Asegúrese de que esté seleccionado Nuevo nodo de sitio.

En el nodo Nuevo sitio, seleccione el protocolo Amazon S3.

Ingrese su ID de clave de acceso de usuario de AWS y clave de acceso secreta

Guarde la configuración de su sitio con el botón Guardar.

Inicie sesión con el botón Iniciar sesión.

Subrata Fouzdar
fuente
2

Amazon ha lanzado servicios SFTP para S3, pero solo hacen SFTP (no FTP o FTPES) y pueden tener un costo prohibitivo dependiendo de sus circunstancias.

Soy el fundador de DocEvent.io , y proporcionamos puertas FTP / S para su bucket S3 sin tener que activar servidores o preocuparse por la infraestructura.

También hay otras compañías que proporcionan un servidor FTP independiente que paga por mes que puede conectarse a un bucket S3 a través de la configuración del software, por ejemplo brickftp.com .

Por último, también hay algunas aplicaciones de AWS Marketplace que pueden ayudar, aquí hay un enlace de búsqueda . Muchas de estas instancias giratorias en su propia infraestructura, esto significa que tendrá que administrar y actualizar las instancias usted mismo, lo que puede ser difícil de mantener y configurar con el tiempo.

Mariusz
fuente
DocEvents se ve bien pero tiene demasiadas restricciones en el plan gratuito ... Ni siquiera pude probar el servicio ...
D.Dimitrioglo
1

Como otros carteles han señalado, existen algunas limitaciones con la transferencia de AWS para el servicio SFTP. Necesita alinear estrechamente los requisitos. Por ejemplo, no hay cuotas, listas blancas / listas negras, límites de tipo de archivo y el acceso no basado en claves requiere servicios externos. También hay una cierta sobrecarga relacionada con la administración de usuarios y el IAM, que puede llegar a ser una molestia a escala.

Hemos estado ejecutando un Gateway Proxy SFTP S3 durante aproximadamente 5 años para nuestros clientes. La solución central está envuelta en una colección de servicios de Docker e implementada en cualquier contexto que sea necesario, incluso en servidores de desarrollo locales o locales. El caso de uso para nosotros es un poco diferente, ya que nuestra solución se centra en el procesamiento de datos y las canalizaciones frente a un recurso compartido de archivos. En un ejemplo de Salesforce, un cliente utilizará SFTP como método de transporte para enviar correo electrónico, comprar ... datos a un punto SFTP / S3. Esto se asigna a una clave de objeto en S3. A su llegada, los datos se recogen, procesan, enrutan y cargan en un almacén. También tenemos requisitos de auditoría bastante significativos para cada transferencia, algo que los registros de Cloudwatch para AWS no proporcionan directamente.

Como otros han mencionado, rodar el tuyo también es una opción. Con AWS Lightsail puede configurar un clúster, digamos 4, de instancias de $ 10 2GB usando Route 53 o un ELB.

En general, es genial ver que AWS ofrece este servicio y espero que madure con el tiempo. Sin embargo, dependiendo de su caso de uso, las soluciones alternativas pueden ser más adecuadas.

Thomas Spicer
fuente