如何设置由S3(或类似版本)支持的SFTP服务器


8

我需要设置一个本质上具有很大容量的SFTP服务器。我需要向我们的合作伙伴之一提供SFTP登录详细信息到服务器,他们将在其中上传数百万个文件,总计数百TB。然后,我将有选择性,很少读取这些文件。这是唯一的实际要求,任何技术选择都可以争夺。

最简单的方法是让某种EC2实例运行SFTP服务器,以便将上传的任何内容直接发送到S3,或者某种过程在上传时发现新文件,然后将其复制到S3,并将其从磁盘中删除。

这是最好的方法吗?是否有其他方法可以使服务器实质上具有“无限且神奇地增长的磁盘空间”?

谢谢你的帮助!丹尼尔


3
S3上的100 TB数据传输将使您花费近5,000美元。您的“合作伙伴”色情片的价值可能远不止于此。
HopelessN00b 2015年

2
code.google.com/p/s3fs可能是您最好的选择。除了转移成本@ HopelessN00b指出,同样的100 TB存储成本为每月$ 3k。
ceejayoz

2
感谢您的建设性评论@ HopelessN00b。对于可能不愿意回答该想法的任何人……我们已经进行了数学计算,是的,传输和持有大量信息将使我们花费大量金钱。对于我们的业务来说,拥有数据(绝对不是色情)是值得的。
Daniel Magliola

1
好了,所以你的问题是...?如何在AWS实例上安装SFTP?如何编写脚本删除文件?什么?别太客气了,但您会认为一家公司每月要为这“数百” TB数据花费数万美元,便会愿意聘请顾问来为他们建立这个系统。
HopelessN00b

2
您能解释一下为什么让他们要么末端安装一些东西直接将其上传到S3或设置诸如AWS Storage Gateway这样的东西是不切实际的吗?如果您要加载数百 TB的数据,那么他们肯定可以花一些时间在可以直接访问其存储的服务器上安装S3客户端。
thexacre 2015年

Answers:


10

在Stack Overflow上回答了同样的问题

s3fs确实是一个合理的解决方案,尽管存在理论/潜在的问题,但就我而言,我将其与proftpd结合使用均获得了出色的效果。

在我写答案的时候,我只是为我的一位咨询客户设置的……但是从那时起,我也开始喝自己的酷儿辅助用品,并在日常工作中使用它。我们公司全天都在我的sftp服务器上与上载和下载文件交换数据,该服务器将所有内容直接存储在S3上。另外,我的报告导出系统-将excel电子表格直接写到S3-只需将报告直接放入ftp服务器的存储桶中,并使用适当的元数据显示uid,gid和,即可将报告“导出到FTP服务器”。每个文件的模式。(s3fs使用x-amz-meta-uid,-gid和-mode标头来模拟文件系统权限)。当客户端登录到服务器时,报告文件就在...那里。

我确实认为理想的解决方案可能是从SFTP到S3网关的服务,但是我仍然没有去设计一个解决方案,因为该解决方案确实很好用……当然,有一些警告:

并非s3fs的所有默认值都是正常的。您可能需要指定以下选项:

-o enable_noobj_cache   # s3fs has a huge performance hit for large directories without this enabled
-o stat_cache_expire=30 # the ideal time will vary according to your usage
-o enable_content_md5   # it's beyond me why this safety check is disabled by default

最好使用除US-Standard之外的区域,因为这是唯一不对新对象提供写后读取一致性的区域。(或者,如果需要使用美国标准,则可以使用your-bucket.s3-external-1.amazonaws.comus-east-1区域中几乎未记录的主机名,以防止对请求进行地理位置路由,这可以提高一致性。)

我在存储桶上启用了对象版本控制,而s3fs完全不知道。这样的好处是,即使文件应该被“踩踏”,我也总是可以进入存储桶版本控制来恢复“被覆盖”的文件。S3中的对象版本控制经过精妙的设计,使得不会意识到或不了解版本控制的S3客户端不会被禁用或感到困惑,因为如果您不进行支持版本控制的REST调用,则S3返回的响应将与具有以下功能的客户端兼容没有版本控制的概念。

