描述:
我有一个包含50个项目的表,每个项目至少有三个属性Name
、Age
和E-mail
。
用户应该能够:
-
对特定项目的
Name
执行update
。 -
对所有物品的属性执行以下操作:
- BatchGetItem
- ConditionCheckItem
- 描述表格
- GetItem
- 扫描
- 列出资源的标记
- 查询
我尝试了什么:
我在IAM中使用了此策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "UserNameUpdate",
"Effect": "Allow",
"Action": "dynamodb:UpdateItem",
"Resource": "arn:aws:dynamodb:<region>:<account>:table/<tableName>",
"Condition": {
"StringEquals": {
"dynamodb:ReturnValues": [
"NONE",
"UPDATED_OLD",
"UPDATED_NEW"
]
},
"ForAllValues:StringLike": {
"dynamodb:Attributes": "Name"
}
}
},
{
"Sid": "GetAll",
"Effect": "Allow",
"Action": [
"dynamodb:BatchGetItem",
"dynamodb:ConditionCheckItem",
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:Scan",
"dynamodb:ListTagsOfResource",
"dynamodb:Query"
],
"Resource": "arn:aws:dynamodb:<region>:<account>:table/<tableName>"
}
]
}
结果:
- 当尝试更新项目时,我得到
AccessDeniedException
- 当尝试其他操作时,它们正常工作
我不太喜欢IAM规则,尤其是Condition
部分😕.任何帮助都将不胜感激。
Name
是DynamoDB中的保留字。也许这是你的问题?
我认为应该有一个值数组:
"ForAllValues:StringLike": {
"dynamodb:Attributes": ["Name"]
}