Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Amazon S3存储桶的FTP/SFTP访问_Ftp_Amazon S3_Sftp - Fatal编程技术网

对Amazon S3存储桶的FTP/SFTP访问

对Amazon S3存储桶的FTP/SFTP访问,ftp,amazon-s3,sftp,Ftp,Amazon S3,Sftp,有没有办法通过FTP或SFTP而不是AWS控制台中的内置Amazon文件传输接口连接到Amazon S3存储桶?奇怪的是,这不是一个现成的选择 2014年投票反对我的人的回答: S3不是FTP。然而,有很多客户机支持S3 OSX上几乎所有著名的FTP客户端都有支持,包括和 如果您在Windows上,请查看或 2019年更新答案: AWS最近发布了这项服务,它可以满足您的需求。更新 S3现在提供了与IAM集成并可使用aws cli进行管理的 这不是一个完美的解决方案,有理论和实践上的原因,但它确

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

2014年投票反对我的人的回答:

S3不是FTP。然而,有很多客户机支持S3

OSX上几乎所有著名的FTP客户端都有支持,包括和

如果您在Windows上,请查看或

2019年更新答案:


AWS最近发布了这项服务,它可以满足您的需求。

更新

S3现在提供了与IAM集成并可使用aws cli进行管理的


这不是一个完美的解决方案,有理论和实践上的原因,但它确实有效

您可以在linux服务器上安装FTP/SFTP服务(如proftpd),可以在EC2中,也可以在您自己的数据中心中。。。然后使用将一个bucket装入文件系统,其中ftp服务器配置为chroot

我有一个客户端,它提供S3以外的内容,内容由只支持ftp推送的第三方提供给他们。。。因此,我犹豫了一下(由于S3和实际文件系统之间的阻抗不匹配),但没有时间编写合适的FTP/S3网关服务器软件包(我仍打算在最近的某一天编写),几个月前我为他们提出并部署了此解决方案,他们没有报告系统存在任何问题

作为奖励,由于proftpd可以将每个用户chroot到他们自己的主目录中,并“假装”(据用户所知)proftpd用户拥有的文件实际上是登录用户拥有的,因此这将每个ftp用户隔离到bucket的“子目录”中,并使其他用户的文件无法访问


但是,默认配置有问题。

一旦您开始获取几十个或数百个文件,当您提取目录列表时,问题就会显现出来,因为ProFTPd将尝试一次又一次地读取
.ftpaccess
文件,并针对目录中的每个文件,检查
.ftpaccess
,查看是否允许用户查看它

您可以在ProFTPd中禁用此行为,但我建议最正确的配置是在s3fs中配置附加选项
-o enable\u noobj\u cache-o stat\u cache\u expire=30

-o stat\u cache\u expire
(默认值为no expire)

为stat缓存中的条目指定过期时间(秒)

如果没有此选项,您将减少对S3的请求,但如果外部进程或S3F的其他实例也在修改bucket中的对象,您也不会始终可靠地发现对对象所做的更改。我的系统中的值“30”是任意选择的

-o启用\u noobj\u缓存
(默认为禁用)

为不存在的对象启用缓存项。当s3fs执行某些命令时,s3fs始终必须检查对象(路径)下是否存在文件(或子目录),因为s3fs已经识别出一个不存在的目录,并且在其自身下有文件或子目录。它增加了ListBucket请求,使性能变差。您可以为性能指定此选项,s3fs会在stat缓存中记住对象(文件或目录)不存在

此选项允许s3fs记住
.ftpaccess
不存在


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

-o启用内容\u md5
(默认为禁用)

通过content-md5标头验证上载的数据,但不包含多部分。允许在上载对象时发送“Content-MD5”标题,而无需多部分过帐。如果启用此选项,则在上载小对象时会对s3fs的性能产生一些影响。因为s3fs在上传大对象时总是检查MD5,所以此选项不会影响大对象

这是一个永远都不应该成为选项的选项——它应该始终处于启用状态,因为不这样做会绕过关键的完整性检查,只会带来微不足道的性能好处。当使用
Content-MD5:
头将对象上载到S3时,S3将验证校验和,如果对象在传输过程中损坏,则拒绝该对象。无论这种可能性有多大,禁用此安全检查似乎是短视的


引用自s3fs的手册页。语法错误在原文中。

有三种选择

  • 您可以使用Amazon最近添加的本机托管SFTP服务(更容易设置)
  • 或者,您可以将bucket装载到Linux服务器上的文件系统,并使用SFTP访问这些文件,就像访问服务器上的任何其他文件一样(这使您能够更好地控制)
  • 或者,您可以只使用一个本机支持S3协议(免费)的(GUI)客户端

托管SFTP服务
  • 在Amazon AWS控制台中,转到并创建新服务器

  • 在SFTP服务器页面中,添加新的SFTP用户

    • 用户权限由IAM服务中关联的AWS角色管理(为了快速启动,您可以使用AmazonS3FullAccess策略)

    • 该角色必须与
      transfer.amazonaws.com
      具有信任关系

有关详细信息,请参阅我的指南


将Bucket装载到Linux服务器 只需使用
s3fs
文件系统(或类似系统)将bucket安装到Linux服务器(例如Amazon EC2),并使用服务器内置的SFTP服务器访问bucket即可

  • 访问密钥id:secret access key
    的形式将您的安全凭据添加到
    /etc
    
    <bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0