12

AWS Identity and Access Management (IAM)是否提供了一种方法,使用户只能编辑或删除他之前添加的Amazon DynamoDB表中的项目?

4

4 回答 4

20

在 AWS为 Amazon DynamoDB添加细粒度访问控制之后,这成为可能,这有助于AWS身份和访问管理 (IAM)策略来规范对存储在 DynamoDB 表中的项目和属性的访问

介绍性博客文章说明了此功能的出色粒度以及许多实际用例的简化:

  • 水平- 您可以通过匹配哈希键值有选择地隐藏或公开特定表中的特定 DynamoDB 项目
  • 垂直- 您可以通过匹配属性名称有选择地隐藏或公开特定表中所有 DynamoDB 项目的特定属性
  • 组合- 您可以在同一策略中进行水平和垂直控制

有关确定谁可以访问 Amazon DynamoDB 表和索引中的单个数据项和属性以及可以对它们执行的操作的功能的更多详细信息,请参阅Amazon DynamoDB 的精细访问控制

  • 这还包括一个具体示例,如何将用户 ID 包含在Amazon DynamoDB表的主键中,然后根据调用用户通过适当的IAM 条件水平和垂直隐藏信息。

附录

Werner Vogels 在使用 DynamoDB 的细粒度访问控制简化移动应用程序数据管理中也强调了这一新功能的深远范围/影响:

借助细粒度访问控制,我们可以解决此问题,使您能够创建包含描述额外过滤和控制级别的条件的访问策略。这消除了对代理层的需求,简化了应用程序堆栈,并节省了成本。

[...]

随着今天的推出,在移动设备上运行的应用程序可以将工作负载发送到 DynamoDB 表、行甚至列,而无需通过中间代理层。[...] 此功能允许在移动设备上运行的应用程序仅修改属于特定用户的行。此外,通过将用户数据整合到 DynamoDB 表中,您可以获得大规模用户群的实时洞察,而无需通过分散/收集等昂贵的连接和批处理方法。

于 2014-01-03T14:31:54.973 回答
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 资源的访问限制为仅指定的方法,但“条件”块将另外限制对与您尝试更改的哈希键匹配的身份的访问 - 显然,这不会影响扫描(仅GetItem 和 UpdateItem)。现在,您究竟如何匹配这些键,是我提到的摆弄,但解决方案就在那里。希望这可以帮助。

于 2015-12-17T22:05:48.430 回答
0

我不相信这是可能的。IAM 角色基本上是控制客户端可以进行哪些 API 调用。客户端获得执行操作的权限后,DynamoDB 不会记录该操作并将其附加到客户端。

如果您需要这种行为,您可能应该在表中保留一个属性,该属性使用有关用户进行操作的一些元数据进行更新。

于 2014-01-02T07:48:49.423 回答
0

您可以添加一个 IAM 用户,该用户受限于 PutItem/UpdateItem/DeleteItem DynamoDB 操作,并且受限于ARN的特定表。请参阅使用 IAM 控制对 Amazon DynamoDB 资源的访问

您可以在 IAM 策略中为所有 Amazon DynamoDB 操作使用资源级 ARN,ListTables 除外。

但是,没有内置方法可以将表更新限制为“创建表的用户”,但我猜你可以在创建表时编写脚本。

于 2014-01-03T14:55:14.093 回答