【发布时间】:2021-03-09 17:01:24
【问题描述】:
TL;DR:我需要在 S3 中构建我的数据架构,以使我在 S3 存储桶配额范围内(截至 2020 年 11 月,默认情况下最大为 100 个存储桶),但同时限制对文件的访问为不同的组,并进一步限制子组之间的访问。是否有实现此目的的程序化解决方案?
我正在开发一款应用,需要根据组织身份/组/角色来限制对组织存储文件和内容的访问。但是,在该组织内,需要基于子组的进一步访问限制。下面举例说明。
所需用例
宠物用户都是宠物,只是宠物的种类不同。它们的品种进一步区分。我不希望猫能够访问任何其他宠物类型的文件,它们只能访问猫目录/存储桶。此外,特定于品种的文件夹应该只能由该品种的成员访问。
示例:虎斑猫可以访问Cats/ 和Cats/TabbyCats,但不能访问Dogs/ 或Cats/CalicoCats。
问题
在此示例中,宠物类型远远超过 100 种。因此,它们将超过 S3 中的 100 个存储桶配额。我认为每种宠物类型都有自己的桶是不可行的。报价可以增加到 1000,但这会产生额外的成本,并且对于我的应用程序而言仍然不能很好地扩展。
此外,截至 2020 年 11 月,Cognito 用户池被限制为 10,000 个组/用户池。虽然这看起来很多,但它并不适用于用例。以下是我想到的排列及其各自的问题(我省略了与已经提到的具有相同问题的排列过于相似的排列):
-
2 组,{宠物类型}/{宠物品种},带有 1 个桶/宠物类型 - 示例:
Dog、Weenie Dog组。Dog组授予对Dog/的访问权限,Weenie Dog授予对Dog/WeenieDog的访问权限,并附加了授予对各个存储桶/目录的访问权限的 IAM 角色。 这可能是可扩展性最低的排列。它将快速消耗组每个用户池配额以及存储桶配额。 -
1 个组,{Pet Breed},存储桶根据应用资源分类 - 示例:
Weenie Dog组授予对{Bucket}/Dog/和{Bucket}/Dog/WeenieDog的访问权限。 此解决方案修复了存储桶配额问题但不能解决 Cognito 用户组的可扩展性问题。
问题
如何向某些用户组授予对 S3 中不同存储桶或目录的编程访问权限?该解决方案不一定要特别涉及 Cognito 用户组/IAM,我对其他人开放,因为 Cognito 用户组/IAM 不能很好地扩展。是否有任何程序化解决方案?
咨询的其他资源
Restricting S3 resources based on a user's group - 非常适用于我的用例,但仍未解决
我在这里看到的其他问题尚未解决或已过时。
【问题讨论】:
-
您是否尝试过 IAM Role Policy 和 S3 Policy 中的语句条件
-
@MahdiRidho 我已经考虑过这一点,但不知道如何根据自定义 Cognito 属性创建条件。组和对象标签不能很好地适应我的预期用途。您对我如何使用这些有什么想法吗?
-
如果您为用户角色实现具有联合身份的 sdk,我可以回答并给出一个示例案例。我们将组从 cognito 用户池映射到身份池,然后将策略条件设置为前缀为 identity_group/identity_id -> ${cognito-identity.amazonaws.com:aud}/${cognito-identity.amazonaws.com:子}
标签: amazon-web-services amazon-s3 amazon-cognito