IAM 策略条件中的 cognito 用户池自定义属性与 Dynamodb 细粒度访问
Posted
技术标签:
【中文标题】IAM 策略条件中的 cognito 用户池自定义属性与 Dynamodb 细粒度访问【英文标题】:cognito user pool custom attribute in IAM Policy Conditions with Dynamodb Fine grained access 【发布时间】:2017-09-16 20:15:12 【问题描述】:我有一个带有自定义属性 organization_id 的 Cognito 用户池。 一个组织可能有多个用户。可以有多个组织。 另一个 Dynamodb 表用于维护具有 _id 和 organization_id 作为分区键的类别。 类别可以归组织所有,因此属于该特定组织的用户只能在这些类别中执行某些操作。
现在,我如何创建 IAM 策略,以便它采用组织 ID 而不是 sub/user_id,如此处所述http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html
"Version": "2012-10-17",
"Statement": [
"Sid": "AllowAccessToOnlyItemsMatchingUserID",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/GameScores"
],
"Condition":
"ForAllValues:StringEquals":
"dynamodb:LeadingKeys": [
"$cognito:organisation_id(?)"
],
"dynamodb:Attributes": [
"UserId",
"GameTitle",
"Wins",
"Losses",
"TopScore",
"TopScoreDateTime"
]
,
"StringEqualsIfExists":
"dynamodb:Select": "SPECIFIC_ATTRIBUTES"
]
所以我的主要要求是通过 cognito 获取 IAM 策略中的自定义用户池属性。这怎么可能?
【问题讨论】:
你是如何解决这个问题的?? 不能...我为自己的自定义解决方案离开了 API 网关 【参考方案1】:这是不可能的。它需要 IAM 角色能够从任何认知用户池中识别自定义属性。不过,这是一个有趣的功能,将与团队讨论。
但是,作为替代方案,您可以查看 Cognito 身份和角色库访问控制
http://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html
【讨论】:
有什么更新吗?目前似乎不可能满足@dan 的要求。通过 cognito 组和组特定角色的硬限制为 25。通过自定义属性和基于规则的角色分配的软限制为 25。这两个限制都表明,对于 1000 甚至 10000 个组织/范围内的事物,这两种方法都不可行组。 @SebastianAnnies +1 添加此功能,但是现在每个用户池最多可以有 10,000 个组。似乎仍然是一个相当大的功能疏忽,有效地使 Cognito 仅适用于 1:1 租户与用户池关联。 @Vasileios Lekakis 对该功能 +1。是不是意味着除了用户池之外,我们还需要引入身份池? aws.amazon.com/about-aws/whats-new/2021/01/… 不确定此公告是否包括来自 Congito 用户池的用户。此外,控制台确实包含从属性到主体标签的映射。这是否意味着它实际上是受支持的?【参考方案2】:有一些支持,但据我所知,并不完全符合您的需要。
我的用例与你的非常相似,但我仍然找不到解决方案。
但是,在一定程度上支持将池属性用作细粒度授权。阅读https://docs.aws.amazon.com/cognito/latest/developerguide/attributes-for-access-control.html
我已经能够使用 一些 标准 Cognito 使用池属性(例如 given_name
等),但对于我的生活,我无法获得 custom:
属性工作。我还在 AWS 支持论坛上发布了一些问题和 cmets,并且得到了零回复。
也许软糖是使用标准属性之一。然而,这远非理想。
【讨论】:
从这里开始,我实际上发现您可以使用“自定义:”属性。但是,对于可以在属性值中包含的字符有一些限制。我不知道限制的程度,因为我无法在任何地方找到此文档,但我发现如果您想要使用的任何用户属性的值中包含“#”字符,那么一切都会中断IAM 政策。以上是关于IAM 策略条件中的 cognito 用户池自定义属性与 Dynamodb 细粒度访问的主要内容,如果未能解决你的问题,请参考以下文章
基于 Cognito ID 的 S3 文件夹访问的 IAM 策略