我可以使用AWS IAM / Cognito拥有动态的特定于用户的权限吗?

DJS*_*nny 5 amazon-s3 amazon-web-services amazon-dynamodb amazon-cognito

我正在尝试几乎完全在AWS服务之上开发应用程序架构。

此应用程序同时具有User和Organization“实体”。作为一个可能除外,一个User可能是admin,role-x或role-y一个或多个组织。(role-x并且role-y只是具有某些特定权限集的某个角色的占位符。A User也可以是独立的(即,在任何角色上均没有角色Organization)。

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

一个admin组织将能够编辑所有组织领域,而role-x可能只能在阅读所有其他字段更新“使命宣言”。

由于我提到单个用户可能在许多不同的组织中都拥有角色,因此看起来可能像这样:

user1:
    organizations:
        123: 'admin'
        456: 'role-x'
        789: 'admin'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

(如果需要以特定的方式更新策略定义Identities(例如Organization),是否可以通过编程方式可靠地做到这一点-还是不建议这样动态地修改策略?)

小智 1

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

\n\n

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

\n\n

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

\n