将S3存储桶直接安装到EC2实例中是否安全?


8

就像我的问题的标题所说,我想知道这是否是一种好习惯,

我知道我可以在EC2实例中挂载它,但是我想知道是否(因为我将添加更多实例来扩展我的应用程序)这是否会引起一些问题?你对此有一些经验吗?

我正在使用S3允许通过PHP脚本上传文件,所以基本上的问题是:

使用Mouting是一种好习惯还是有更好的方法来处理用户文件上传?

提前致谢


1
您计划使用什么软件来安装S3存储桶?您的应用程序将如何使用已安装的存储桶?您如何定义“安全”?
埃里克·哈蒙德

Answers:


14

如果您使用S3来存储用户上传的数据,尤其是在分布式环境中,则一个重要的考虑因素是S3最终“一致”(尽管某些区域在写后读方面是一致的)。这样的结果是您可以成功上传文件,但是如果此后立即检查其是否存在,可能会发现该文件不存在。对于诸如更新或删除之类的方案,此问题尤为明显,在这种情况下,即使写后读取一致性也无济于事。

无论采用哪种方法,以上内容都将适用于您上传到S3的内容。实际上,对于S3可能遇到的大多数问题,这都是正确的-与其说是存储数据的方法,还不如说是S3的局限性,这可能是最成问题的。

S3fs使用S3 API,就像PHP(或其他)SDK一样。此外,S3旨在处理相当高的并发程度-因此(除了一致性问题外)在多个实例上安装它应该没有问题(请记住,它不是传统的文件系统-诸如锁定,等在S3端处理)。

也就是说,每种实现都有一些潜在的优点和缺点:

S3fs:

  • 不支持部分/批量下载(据我所知)-因此,您必须下载完整文件才能读取其中的任何部分-如果仅使用它来存储(和提供)上传内容,则可能不是问题。
  • 用C ++编写可能会提高性能
  • 您的应用程序将从s3fs的任何更新中受益
  • 实现缓存(完整的文件和文件信息)-可能会稍微提高速度并降低成本
  • 仅限于保险丝暴露的功能

SDK:

  • 展示S3必须提供的全部功能-根据您的用例,这可能足以使SDK值得使用
  • 可能与您的应用程序更紧密地集成-返回的错误等可能使您的应用程序做出更明智的(因此更精确的)选择
  • 任何可能的优点都需要进行编码-您的应用程序必须利用它们,并在将来对S3进行更改时保持最新
  • 代码的更多复杂性和开销

在“安全性”方面,您可能意味着“防止数据损坏”或“防止未经授权的访问”。关于前者,SDK可能有助于处理最终的一致性(以更多冗长的错误的形式),但是底层存储是相同的,我希望两者之间的差异很小。关于访问控制-您可以使用IAM创建一个受限帐户,但是该帐户仍需要对您的S3文件具有读/写访问权限。两者都应具有足够的安全性,无论哪种情况,都需要妥协您的系统才能访问S3存储桶-但是,我建议使用S3fs(因为凭据通常存储在webroot外部,并且根本无法通过进行访问) PHP)的安全性稍好一些。

个人意见:对于只有一个上载目录(例如,一个使用该目录的站点)并且访问相当简单(只需要上载文件并偶尔进行更新/删除)的情况,我更喜欢s3fs。如果您需要更复杂的访问权限(例如部分下载,多个存储桶等),或者将S3 SDK用于其他目的,那么我也将坚持使用SDK进行上传。



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.