【问题标题】:Using AWS S3 as an alternative to SFTP使用 AWS S3 作为 SFTP 的替代方案
【发布时间】:2017-05-11 21:33:22
【问题描述】:

各位, 我在 EC2 实例上设置了一个 SFTP 服务器,以接收来自远程客户的文件,这些文件需要每天发送 3 个文件(每个客户每天连接多次,每次传输 3 个保留其名称的文件,但更改其内容)。如果同时连接的客户数量受到控制,这可以正常工作,但是我无法准确控制每个客户何时连接(他们已经自动完成了连接过程)。我预计如果太多人尝试同时上传文件,我可能会遇到瓶颈,并且一直在寻找整个过程的替代方案(某种“分布式文件传输”)。就在那时,我偶然发现了按定义分发的 AWS S3,我想知道我是否可以执行以下操作:

  • 创建一个名为“incoming-files”的存储桶
  • 在此存储桶中创建多个文件夹,每个客户一个文件夹
  • 设置文件传输机制(我相信我必须以某种方式使用 S3 的 SDK)
  • 为每个客户提供一个客户端应用程序,以便他们可以在他们身边运行它来将文件上传到存储桶内的特定文件夹中

最后一点在 SFTP 上很容易,因为您可以为每个用户设置一个“根”文件夹,这样当用户连接到服务器时,它会自动登陆相应的文件夹。不确定是否可以在 S3 上解决此类问题。此外,文件传输机制不仅必须提供访问存储桶的凭据,还必须提供访问文件夹的“子凭据”。

我一直在研究 S3,但不能完全弄清楚整个想法是否 (a) 可行且 (b) 实用。我最初的 SFTP 解决方案的另一个限制是,根据定义,SFTP 服务器是单点故障,我很乐意避免这种情况。如果有人能对此有所了解,我会很高兴(顺便说一句,也欢迎其他解决方案)。

请注意,我正在尝试完全消除 SFTP 服务器,而不是将 S3 存储桶安装为 SFTP 服务器的“根文件夹”。

谢谢

【问题讨论】:

  • 哈克曼你好。从这个意义上说,这不是一个重复的问题,因为我没有尝试将 S3 存储桶挂载为 sftp 服务器的根文件夹。我试图完全消除 sftp 服务器,即让用户将文件直接上传到存储桶内的 S3“文件夹”中。谢谢!
  • 嗨。如果您认为其中一个满足您的需求,请选择问题的答案。

标签: amazon-web-services amazon-s3 sftp file-transfer


【解决方案1】:

您可以创建一个 S3 策略,仅授予对特定前缀(计划中的“文件夹”)的访问权限。您的客户唯一需要的是执行 PUT 请求的权限。您还需要为每个客户创建一组访问密钥。

看来您过于复杂了。如果 SFTP 是一个瓶颈并且不是冗余的,您始终可以创建一个扩展组(在其前面使用 ELB 或 DNS 循环)并使用sshfsgoofys 将 S3 挂载到 EC2 实例。如果这里成本不是问题,您甚至可以将 EFS 挂载为 NFS 共享。

【讨论】:

  • 谢谢谢尔盖。正如我在 cmets 中提到的那样,我正在不惜一切代价尽量减少未来的维护开销以及设置整个环境的时间。我还需要一些机制来处理到达时传入的文件,我认为这是 S3 模型固有的东西(我目前正在监听文件系统并在数据库上调用存储过程来导入传入文件,这也有限制同时发生的文件系统事件数)。
  • 如果您的客户足够聪明,可以使用 S3 API 或 AWS CLI 工具,那么 S3 + Lambda 进行处理是不错的选择。但是,如果您需要为他们创建自定义软件,那绝对不是免维护的解决方案。在这种情况下,我会将 S3 挂载为文件系统,用于上传和创建可触发 Lambda 函数的 S3 事件。由于需要自动处理并且您不想监视文件系统事件,因此 EFS 是不可能的。
【解决方案2】:

AWS 有一个示例配置 here,它似乎可以很好地满足您的需求。

我认为您绝对正确地考虑使用 s3 而不是传统的 SFTP 设置。如果您确实采用基于服务器的方法,我同意 Sergey 的回答 - 由共享 EFS 存储支持的自动缩放服务器组。当然,您必须自己维护这些服务器,这可能是也可能不是问题,具体取决于您的专业知识和这样做的愿望。

然而,从长远来看,纯 s3 解决方案几乎肯定会更便宜并且需要更少的维护。

【讨论】:

  • 感谢朗姆鼓。你是对的,如果我能找到一个从长远来看最大限度地减少维护的解决方案,那将是非常可取的(由于缺乏专业知识并且没有时间这样做)。还因为我需要在到达时处理传入的 csv 文件(我今天通过监听文件系统并导入数据库来完成)。使用 S3 解决方案,我相信我可以触发 SQS 事件并运行,例如,数据管道甚至是处理文件的 lambda 函数。您是否偶然发现了我可以快速适应并提供给用户的任何客户端应用程序?谢了!
  • 如果您的客户技术水平很高,我认为他们会很乐意使用 aws cli 或其中一个可用的 SDK 来自动化他们自己的流程,并且他们只需要您提供的一组 API 密钥为了实现这一点。虽然我不确定,但我相信有免费的 SFTP 客户端支持连接到 s3。另外,我不知道有什么副手,但我在 github 上看到了提供纯客户端 Web 界面用于上传到 s3 的项目——您可以“轻松”(给予或接受)使用这样的项目并提供服务使用支持网络的 s3 存储桶。
  • 同意上述。为每个客户创建一个 IAM 用户,其权限只能上传到 Amazon S3 存储桶中的特定路径。让他们使用AWS Command-Line Interface (CLI) 上传文件——给他们一个脚本来运行它。您可以使用aws s3 sync 自动将文件从本地目录同步到 S3 存储桶。如果您要扩展到数十个用户,那么您的应用程序可以使用 AWS 安全令牌服务生成临时凭证,而不是创建单独的 IAM 用户。
【解决方案3】:

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。您的客户和合作伙伴将继续像往常一样连接并进行转移,而不会更改他们现有的工作流程。

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 2015-08-11
    • 2021-04-18
    • 2015-09-12
    • 2020-07-18
    • 2019-09-25
    • 1970-01-01
    • 2020-08-07
    • 2010-10-21
    相关资源
    最近更新 更多