如何通过IAM控制用户对Amazon DynamoDB数据的访问?

时间:2014-01-02 04:46:01

标签: amazon-web-services amazon-dynamodb amazon-iam

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

4 个答案:

答案 0 :(得分:16)

在AWS添加Fine-Grained Access Control for Amazon DynamoDB之后,这可以实现,这有助于 AWS Identity and Access Management (IAM)策略来管理对存储在DynamoDB表中的项和属性的访问

介绍性博客文章说明了此功能的出色粒度,并简化了许多现实世界的用例:

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

有关此能够确定谁可以访问Amazon DynamoDB表和索引中的各个数据项和属性以及可以对其执行的操作的详细信息,请参阅Fine-Grained Access Control for Amazon DynamoDB。< / p>

  • 这还包括一个具体示例,说明如何在Amazon DynamoDB表的主键中包含用户ID,并通过适当的IAM Condition 水平和垂直隐藏信息基于主叫用户。

附录

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除外。

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