我可以使用 AWS IAM / Cognito 获得动态用户特定权限吗?

Posted

技术标签:

【中文标题】我可以使用 AWS IAM / Cognito 获得动态用户特定权限吗?【英文标题】:Can I have dynamic User specific permissions using AWS IAM / Cognito? 【发布时间】:2016-04-25 09:34:58 【问题描述】:

我正在尝试开发一种几乎完全基于 AWS 服务的应用程序架构。

此应用程序同时具有 UserOrganization“实体”。除此以外,User 可能是一个或多个组织的adminrole-xrole-y。 (role-xrole-y 只是具有某些特定权限集的某些角色的占位符。User 也可能是独立的(也就是说,在任何 Organization 上都没有角色)。

我们目前的想法是使用 DynamoDB 来存储组织和用户特定的数据。对于用户而言,这可能包括一些基本信息(地址、电话号码等),对于组织而言,它可能包括“使命宣言”、“公司地址”等字段。

组织的admin 将能够编辑所有组织字段,而role-x 可能只能在读取所有其他字段时更新“使命声明”。

由于我提到单个用户可能在许多不同的组织中担任角色,因此可能类似于:

user1:
    organizations:
        123: 'admin'
        456: 'role-x'
        789: 'admin'

还值得注意的是,这些角色分配是可修改的。可以邀请新用户或现有用户担任组织的特定角色,并且组织可以从角色中删除用户。

这是一种相当简单的布局类型,但我想非常清楚用户、组织和角色的多对多性质。

我一直在阅读 IAM 和 Cognito 文档,以及它与对 DynamoDB 项目或 S3 存储桶的细粒度控制之间的关系 - 但许多示例关注的是单个用户访问他们自己的数据,而不是多个 -对多角色风格的布局。

如何在 AWS 上实施这种权限系统?

(如果需要使用特定的 Identities 更新策略定义(例如,对于 Organization),这是否可以通过编程方式可靠地完成 - 或者像这样即时修改策略是不明智的?)

【问题讨论】:

【参考方案1】:

上面的答案已经过时了。 AWS 最近添加了 Cognito-Groups。这提供了更大的灵活性

您可以使用文章中描述的技术来实现: https://aws.amazon.com/blogs/aws/new-amazon-cognito-groups-and-fine-grained-role-based-access-control-2/

【讨论】:

【参考方案2】:

不幸的是,目前 Cognito 无法实现您尝试实施的那种权限系统。使用 Cognito,您目前可以在身份池中为您的用户创建唯一身份。用户可以使用任何外部提供商进行身份验证,例如 Facebook、Amazon、Google、Twitter/Digits 或任何 OpenId Connect 提供商。用户还可以通过您自己的后端身份验证过程进行身份验证。用户进行身份验证后,Cognito 会为该用户创建一个唯一身份。有一个身份的概念,但没有群体的概念。一个身份池中的所有用户/身份都可以从与该身份池关联的角色中获取凭据。目前您可以指定两种角色:一种用于已验证身份的角色,另一种用于未验证身份的角色。目前没有这样的功能,您可以为每个身份指定多个组并在该组中指定角色。

关于 Cognito 的更多信息,可以参考

https://aws.amazon.com/cognito/faqs/ http://docs.aws.amazon.com/cognito/devguide/getting-started/

【讨论】:

我认为 Cognito 身份可以分配或与 IAM 角色相关联,不是吗?如果是这样,那么可以为每个组织的不同访问级别创建角色,然后将这些角色与 Cognito 身份相关联。我想这取决于一个身份能够担任多个角色,但我不确定这是否允许/可能。 你最终解决了这个问题吗?由于 Cognito 不允许多个经过身份验证的角色,我正在考虑为每个角色设置 1 个身份池。这种方法似乎不太具有可扩展性,但如果您只有两个角色(例如用户和管理员),它可能没问题。

以上是关于我可以使用 AWS IAM / Cognito 获得动态用户特定权限吗?的主要内容,如果未能解决你的问题,请参考以下文章

iOS AWS AppSync 401 IAM + Cognito

有啥方法可以限制 IAM 用户/假定角色在 AWS cognito 中启用未经身份验证的用户身份?

AWS Lambda 无法调用 Cognito Identity - IAM 角色

已通过身份验证的 Cognito 用户访问 DynamoDB 表的 AWS IAM 策略问题

尽管获得了完全许可,但 aws iam 用户访问被拒绝

如何找出 AWS IAM 策略中实际设置为“$ ... ”的内容?