有没有办法通过FTP或SFTP连接到Amazon S3存储桶,而不是AWS控制台中的内置Amazon文件传输接口?似乎很奇怪,这不是一个随时可用的选择。
答案 0 :(得分:74)
有三种选择。
在您的亚马逊AWS控制台中,转到AWS Transfer for SFTP并创建新服务器。
在SFTP服务器页面中,添加新的SFTP用户(或多个用户)。
用户权限由IAM服务中的关联AWS角色管理(为了快速入门,您可以使用 AmazonS3FullAccess 策略)。
该角色必须与transfer.amazonaws.com
建立信任关系。
有关详细信息,请参阅我的指南Setting up an SFTP access to Amazon S3。
只需使用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
有关详细信息,请参阅我的指南Setting up an SFTP access to Amazon S3。
或者使用任何免费的“FTP / SFTP客户端”,这也是“S3客户端”,并且您没有在服务器端设置任何内容。例如,我的 WinSCP或Cyberduck。
如果您需要自动转移,WinSCP甚至有scripting和.NET / PowerShell interface。
答案 1 :(得分:61)
更新
S3现在提供了一个与IAM集成的fully-managed SFTP Gateway Service for S3,可以使用aws-cli进行管理。
理论和实践上有理由说明为什么这不是一个完美的解决方案,但确实有效......
您可以在Linux服务器上安装FTP / SFTP服务(例如proftpd),无论是在EC2中还是在您自己的数据中心中...然后将存储桶装入ftp服务器配置为chroot的文件系统中,使用s3fs
我有一个客户端从S3提供内容,内容由第三方提供给他们,第三方只支持ftp推送...所以,有些犹豫(由于S3和实际文件系统之间的阻抗不匹配) )但是没有时间编写一个正确的FTP / S3网关服务器软件包(我仍然打算做其中一天),我几个月前为他们提出并部署了这个解决方案,他们没有报告系统有任何问题
作为奖励,因为proftpd可以将每个用户chroot到他们自己的主目录中并且“假装”(就用户所知)proftpd用户拥有的文件实际上是由登录用户拥有的,这将每个用户分开ftp用户进入存储桶的“子目录”,并使其他用户的文件无法访问。
默认配置存在问题。
一旦你开始获得几十个或几百个文件,当你拉一个目录列表时,问题就会出现,因为ProFTPd将尝试重复读取.ftpaccess
个文件,一遍又一遍,并且对于目录中的每个文件,检查.ftpaccess
以查看是否允许用户查看它。
您可以在ProFTPd中禁用此行为,但我建议最正确的配置是在s3fs中配置其他选项-o enable_noobj_cache -o stat_cache_expire=30
:
-o stat_cache_expire
(默认为无效)为stat cache
中的条目指定过期时间(秒)
如果没有此选项,您将减少对S3的请求,但如果外部进程或s3fs的其他实例也在修改存储桶中的对象,您也无法始终可靠地发现对对象所做的更改。我的系统中的值“30”有点随意选择。
-o enable_noobj_cache
(默认为禁用)为不存在的对象启用缓存条目。当s3fs执行某些命令时,s3fs总是必须检查对象(路径)下是否存在文件(或子目录),因为s3fs已经识别出一个不存在的目录,并且在其自身下面有文件或子目录。它增加了ListBucket请求并使性能变差。您可以为性能指定此选项,s3fs会在stat缓存中记住对象(文件或目录)不存在。
此选项允许s3fs记住.ftpaccess
不存在。
与ProFTPd可能出现的性能问题无关,这些问题由上述更改解决,您还需要在s3fs中启用-o enable_content_md5
。
-o enable_content_md5
(默认为禁用)使用content-md5标头验证上传的数据,而无需多部分。允许在上传没有多部分发布的对象时发送“Content-MD5”标头。如果启用此选项,则在上载小对象时会对s3fs的性能产生一些影响。因为s3fs在上传大对象时总是检查MD5,所以此选项不会影响大对象。
这是一个永远不应该是一个选项的选项 - 它应该始终启用,因为不这样做会绕过关键完整性检查,只能获得可忽略的性能优势。当使用Content-MD5:
标头将对象上载到S3时,S3将验证校验和,如果对象在传输过程中损坏,则拒绝该对象。无论如何不太可能,禁用此安全检查似乎是短视的。
引用来自s3fs的手册页。语法错误在原文中。
答案 2 :(得分:20)
嗯,S3不是FTP。但是,有很多客户支持S3。
OS X上的每个着名的FTP客户端都支持Transmit和Cyberduck。
如果您使用的是Windows,请查看Cyberduck或CloudBerry。
答案 3 :(得分:7)
或者在您的AWS基础架构中为SFTP Gateway旋转Linux实例,将上传的文件保存到您的Amazon S3存储桶。
由Thorntech支持
答案 4 :(得分:3)
Filezilla刚刚发布了他们的FTP客户端Pro version。它以简化的FTP体验连接到S3存储桶。我自己使用它(没有任何隶属关系)并且效果很好。
答案 5 :(得分:1)
WinSCp now supports S3 protocol
首先,确保具有S3访问权限的AWS用户已创建“访问密钥ID”。您还必须知道“秘密访问密钥”。在IAM管理控制台的“用户”页面上创建和管理访问密钥。
确保已选择“新站点”节点。
在“新站点”节点上,选择Amazon S3协议。
输入您的AWS用户访问密钥ID和秘密访问密钥
使用“保存”按钮保存您的站点设置。
使用“登录”按钮登录。
答案 6 :(得分:1)
正如其他张贴者所指出的那样,AWS Transfer for SFTP服务存在一些限制。您需要紧密协调需求。例如,没有配额,白名单/黑名单,文件类型限制,并且基于非密钥的访问需要外部服务。与用户管理和IAM有关的开销也很大,这可能会带来很大的麻烦。
我们为客户运行SFTP S3 Proxy Gateway已有5年了。核心解决方案包含在一系列Docker服务中,并且可以部署在所需的任何环境中,甚至包括本地或本地开发服务器。我们的用例有些不同,因为我们的解决方案着重于数据处理和流水线而不是文件共享。在Salesforce示例中,客户将使用SFTP作为传输方法,将电子邮件,购买...数据发送到SFTP / S3代理。这已在S3上映射了一个对象键。到达后,将对数据进行拾取,处理,路由并将其加载到仓库。对于每次传输,我们也有相当重要的审核要求,这是Cloudwatch记录的AWS日志未直接提供的内容。
就像其他人提到的那样,也可以选择自己滚动。使用AWS Lightsail,您可以使用Route 53或ELB设置一个集群,例如10个2GB实例的4个集群。
通常,很高兴看到AWS提供此服务,并且我希望它会随着时间的推移而成熟。但是,根据您的用例,替代解决方案可能更合适。
答案 7 :(得分:0)
Amazon已为S3发布了SFTP服务,但它们仅支持SFTP(不支持FTP或FTPES),并且视您的情况而定,其价格可能过高。
我是RAD Studio Demo Code的创始人,我们为您的S3存储桶提供FTP / S网关,而无需启动服务器或担心基础架构。
还有其他公司提供按月付费的独立FTP服务器,可以通过软件配置连接到S3存储桶,例如DocEvent.io。
最近还有brickftp.com可以提供帮助的某些AWS Marketplace应用。许多这样的实例在您自己的基础结构中旋转-这意味着您必须自己管理和升级实例,随着时间的推移,这些实例可能难以维护和配置。