Answers:
有三个选项。
在您的Amazon AWS控制台中,转到AWS Transfer for SFTP并创建一个新服务器。
在“ SFTP服务器”页面中,添加一个或多个新的SFTP用户。
用户的权限由IAM服务中的关联AWS角色控制(要快速入门,您可以使用AmazonS3FullAccess策略)。
该角色必须与拥有信任关系transfer.amazonaws.com
。
有关详细信息,请参阅我的指南设置对Amazon S3的SFTP访问。
只需使用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访问。
或使用任何免费的“ FTP / SFTP客户端”(也是“ S3客户端”),并且您无需在服务器端进行任何设置。例如,我的 WinSCP或Cyberduck。
如果需要自动传输,WinSCP甚至具有脚本和.NET / PowerShell界面。
root
会带来以后的传输permission denied
问题ec2-user
。/mnt/<bucket>
文件夹归所有者所有,root
并具有该组root
。
allow_other
(或-o allow_other
从s3fs命令行安装)。在我的情况下(在专用存储桶上),以只读权限(-o default_acl = public-read)写入文件也是一个好主意。
更新资料
S3现在为S3提供了一个完全托管的SFTP网关服务,该服务与IAM集成,可以使用aws-cli进行管理。
从理论上和实践上来看,这都不是一个完美的解决方案,但是它确实起作用了。
您可以在Linux服务器上安装FTP / SFTP服务(如proftpd的),无论是在EC2或您自己的数据中心......然后装入桶到其中的FTP服务器配置为chroot环境,使用文件系统s3fs。
我有一个提供S3之外内容的客户端,而该内容是由仅支持ftp push的第三方提供给他们的...因此,有些犹豫(由于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
(默认为不过期)指定统计信息缓存中条目的到期时间(秒)
如果没有此选项,您对S3的请求将减少,但如果外部进程或s3fs的其他实例也在修改存储桶中的对象,您也将始终无法可靠地发现对对象所做的更改。我的系统中的值“ 30”是任意选择的。
-o enable_noobj_cache
(默认为禁用)为不存在的对象启用缓存条目。s3fs执行某些命令时,s3fs始终必须检查对象(路径)下是否存在文件(或子目录),因为s3fs识别出一个不存在的目录,并且该目录下有文件或子目录。它增加了ListBucket请求,并使性能变差。您可以指定此选项以提高性能,s3fs会在状态缓存中记住该对象(文件或目录)不存在。
此选项使s3fs可以记住该位置.ftpaccess
。
与上述更改解决的ProFTPd可能引起的性能问题无关,您还需要-o enable_content_md5
在s3fs中启用。
-o enable_content_md5
(默认为禁用)通过content-md5标头验证上传的数据而没有多部分。上载对象时启用发送“ Content-MD5”标头,而无需分段发布。如果启用此选项,则在上传小对象时会对s3fs的性能产生一些影响。由于s3fs在上载大对象时总是检查MD5,因此该选项对大对象不起作用。
这是一个本不应该成为选项的选项-应该始终启用它,因为不这样做就绕开了关键完整性检查,而对性能的好处却微不足道。当对象通过Content-MD5:
标头上传到S3时,S3将验证校验和,并在传输过程中损坏对象时将其拒绝。但是,不太可能,禁用此安全检查似乎是短视的。
引用来自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
-一旦创建了Mounted S3文件夹,就无法更改其权限。
从2014年开始回答那些不赞成我的人:
好吧,S3不是FTP。但是,有很多支持S3的客户端。
OS X上几乎每个著名的FTP客户端都支持,包括Transmit和Cyberduck。
如果您使用的是Windows,请查看Cyberduck或CloudBerry。
更新的2019年答案:
AWS最近发布了适用于SFTP的AWS Transfer,该服务可能会满足您的需求。
或在您的AWS基础架构中为SFTP Gateway旋转Linux实例,以将上传的文件保存到Amazon S3存储桶。
由Thorntech支持
首先,确保您的具有S3访问权限的AWS用户已创建“访问密钥ID”。您还必须知道“秘密访问密钥”。在IAM管理控制台的“用户”页面上创建和管理访问密钥。
确保选择了“新站点”节点。
在“新站点”节点上,选择Amazon S3协议。
输入您的AWS用户访问密钥ID和秘密访问密钥
使用“保存”按钮保存您的站点设置。
使用登录按钮登录。
亚马逊已经发布了针对S3的SFTP服务,但它们仅支持SFTP(不支持FTP或FTPES),根据您的情况,它们的成本可能很高。
我是DocEvent.io的创始人,我们为您的S3存储桶提供FTP / S网关,而无需启动服务器或担心基础架构。
还有其他公司提供按月付费的独立FTP服务器,可以通过软件配置连接到S3存储桶,例如brickftp.com。
最后,还有一些AWS Marketplace应用程序可以提供帮助,这是一个搜索链接。这些实例中的许多实例都在您自己的基础结构中-这意味着您必须自己管理和升级实例,随着时间的推移,这些实例可能难以维护和配置。
正如其他发布者所指出的那样,AWS Transfer for SFTP服务存在一些限制。您需要紧密协调需求。例如,没有配额,白名单/黑名单,文件类型限制,并且基于非密钥的访问需要外部服务。还有一些与用户管理和IAM相关的开销,这在规模上可能会很痛苦。
我们已经为客户运行SFTP S3代理网关已有5年了。核心解决方案包含在Docker服务的集合中,并且可以部署在所需的任何环境中,甚至包括本地或本地开发服务器。我们的用例有些不同,因为我们的解决方案着重于数据处理和流水线而不是文件共享。在Salesforce示例中,客户将使用SFTP作为传输方法,将电子邮件,购买...数据发送到SFTP / S3代理。这已在S3上映射了一个对象键。到达后,将对数据进行拾取,处理,路由并将其加载到仓库。对于每次传输,我们也有相当重要的审核要求,这是Cloudwatch的AWS日志未直接提供的内容。
正如其他人提到的那样,也可以选择自己滚动。使用AWS Lightsail,您可以使用Route 53或ELB设置一个集群,例如10个$ 2 2GB实例的集群。
总的来说,很高兴看到AWS提供此服务,而且我希望它会随着时间的推移逐渐成熟。但是,根据您的用例,替代解决方案可能更合适。