DynamoDB对地图项的细粒度访问

时间:2017-03-23 02:10:59

标签: amazon-web-services dictionary amazon-dynamodb access-control amazon-iam

我知道有一些功能允许用户仅在策略中更新DynamoDb中记录的某些字段,但有没有办法限制对包含地图的字段内字段的访问?例如,我有一个类似于以下的表:

UserID [string] |名称[string] |属性[地图] |

在“属性”地图中,我想限制用户只能更新地图的某一列,让我们说“值”(如果它只是“哈希”和“值”自我的地图 - 命名列)。如果它是权限链接,则类似于以下内容:

ARN:... /表/ TestTable的/属性/值

这可能吗?

1 个答案:

答案 0 :(得分:1)

从我所知的文档来看,没有你不能在地图中定位特定的键。因此,要么将它们拆分为自己的“字段”,要么允许用户修改整个地图。

值得注意的是,在DynamoDB中,术语的集合。项目是属性的集合。因此,要命名属性“属性”可能会导致混淆。

Anywho ...我建议使用类似下面的模型,其中特征;)是单独的Item属性:

UserID [string]
Name [string]
Height [string]
Weight [Float]
Race [String]

(我猜测用户的特征)

这是一项政策,允许他们仅更新身高和体重,并且仅基于用户ID更新他们自己的记录。当然,这方面的“用户”需要以某种方式federated。出于我们的目的,我假设您可以使用Web Identity Federation

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowAccessToOnlyItemsMatchingUserID",
            "Effect": "Allow",
            "Action": [
                "dynamodb:GetItem",
                "dynamodb:BatchGetItem",
                "dynamodb:Query",
                "dynamodb:PutItem",
                "dynamodb:UpdateItem",
                "dynamodb:DeleteItem",
                "dynamodb:BatchWriteItem"
            ],
            "Resource": [
                "arn:aws:dynamodb:us-west-2:123456789012:table/Users"
            ],
            "Condition": {
                "ForAllValues:StringEquals": {
                    "dynamodb:LeadingKeys": [
                        "${www.amazon.com:user_id}"
                    ],
                    "dynamodb:Attributes": [
                        "UserID",
                        "Height",
                        "Weight",
                        ...
                        <list other allowed to edit attributes here>
                    ]
                },
                "StringEqualsIfExists": {
                    "dynamodb:Select": "SPECIFIC_ATTRIBUTES"
                }
            }
        }
    ]
}

user_id中的${www.amazon.com:user_id}是正确的。它是替换变量

的一部分

From the documentation

  • dynamodb:LeadingKeys - 此条件键允许用户仅访问分区键值与其用户ID匹配的项目。此ID,$ {www.amazon.com:user_id}是替换变量。有关替换变量的更多信息,请参阅使用Web标识联合。
  • dynamodb:Attributes - 此条件键限制对指定属性的访问,以便只有权限策略中列出的操作才能返回这些属性的值。此外,StringEqualsIfExists子句确保应用程序必须始终提供要处理的特定属性的列表,并且应用程序无法请求所有属性。