amazon-web-services - 克服 S3 中的 1000 个存储桶限制/使用接入点
问题描述
每个客户我有 1 个 s3 存储桶。客户是外部实体,他们不与其他任何人共享数据。我写入 S3,客户从 S3 读取。根据这个架构,我只能扩展到 1000 个存储桶,因为每个账户有 s3 存储桶的限制。我希望使用 AP 为每个客户创建 1 个 AP 并将数据放入一个存储桶中。然后客户可以使用 AP 从存储桶中读取文件。
Bucket000001/prefix01 . -> customeraccount1
Bucket000001/prefix02 . -> customeraccount2
...
S3 访问点要求您在访问点和存储桶级别为 IAM 用户设置策略。如果我有 1000 个 IAM 用户,我是否需要为存储桶中的每个用户设置策略?这将导致一项巨大的政策。存储桶中有最大策略大小,所以我可能无法做到这一点。这是接入点可以提供帮助的正确用例吗?
解决方案
推荐的方法是:
- 不要将 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 上的示例:
推荐阅读
- sql-server - 如何通过 SQL Server 插入的索引有效地替换长字符串?
- javascript - 如何使用 javascript 或 jquery post 方法从循环中发送变量并使用 php 接收
- r - 如何在 gitbook 风格的 bookdown 中使用 gitbook 插件
- macos - macOS Catalina 内核调试
- matlab - 行向量的连续数字之和并将它们存储在该位置
- python - 为什么当我设置 while var != 0 时循环不会在 0 计数处中断
- reactjs - 承诺链接不返回预期结果
- haskell - 用于 Haskell Stack 项目的 gitlab-CI:如何缓存构建的库?
- r - 从剪贴板复制并转换为逗号分隔的字符串
- r - 如何使三个相似类型的不同条形图聚集在同一个图中?