AWS Identity and Access Management (IAM)是否提供了一种方式,以便用户只能编辑或删除之前添加的Amazon DynamoDB表格中的项目?
答案 0 :(得分:16)
在AWS添加Fine-Grained Access Control for Amazon DynamoDB之后,这可以实现,这有助于 AWS Identity and Access Management (IAM)策略来管理对存储在DynamoDB表中的项和属性的访问。
介绍性博客文章说明了此功能的出色粒度,并简化了许多现实世界的用例:
有关此能够确定谁可以访问Amazon DynamoDB表和索引中的各个数据项和属性以及可以对其执行的操作的详细信息,请参阅Fine-Grained Access Control for Amazon DynamoDB。< / p>
Werner Vogels Simplifying Mobile App Data Management with DynamoDB's Fine-Grained Access Control强调了这一新功能的深远影响范围/影响:
通过细粒度访问控制,我们通过允许您创建包含描述其他级别的过滤和控制的条件的访问策略来解决此问题。这消除了对代理层的需求,简化了应用程序堆栈,并节省了成本。
[...]
随着今天的推出,在移动设备上运行的应用程序可以将工作负载发送到DynamoDB表,行甚至列,而无需通过中间代理层。 [...]此功能允许在移动设备上运行的应用程序仅修改属于特定用户的行。此外,通过整合DynamoDB表中的用户数据,您可以大规模获取有关用户群的实时洞察,而无需通过昂贵的连接和批处理方法(如分散/聚集)。
答案 1 :(得分:3)
我相当肯定你问题的答案是肯定的。您可能必须使用AWS Cognito及其背后的IAM角色策略。
你可能不得不做一些摆弄,但如果你添加如下的政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Scan",
"dynamodb:UpdateItem"
],
"Resource": [
"arn:aws:dynamodb:ap-southeast-2: NUMBER:table/myapplication_product"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"${cognito-identity.amazonaws.com:sub}"
]
}
}
}
]
}
首先,这将限制对dynamodb资源的访问仅限于名为的方法,但是&#34;条件&#34; block还将限制访问与您尝试更改的hashkey匹配的标识 - 显然,这不会影响Scan(仅限GetItem和UpdateItem)。现在正是你如何匹配这些键,是我提到的小提琴,但解决方案就在那里。希望这会有所帮助。
答案 2 :(得分:0)
我不相信这是可能的。 IAM角色基本上是controlling which API calls can a client make。一旦客户端获得执行操作的权限,DynamoDB就不会记录该操作并将其附加到客户端。
如果您需要这种行为,您应该在表中保留一个属性,该属性会更新一些有关用户进行操作的元数据。
答案 3 :(得分:0)
您可以添加限制为PutItem / UpdateItem / DeleteItem DynamoDB操作且由ARN限制为特定表的IAM用户。请参阅Using IAM to Control Access to Amazon DynamoDB Resources。
您可以在IAM策略中为所有Amazon DynamoDB操作使用资源级ARN,但ListTable除外。
没有内置的方法可以将表更新限制为“创建表的用户”,但是,我猜你可以在创建表时编写脚本。