使用AWS S3作为SFTP的替代方案

3
大家好,我在EC2实例上设置了一个SFTP服务器,以接收需要发送3个文件的远程客户端的文件,客户端每天多次连接,每次传输3个文件,这些文件保持原名但内容不同。如果同时连接的客户太多,这种方法就无法控制,我担心会出现瓶颈,因此一直在寻找其他解决方案(某种类型的“分布式文件传输”)。这时我发现AWS S3是分布式的,于是想知道是否可以像下面这样做:
1. 创建名为“incoming-files”的存储桶。 2. 在该存储桶中创建多个文件夹,一个文件夹对应一个客户。 3. 设置文件传输机制(我认为必须使用S3的SDK)。 4. 为每个客户提供客户端应用程序,以便他们可以将文件上传到其特定文件夹中。
在SFTP上,最后一点很容易,因为您可以为每个用户设置“根”文件夹,这样当用户连接到服务器时,它会自动落在适当的文件夹中。不确定在S3上是否可以解决这类问题。此外,文件传输机制不仅需要提供访问存储桶的凭据,还需要提供访问文件夹的“子凭据”。
我一直在研究S3,但无法确定这个想法是否可行和实用。我原始的SFTP解决方案的另一个限制是,按定义,SFTP服务器是单点故障,我很高兴避免这种情况。如果有人能为此提供一些帮助,我将非常感激(顺便说一下,其他解决方案也可以)。
请注意,我正在尝试完全消除SFTP服务器,而不是将S3存储桶挂载为SFTP服务器的“根文件夹”。
谢谢。

2
可能是FTP/SFTP访问Amazon S3 Bucket的重复问题。 - Hackerman
1
你好,黑客大侠。这并不是一个重复的问题,因为我并不是试图将S3存储桶挂载为sftp服务器的根文件夹。我正在尝试完全消除sftp服务器,即让用户直接将文件上传到存储桶内的S3“文件夹”中。谢谢! - Marcio Buss
您好。如果您觉得其中一个选项符合您的需求,请选择答案。 - rumdrums
3个回答

1
您可以创建一个S3策略,仅授予对某个前缀(即您计划中的“文件夹”)的访问权限。您的客户所需的唯一权限是执行PUT请求的权限。对于每个客户,您还需要创建一组访问密钥。
看起来您过于复杂化了。如果SFTP是瓶颈且不冗余,您可以始终创建一个规模组(带有ELB或DNS循环负载均衡),并使用sshfsgoofys将S3挂载到EC2实例上。如果这里没有成本问题,甚至可以将EFS作为NFS共享挂载。

谢谢Sergey。正如我在对rumdrums的评论中提到的那样,我正在尽一切努力将未来的维护开销以及整个环境的设置时间最小化。我还需要一些机制来在文件到达时处理传入的文件,我相信这是S3模型固有的功能(我目前正在监听文件系统并调用存储过程将传入的文件导入数据库,这也存在同时进行的文件系统事件数量限制)。 - Marcio Buss
如果你的客户足够聪明,能够使用S3 API或AWS CLI工具,那么使用S3 + Lambda进行处理是最好的选择。但是,如果你需要为他们创建定制的软件,那么绝对不会是一个无需维护的解决方案。在这种情况下,我会将S3挂载为文件系统以进行上传,并创建S3事件来触发Lambda函数。由于需要自动处理且不想观察文件系统事件,EFS也不是个好选择。 - Sergey Kovalev

1
AWS有一个示例配置在这里,看起来很适合您的需求。
我认为您考虑使用s3代替传统的SFTP设置是正确的。如果您选择服务器方案,我同意Sergey的答案--一组由共享EFS存储支持的自动缩放服务器。当然,您必须拥有这些服务器的维护权,这可能取决于您的专业知识和愿望。
然而,一个纯s3解决方案几乎肯定会更便宜,并且需要更少的长期维护。

谢谢rumdrums。你说得对,如果我能找到一种长期减少维护的解决方案,那将是非常可取的(因为缺乏专业知识和时间)。此外,因为我需要在csv文件到达时处理它(今天通过监听文件系统并导入到数据库来完成)。使用S3解决方案,我相信我可以触发SQS事件并运行Data Pipeline或甚至lambda函数来处理文件。你有没有遇到过任何客户端应用程序,我可以快速适应并提供给用户?谢谢! - Marcio Buss
如果你的客户相当技术,我认为他们会很高兴使用aws cli或可用的SDK自动化自己的流程,并且只需要你提供的一组API密钥即可启用。虽然我不确定,但我相信有免费提供连接到s3的SFTP客户端。此外,我不知道其中一个,但我在github上看到过提供纯客户端Web界面以上传到s3的项目--你可以“轻松”(多少有点)使用这样的项目并使用支持Web的s3存储桶进行服务。 - rumdrums
同意上述内容。为每个客户创建一个IAM用户,仅允许上传到Amazon S3存储桶中特定路径的权限。让他们使用AWS命令行界面(CLI)上传文件--给他们运行脚本的权限。您可以使用aws s3 sync将本地目录中的文件自动同步到S3存储桶中。如果您要扩展到数十个用户,则应用程序可以使用AWS安全令牌服务生成临时凭据,而不是创建单独的IAM用户。 - John Rotenstein

0

现在,AWS Transfer 家族中有一个 AWS 托管的 SFTP 服务。

https://aws.amazon.com/blogs/aws/new-aws-transfer-for-sftp-fully-managed-sftp-service-for-amazon-s3/

今天我们推出了 AWS Transfer for SFTP,这是一个完全托管、高可用的 SFTP 服务。您只需创建一个服务器,设置用户帐户,并将服务器与一个或多个 Amazon Simple Storage Service (S3) 存储桶相关联。您可以对用户身份、权限和密钥进行细粒度控制。您可以在 Transfer for SFTP 中创建用户,也可以利用现有的身份提供者。您还可以使用 IAM 策略来控制每个用户被授予的访问级别。您还可以利用现有的 DNS 名称和 SSH 公钥,轻松迁移到 Transfer for SFTP。您的客户和合作伙伴将继续按照惯例连接并进行传输,而不需要更改其现有的工作流程。

1
在开始使用之前,请检查价格! - Saif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接