还要注意,将数据传输 S3中无需支付数据传输费用。您只需支付每个请求的价格。将数据从S3传输到区域内的EC2也不收取数据传输费用。仅当您从S3转移到Internet,Cloudfront或另一个AWS区域时,您才需要支付转移费用。如果要使用价格较低的减少冗余存储,则s3fs支持该功能-o use_rrs

有趣的是,当您看到256 TB的可用空间时(总是使用0,因为这样实际上无法计算大小是因为S3是对象存储而不是文件系统,因此您总是会感到温暖的模糊感) )。

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  1.4G  6.2G  18% /
s3fs            256T     0  256T   0% /srv/s3fs/example-bucket

当然,您可以将铲斗安装在任何地方。我刚好在/ srv / s3fs中拥有它。


虽然它没有回答竟是问,如果我有多个数据TB的,我想加载到S3的问题,最近公布的亚马逊导入/导出雪球会是什么,我想球场客户端硬盘的初始数据加载。一个50 TB的SAN运到他们家门口,装上它,再买回来,Amazon装上数据,价格远低于传输数据的带宽。
Michael-sqlbot

您是否有在此FTP设置之上运行基于Web的GUI的经验?如果是,什么有效或存在问题?
T. Brian Jones

@ T.BrianJones我倾向于避免使用GUI,因为我更喜欢手动可编辑的配置文件通常提供的清晰明显的行为。对于我的设置,我有一个自定义脚本setupftpuser,该脚本调用ProFTPd的ftpasswd实用程序来创建用户,创建主目录和设置权限。它还会在进行更改之前备份密码文件。如果在现有用户上调用,它将告知您该用户已被配置,并询问您是否要更改密码。一个GUI,它基本上管理相同的过程,如果编写得当,应该没问题。
Michael-sqlbot

5

在AWS Marketplace上签SFTP网关

s3fs遇到了可靠性问题,因此我们专门为此目的开发了定制解决方案。我们已经在生产中使用它好几年了,没有任何问题,并且最近已将其发布到AWS Marketplace。


请注意,这是单向的(将文件上传到sftp会将文件存储到s3,但是无法再从sftp下载该文件)。同样,将文件放入s3并不能使它们通过sftp可用。
文森特·德·斯梅特

只是为了澄清... SFTP网关确实也有一个“下载”目录,该目录从S3向下同步到sftp服务器。通过将上传和下载分开,您作为管理员可以完全控制人们可以上传和下载的内容。
杰夫

这是新增功能吗?大约一年前发布此评论时,当然不存在
Vincent De Smet

是的,这是此原始帖子之后添加的功能。我们正在积极维护它,并继续添加新功能,例如服务器端加密支持和共享下载。
杰夫

1

有两种选择。您可以使用Amazon最近添加的本机托管SFTP服务(此设置更容易设置)。或者,您可以将存储桶安装到Linux服务器上的文件系统中,并使用SFTP来访问文件,就像服务器上的其他文件一样(可以提供更大的控制权)。

托管SFTP服务

  • 在您的Amazon AWS控制台中,转到AWS Transfer for SFTP并创建一个新服务器。

  • 在“ SFTP服务器”页面中,添加一个或多个新的SFTP用户。

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

    • 该角色必须与拥有信任关系transfer.amazonaws.com

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

将存储桶挂载到Linux服务器

正如@Michael已经回答的那样,只需使用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客户端”),并且您无需在服务器端进行任何设置。例如,我的 WinSCPCyber​​duck


0

AWS现在提供称为SWS的AWS Transfer的S3P SFTP服务。它具有S3(高度耐用,可用,分布式存储)与众所周知且已建立的SFTP协议相结合的优势。

默认情况下,用户使用私钥/公钥对进行身份验证,并使用IAM策略可以为S3存储桶上的SFTP用户设置权限。您可以通过在AWS API Gateway和AWS Lambda上实现自己的功能来添加身份验证方案。

我们在一个名为SFTP To Go的Heroku插件中包装了适用于SFTP的AWS Transfer,以提供灵活的身份验证方案和较低的TCO(因为服务端点在AWS上的费用是固定的,但许多用户可以共享而没有任何安全性或性能妥协。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.