【发布时间】:2014-01-19 12:29:18
【问题描述】:
AWS Identity and Access Management (IAM) 是否提供了一种方法,使用户只能编辑或删除他之前添加的Amazon DynamoDB 表中的项目?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb amazon-iam
AWS Identity and Access Management (IAM) 是否提供了一种方法,使用户只能编辑或删除他之前添加的Amazon DynamoDB 表中的项目?
【问题讨论】:
标签: amazon-web-services amazon-dynamodb amazon-iam
这在 AWS 添加 Fine-Grained Access Control for Amazon DynamoDB 后成为可能,这有助于 AWS Identity and Access Management (IAM) 策略来规范对存储在 DynamoDB 表中的项目和属性的访问。
介绍性博客文章说明了此功能的出色粒度以及许多实际用例的简化:
请参阅Fine-Grained Access Control for Amazon DynamoDB,了解有关此确定谁可以访问 Amazon DynamoDB 表和索引中的单个数据项和属性以及可以对其执行的操作的功能的更多详细信息。
>Werner Vogels 的Simplifying Mobile App Data Management with DynamoDB's Fine-Grained Access Control 也强调了这一新功能的深远范围/影响:
借助细粒度访问控制,我们可以解决此问题,让您能够创建包含描述额外过滤和控制级别的条件的访问策略。这消除了对代理层的需求,简化了应用程序堆栈,并节省了成本。
[...]
随着今天的发布,在移动设备上运行的应用程序可以将工作负载发送到 DynamoDB 表、行甚至列,而无需通过中间代理层。 [...] 此功能允许在移动设备上运行的应用程序仅修改属于特定用户的行。此外,通过将用户数据整合到 DynamoDB 表中,您可以获得大规模用户群的实时洞察,而无需通过分散/聚集等昂贵的联接和批处理方法。
【讨论】:
我很确定您的问题的答案是肯定的。您可能必须将 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 资源的访问仅限于指定的方法,但“条件”块将另外限制对与您尝试更改的哈希键匹配的身份的访问 - 显然,这不会影响扫描(仅 GetItem 和 UpdateItem)。现在,您究竟如何匹配这些键,是我提到的摆弄,但解决方案就在那里。希望这会有所帮助。
【讨论】:
我不相信这是可能的。 IAM 角色基本上是controlling which API calls can a client make。一旦客户端获得执行操作的权限,DynamoDB 就不会记录该操作并将其附加到客户端。
如果您需要这种行为,您可能应该在表中保留一个属性,该属性使用有关用户进行操作的一些元数据进行更新。
【讨论】:
您可以添加一个 IAM 用户,该用户受限于 PutItem/UpdateItem/DeleteItem DynamoDB 操作,并且受限于 ARN 的特定表。见Using IAM to Control Access to Amazon DynamoDB Resources。
您可以在 IAM 策略中为所有 Amazon DynamoDB 操作使用资源级 ARN,ListTables 除外。
但是,没有内置方法可以将表更新限制为“创建表的用户”,但我猜您可以在创建表时编写脚本。
【讨论】: