我可以使用 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 服务的应用程序架构。
此应用程序同时具有 User
和 Organization
“实体”。除此以外,User
可能是一个或多个组织的admin
、role-x
或role-y
。 (role-x
和 role-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 角色