FTP / SFTP访问Amazon S3 Bucket

有没有办法通过FTP或SFTP连接到Amazon S3存储桶,而不是使用AWS控制台中的内置Amazon文件传输界面? 奇怪的是,这不是一个现成的select。

只需将s3fs文件系统(或类似文件)挂载到Linux服务器(例如Amazon EC2),然后使用服务器内置的SFTP服务器来访问存储桶。

  • 安装s3fs
  • 将您的安全证书以access-key-id:secret-access-key的forms添加到/etc/passwd-s3fs
  • 添加一个bucket挂载条目到fstab

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

有关详细信息,请参阅我的指南设置对Amazon S3的SFTP访问 。

有理论和实际的原因,为什么这不是一个完美的解决scheme,但它确实工作…

您可以在Linux服务器上安装FTP / SFTP服务(如proftpd),无论是在EC2还是在您自己的数据中心中……然后将一个存储桶装入ftp服务器configuration为使用s3fs进行chroot的文件系统。

我有一个服务于S3内容的客户端,并且由仅支持ftp的第三方提供给他们的内容…因此,有些犹豫(由于S3和实际文件系统之间的阻抗不匹配),但缺乏编写一个正确的FTP / S3网关服务器软件包的时候(我还打算做这些日子之一),我几个月前为他们提出并部署了这个解决scheme,他们没有报告任何与系统有关的问题。

作为奖励,由于proftpd可以将每个用户切换到他们自己的主目录,并“伪装”(就用户可以说),proftpd用户拥有的文件实际上由login用户拥有,这将每个ftp用户分隔存储桶的“子目录”,并使其他用户的文件不可访问。


但是,默认configuration有问题。

一旦你开始得到几十或几百个文件,当你拉出一个目录列表时,问题就会显现出来,因为ProFTPd会尝试读取.ftpaccess文件,并且重复读取.ftpaccess文件。目录中,检查.ftpaccess是否允许用户查看。

您可以在ProFTPd中禁用此行为,但我build议最正确的configuration是在-o enable_noobj_cache -o stat_cache_expire=30configuration其他选项-o enable_noobj_cache -o stat_cache_expire=30

-o stat_cache_expire (默认是无效的)

指定statcaching中条目的过期时间(秒)

如果没有这个选项,那么对S3的请求就会减less,但如果外部进程或其他s3fs实例也在修改存储桶中的对象,您也不会始终可靠地发现对对象所做的更改。 在我的系统中的值“30”被稍微任意select。

-o enable_noobj_cache (默认为禁用)

为不存在的对象启用caching条目。 当s3fs执行一些命令时,s3fs总是需要检查对象(path)下是否存在文件(或子目录),因为s3fs已经识别了一个不存在的目录,并且在其下有文件或子目录。 它增加了ListBucket请求并使性能变差。 你可以指定这个选项来提高性能,s3fs在statcaching中记住对象(文件或目录)不存在。

这个选项允许s3fs记住.ftpaccess不存在。


与ProFTPd可能出现的性能问题无关,通过上述更改解决了这些问题,还需要在-o enable_content_md5中启用-o enable_content_md5

-o enable_content_md5 (默认为禁用)

通过content-md5头部validation上传的数据而不用多部分。 上传没有分段发送的对象时,启用发送“Content-MD5”标题。 如果启用此选项,则在上传小对象时会影响s3fs的性能。 因为s3fs在上传大对象时总是检查MD5,所以这个选项不会影响大对象。

这是一个永远不应该有select的选项 – 应始终启用,因为不这样做会绕过一个关键的完整性检查,只有一个微不足道的性能优势。 当一个对象上传到带有Content-MD5:头的S3时,S3将validation校验和,并在传输中损坏的对象被拒绝。 然而,不太可能的是,这种安全检查似乎是短视的。

行情来自s3fs的手册页。 语法错误在原文中。

那么,S3不是FTP。 但是,有很多支持S3的客户端。

几乎每个在OS X上的着名FTP客户端都有支持,包括Transmit和Cyber​​duck 。

如果您在Windows上,请查看Cyber​​duck或CloudBerry 。

或者在您的AWS基础架构中将SFTP网关的 Linux实例旋转,以将上传的文件保存到您的Amazon S3存储桶。

在Thorntech的支持下

Filezilla刚刚发布了一个Pro版本的FTP客户端。 它通过精简的FTP体验连接到S3存储桶。 我自己使用它(无论从何而来),而且效果很好。