ruby-on-rails - 在Rails Multi-Tenancy 应用程序中寻找有关Amazon S3存储桶设置和管理的建议

标签 ruby-on-rails amazon-web-services amazon-s3

每个租户都有自己的照片库,这些照片库将照片存储在Amazon S3上。看到S3对我来说相对较新,我正在寻找有关如何管理存储区,IAM组/用户,安全性,使用情况报告以及可能的计费方面的一些建议和最佳实践。

我看到的方式是我有两个选择。

选项1:
一个主桶。每个租户都有一个存储其照片的子目录。我将为整个应用程序分配一个IAM组,并为每个租户创建一个新的IAM用户,并且只能访问其子目录。将来,如果我想知道租户正在使用多少S3空间,是否易于报告?我是否要为每个租户都拥有一个唯一的AWS访问 key 和私钥,即使他们要使用相同的存储桶?

选项2:
每个租户都有自己的存储桶。每个租户都将拥有自己的IAM用户,并且只能访问其存储桶。此选项是否更适合于报告使用情况?

常见问题:

  • 这两种选择是否都有主要缺点?
  • 还有我不知道的另一种选择吗?
  • 我可以通过IAM用户的事件报告存储情况吗?
    在桶水平?
  • 最佳答案

    我认为您正在尝试将S3帐户转变为多用户帐户,事实并非如此。

    Each tenant gets their own bucket



    您是limited to 100 buckets,所以这可能不是您想要的。 (除非它是一个非常专有的Web服务:)

    One master bucket



    好的

    IAM user for each tenant



    嗯,我认为IAM用户也有限制。

    if I want to know how much S3 space a tenant is using will it be easy to report on?



    您可以编写脚本很容易。

    billing



    您可以使用DevPay buckets,在这种情况下,每个用户可以拥有100个存储桶。但这要求每个用户注册AWS以及其他复杂性。

    Can I report on storage via an IAM user's activity or does it happen at the bucket level?



    仅在“入口”处检查IAM。在那之后,这全都是“您的帐户”。因此,文件没有不同的“所有者”。

    Is there another option I'm unaware of?



    通常的方法是拥有控制安全性的瘦EC2服务:
  • 您编写了一个Web应用程序并在EC2上运行它。它知道如何验证您的用户。
  • 当用户要上传时,他们可以将其POST到EC2(然后复制到S3,并且可能无论如何都要调整其大小)。或者,您生成一个签名的POST/PUT URL,供浏览器直接上传到S3中(一旦了解,就非常容易做到。)
  • 当用户想要查看文件时,他们会点击您的服务以获得一个签名的URL,该URL允许他们访问其文件。但是访问会在一段时间后超时。可以,因为他们仅通过您的EC2网页访问文件。

  • 结果是您的EC2框可能很小,因为它只是为浏览器创建URL。

    关于ruby-on-rails - 在Rails Multi-Tenancy 应用程序中寻找有关Amazon S3存储桶设置和管理的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22106165/

    相关文章:

    javascript - 如何使用 Cognito 身份池和 Amplify 连接到 AWS AppSync

    amazon-web-services - VPN 客户端在 AWS 中解析私有(private) DNS 主机名

    ruby-on-rails - 如何删除重音等拉丁字符?

    amazon-web-services - AWS - 回滚/重新创建 DELETE_COMPLETE 云形成堆栈

    amazon-web-services - 在 s3 存储桶中使用 'folders' 有什么好处吗?

    amazon-web-services - 自动从 S3 中删除旧备份并每月移动到冰川

    apache-spark - Amazon EMR 和 S3,org.apache.spark.sql.AnalysisException : path s3://. .../var/table 已存在

    ruby-on-rails - 我应该使用什么样的数据模型来存储历史数据?

    mysql - 在事务外释放 mysql 锁 (rails)

    ruby-on-rails - Phusion乘客 :Why passenger still kills rails process after set passenger_min_instances = 1?