我有一个表允许用户(通过Cognito进行身份验证)阅读&只编写自己的记录,由IAM策略启用,如下所示:
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"${cognito-identity.amazonaws.com:sub}"
]
}
}
我正在设计我的数据结构,需要知道DynamoDB如何在扫描操作的上下文中应用此范围。
执行扫描时,DynamoDB会先将用户范围应用于表(因此扫描的唯一文档将是用户的文档),还是扫描会占用整个表格,然后将策略应用于范围记录?
这个问题的含义是扫描效率如何 - 如果要扫描整个表格,那么操作将非常昂贵,但是如果只有用户自己的记录(表格的一小部分)正在扫描,然后扫描可能是可接受的效率。
答案 0 :(得分:0)
设计应用程序以使用Query而不是Scans的最佳做法。扫描很昂贵,按照定义扫描整个表格。根据{{3}}:
如果可能,应避免在大型表上使用扫描操作 或使用过滤器删除许多结果的索引
您提出的正是这种情况。请考虑重新设计以避免这种情况。
IAM安全部门将负责阻止编辑其他用户数据,但对于单个用户,扫描将需要从扫描中删除其他用户文件,并且费用昂贵。