Amazon web services 如何通过IAM控制用户对Amazon DynamoDB数据的访问?
是否提供了一种方法,用户只能编辑或删除他以前添加的表中的项目?我认为这是不可能的。IAM角色基本上是。一旦客户端获得执行操作的权限,DynamoDB就不会记录该操作并将其附加到客户端Amazon web services 如何通过IAM控制用户对Amazon DynamoDB数据的访问?,amazon-web-services,amazon-dynamodb,amazon-iam,Amazon Web Services,Amazon Dynamodb,Amazon Iam,是否提供了一种方法,用户只能编辑或删除他以前添加的表中的项目?我认为这是不可能的。IAM角色基本上是。一旦客户端获得执行操作的权限,DynamoDB就不会记录该操作并将其附加到客户端 如果您需要这种行为,您可能应该在表中保留一个属性,该属性使用有关用户执行操作的一些元数据进行更新 这在AWS添加后成为可能,这有助于AWS策略管理对DynamoDB表中存储的项和属性的访问 介绍性博客文章说明了此功能的出色粒度,并对许多实际用例进行了简化: 水平-通过匹配哈希键值,可以有选择地隐藏或公开特定表中的
如果您需要这种行为,您可能应该在表中保留一个属性,该属性使用有关用户执行操作的一些元数据进行更新 这在AWS添加后成为可能,这有助于AWS策略管理对DynamoDB表中存储的项和属性的访问 介绍性博客文章说明了此功能的出色粒度,并对许多实际用例进行了简化:
- 水平-通过匹配哈希键值,可以有选择地隐藏或公开特定表中的特定DynamoDB项
- Vertical-通过匹配属性名称,您可以有选择地隐藏或公开特定表中所有DynamoDB项的特定属性
- 组合-您可以在同一策略中执行水平和垂直控制
- 这还包括如何将用户id包括在表的主键中以及如何基于呼叫用户通过适当的密钥水平和垂直隐藏信息的具体示例
补遗 Werner Vogels’也强调了这一新功能的深远范围/影响: 通过细粒度访问控制,我们可以通过允许您编写包含描述额外过滤和控制级别的条件的访问策略来解决此问题。这消除了对代理层的需要,简化了应用程序堆栈,并节省了成本 [……] 随着今天的发布,在移动设备上运行的应用程序可以将工作负载发送到DynamoDB表、行甚至列,而无需经过中间的代理层。[…]此功能允许在移动设备上运行的应用程序仅修改属于特定用户的行。此外,通过将用户数据整合到DynamoDB表中,您可以大规模地获得对用户群的实时洞察,而无需通过昂贵的联接和批量方法(如分散/聚集)
您可以添加一个IAM用户,该用户仅限于PutItem/UpdateItem/DeleteItem DynamoDB操作,并且仅限于特定的表。看 您可以在IAM策略中为所有Amazon DynamoDB操作(列表表除外)使用资源级别ARN
但是,没有内置的方法将表更新限制为“创建表的用户”,但我想您可以在创建表时编写脚本。我相当肯定您的问题的答案是肯定的。您可能必须使用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资源的访问仅限于指定的方法,但是“Condition”块将另外限制对与您试图更改的hashkey匹配的标识的访问-显然,这不会影响扫描(仅GetItem和UpdateItem)。现在,你如何匹配这些键,是我提到的小提琴,但解决方案就在那里的某个地方。希望这有帮助