【发布时间】:2018-09-01 03:23:13
【问题描述】:
我的应用程序允许用户从浏览器直接访问 DynamoDB。他们可以查看和编辑他们知道分区键(UUID)的任何记录。
我的问题是用户可以通过“编辑”不存在的分区键来创建新记录。有没有办法使用 IAM 政策来防止这种情况发生?
【问题讨论】:
标签: amazon-dynamodb amazon-iam
我的应用程序允许用户从浏览器直接访问 DynamoDB。他们可以查看和编辑他们知道分区键(UUID)的任何记录。
我的问题是用户可以通过“编辑”不存在的分区键来创建新记录。有没有办法使用 IAM 政策来防止这种情况发生?
【问题讨论】:
标签: amazon-dynamodb amazon-iam
您需要使用 AWS Cognito 为您的 DynamoDB 表构建细粒度的访问控制。
您可以使用带有 Lambda 的代码来做到这一点,您需要在代码中编写所有的授权逻辑。
对细粒度授权的引用:
它还包括行级授权和表级授权,与 AWS Cognito 合并。
希望对你有帮助。
EDIT1:
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/api-permissions-reference.html
dynamodb:PutItem 将阻止用户更新 dynamodb 记录。
示例政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAccessToOnlyItemsMatchingUserID",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:UpdateItem"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/TableName"
]
}
]
}
提供创建 IAM 策略以阻止用户创建新记录的所有权限参考。
有条件更新:
编辑现有项目的属性,或将新项目添加到表中 如果它不存在。您可以放置、删除或添加属性 价值观。您还可以对现有项目执行条件更新 (如果不存在,则插入一个新的属性名称-值对,或者 替换现有的名称-值对,如果它具有某些预期 属性值)。
【讨论】:
您可以使用 ConditionExpression 仅在满足特定条件时才进行更新。由于所有项目都必须有一个哈希键(主键),因此您可以使用 ConditionExpression 仅在哈希键存在时才进行更新,这仅适用于现有项目。因此 UpdateItem 只会更新现有项目,不会创建新项目。
例如:
ConditionExpression: 'attribute_exists(myHashKey)'
【讨论】: