我知道有一些功能允许用户仅在策略中更新DynamoDb中记录的某些字段,但有没有办法限制对包含地图的字段内字段的访问?例如,我有一个类似于以下的表:
UserID [string] |名称[string] |属性[地图] |
在“属性”地图中,我想限制用户只能更新地图的某一列,让我们说“值”(如果它只是“哈希”和“值”自我的地图 - 命名列)。如果它是权限链接,则类似于以下内容:
ARN:... /表/ TestTable的/属性/值
这可能吗?
答案 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}
是正确的。它是替换变量