FTP/SFTP访问Amazon S3存储桶

 黑天天 发布于 2023-01-12 16:01

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

4 个回答
  • 有三种选择.您可以使用Amazon最近添加的本机托管SFTP服务(更容易设置).或者,您可以将存储桶安装到Linux服务器上的文件系统中,并使用SFTP作为服务器上的任何其他文件访问这些文件(这可以提供更好的控制).或者您可以使用本机支持S3协议(免费)的(GUI)客户端.

    托管SFTP服务

    在您的Amazon AWS Console中,转至AWS Transfer for SFTP并创建新服务器.

    在SFTP服务器页面中,添加新的SFTP用户(或多个用户).

    用户权限由IAM服务中的关联AWS角色控制(为了快速入门,您可以使用AmazonS3FullAccess策略).

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

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

    将存储桶安装到Linux服务器

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

    安装 s3fs

    将表单中的安全凭据添加access-key-id:secret-access-key/etc/passwd-s3fs

    添加桶安装条目到fstab:

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

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

    使用S3客户端

    或者使用任何免费的"FTP/SFTP客户端",这也是"S3客户端",并且您没有在服务器端设置任何内容.例如,我的 WinSCP或Cyber​​duck.

    2023-01-12 16:02 回答
  • 更新

    S3现在为S3提供了一个完全托管的SFTP网关服务,它与IAM集成,可以使用aws-cli进行管理.


    有理由和实际的理由说明这不是一个完美的解决方案,但确实有效......

    您可以在Linux服务器上安装FTP/SFTP服务(如proftpd的),无论是在EC2或您自己的数据中心......然后装入桶到其中的FTP服务器配置为chroot环境,使用文件系统s3fs.

    我有一个服务于S3内容的客户端,内容由第三方提供给他们,第三方只支持ftp推送......所以,有些犹豫(由于S3与实际文件系统之间的阻抗不匹配)但缺乏是时候编写一个合适的FTP/S3网关服务器软件包(我现在打算做其中一天),我几个月前为他们提出并部署了这个解决方案,他们没有报告系统有任何问题.

    作为奖励,因为proftpd可以将每个用户chroot到他们自己的主目录中并且"假装"(就用户所知)proftpd用户拥有的文件实际上由登录用户拥有,这将每个ftp用户分成存储桶的"子目录",并使其他用户的文件无法访问.


    但是,默认配置存在问题.

    一旦你开始获得几十或几百个文件,当你拉一个目录列表时问题就会出现,因为ProFTPd会尝试一遍.ftpaccess又一遍地读取文件,并且对于目录中的每个文件,.ftpaccess检查是否允许用户查看它.

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

    -o stat_cache_expire (默认为无效)

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

    如果没有此选项,您将减少对S3的请求,但如果外部进程或s3fs的其他实例也在修改存储桶中的对象,您也无法始终可靠地发现对对象所做的更改.我的系统中的值"30"有点随意选择.

    -o enable_noobj_cache (默认为禁用)

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

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


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

    -o enable_content_md5 (默认为禁用)

    通过content-md5标头验证上传数据而不使用multipart.允许在上传没有多部分发布的对象时发送"Content-MD5"标头.如果启用此选项,则在上载小对象时会对s3fs的性能产生一些影响.因为s3fs在上传大对象时总是检查MD5,所以此选项不会影响大对象.

    这是一个永远不应该是一个选项的选项 - 它应该始终启用,因为不这样做会绕过关键的完整性检查,只能获得可忽略的性能优势.当使用Content-MD5:标题将对象上载到S3时,S3将验证校验和,如果对象在传输过程中损坏,则拒绝该对象.尽管不太可能,但禁用此安全检查似乎是短视的.

    引用来自s3fs的手册页.语法错误在原始文本中.

    2023-01-12 16:02 回答
  • 好吧,S3不是FTP.但是,有很多客户端支持S3.

    几乎所有OS X上值得注意的FTP客户端都支持,包括Transmit和Cyber​​duck.

    如果您使用的是Windows,请查看Cyber​​duck或CloudBerry.

    2023-01-12 16:02 回答
  • 或者在AWS基础架构中为SFTP Gateway旋转Linux实例,将上传的文件保存到Amazon S3存储桶.

    由Thorntech提供支持

    2023-01-12 16:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有