扫描 IAM 范围的 DynamoDB 表

问题描述 投票:0回答:2

我有一个表,允许用户(通过 Cognito 进行身份验证)仅读取和写入自己的记录,由 IAM 策略启用,如下所示:

"Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": [
                        "${cognito-identity.amazonaws.com:sub}"
                    ]
                 }
             }

我正在设计数据结构,需要了解 DynamoDB 如何在扫描操作的上下文中应用此范围界定。

进行扫描时,DynamoDB 是否会首先将用户范围应用于表(因此扫描的唯一文档将是用户的文档),还是扫描会消耗整个表,然后应用策略来确定记录范围?

这个问题的含义是扫描的效率如何 - 如果要扫描整个表那么操作将非常昂贵,但是如果只扫描用户自己的记录(表的一小部分)那么扫描可能会效率可以接受。

amazon-web-services amazon-dynamodb amazon-cognito amazon-iam
2个回答
0
投票

设计应用程序时使用查询而不是扫描的最佳实践。扫描的成本很高,并且根据定义扫描整个表。根据 Dynamodb 扫描和查询最佳实践文档

如果可能,您应该避免在大表上使用 Scan 操作 或带有删除许多结果的过滤器的索引

您所提出的正是这种情况。请考虑重新设计以避免这种情况。

IAM 安全部分将完成防止编辑其他用户数据的工作,但对于单个用户,扫描将需要从扫描中删除其他用户文件,并且成本高昂。


0
投票

无论主键如何,扫描都会返回所有项目,您将无法使用 IAM 策略来基于授权进行过滤。

如示例 1 中所述:授予限制对具有特定分区键值的项目的访问权限AWS 文档

操作列表不包含扫描权限,因为扫描 无论主键如何,都会返回所有项目。

© www.soinside.com 2019 - 2024. All rights reserved.