如何解决Amazon DynamoDB和IAM-允许update-item更改单个属性
说明:
我有一个包含50个项目的表,每个项目至少具有三个属性Name
,Age
和E-mail
。
用户应该能够:
-
对特定项目的
update
执行Name
。 -
对所有项目的属性执行以下操作:
- BatchGetItem
- ConditionCheckItem
- DescribeTable
- GetItem
- 扫描
- ListTagsOfResource
- 查询
我尝试过的事情:
我在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","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中的reserved word。也许那是你的问题?
我认为需要一组值:
"ForAllValues:StringLike": {
"dynamodb:Attributes": ["Name"]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。