首页 > 解决方案 > 克服 S3 中的 1000 个存储桶限制/使用接入点

问题描述

每个客户我有 1 个 s3 存储桶。客户是外部实体,他们不与其他任何人共享数据。我写入 S3,客户从 S3 读取。根据这个架构,我只能扩展到 1000 个存储桶,因为每个账户有 s3 存储桶的限制。我希望使用 AP 为每个客户创建 1 个 AP 并将数据放入一个存储桶中。然后客户可以使用 AP 从存储桶中读取文件。

Bucket000001/prefix01 . -> customeraccount1

Bucket000001/prefix02 . -> customeraccount2 ...

S3 访问点要求您在访问点和存储桶级别为 IAM 用户设置策略。如果我有 1000 个 IAM 用户,我是否需要为存储桶中的每个用户设置策略?这将导致一项巨大的政策。存储桶中有最大策略大小,所以我可能无法做到这一点。这是接入点可以提供帮助的正确用例吗?

标签: amazon-web-servicesamazon-s3

解决方案


推荐的方法是:

  • 不要将 IAM 用户分配给您的客户。这些类型的 AWS 凭证只能由您的内部员工和您自己的应用程序使用。
  • 您应该提供一个 Web 应用程序(或 API),客户可以在其中针对您自己的用户数据库进行身份验证(或者您可以使用 Amazon Cognito 来管理身份验证)。
  • 通过身份验证后,应用程序应授予对Web 界面的访问权限以访问 Amazon S3,或者应用程序应提供用于访问 Amazon S3 的临时凭证(下面有更多详细信息)。
  • 不要为每位客户使用一个桶。这是不可扩展的。相反,将所有客户数据存储在 ONE bucket中,每个用户都有自己的文件夹。您可以在 Amazon S3 中存储的数据量没有限制。这也使您更容易管理和维护,因为更容易跨所有内容执行功能,而不必进入单独的存储桶。(如果您希望按客户位置(地区)或客户类型对存储桶进行细分,则可能是一个例外。但不要每个客户使用一个存储桶。没有理由这样做。)
  • 在授予对 Amazon S3 的访问权限时,在文件夹级别分配权限以确保客户只能看到自己的数据。

选项 1:通过 Web 应用程序访问

如果您的客户通过 Web 应用程序访问 Amazon S3,那么您可以对该应用程序进行编码以在文件夹级别强制实施安全性。例如,当他们请求文件列表时,仅显示其文件夹中的文件。

这种安全性可以完全在您自己的代码中进行管理。

选项 2:通过临时凭证访问

如果您的客户使用编程访问(例如使用 AWS CLI 或在其系统上运行的自定义应用程序),那么:

  • 客户应该对您的应用程序进行身份验证(如何完成将取决于您对用户进行身份验证的方式)
  • 通过身份验证后,应用程序应使用AWS 安全令牌服务 (STS)生成临时凭证。在生成凭证时,授予对 Amazon S3 的访问权限,但在 ARN 中指定客户的文件夹(例如arn:aws:s3:::storage-bucket/customer1/*),以便他们只能访问文件夹中的内容。
  • 将这些临时凭证返回给客户。然后,他们可以使用这些凭证直接对 Amazon S3 进行 API 调用(例如,从AWS 命令​​行界面 (CLI)或自定义应用程序)。他们将被限制在自己的文件夹中。

这种方法通常用于移动应用程序。移动应用程序针对后端进行身份验证,接收临时凭证,然后使用这些凭证直接与 S3 交互。因此,后端应用程序仅用于身份验证。

YouTube 上的示例:


推荐阅读