【发布时间】:2020-09-24 17:06:31
【问题描述】:
说明:
我有一个包含 50 个项目的表,每个项目至少有三个属性Name、Age 和E-mail。
用户应该能够:
-
对特定项目的
Name执行update。 -
对所有项目的属性执行这些操作:
- 批量获取项目
- 条件检查项
- 描述表格
- 获取项目
- 扫描
- 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",
"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 部分 ????。任何帮助将不胜感激。
【问题讨论】:
-
如果您知道属性的确切名称,为什么要使用 StringLike 而不是 StringEquals?
-
我正在尝试
StringLike,因为它更宽松。StringEquals是我的第一选择,但都没有用,我得到了同样的异常......
标签: java android amazon-dynamodb amazon-iam