【发布时间】:2017-03-19 16:54:36
【问题描述】:
我是 AWS 中 IAM 的新手。而且,我希望将各种用户的查询限制为仅主键与 cognito id 匹配的表条目。为此,我制定了政策:
{
"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-east-1:XXXXXXXXXXX:table/User"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"${cognito-identity.amazonaws.com:sub}"
]
}
}
}
]
}
我收到以下错误:
"__type": "com.amazon.coral.service#AccessDeniedException",
"Message": "User: arn:aws:sts::XXXXXXXXXXXXX:assumed-role/Achintest/BackplaneAssumeRoleSession is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:XXXXXXXXXXXXX:table/User"
谁能告诉我我做错了什么?
======== 更新 ========
我尝试使用策略 sim,但我无法理解为什么允许使用如下图所示的无LeadingKey 的查询。
当我提供前导键时,它说拒绝。见下图:
【问题讨论】:
-
错误信息很清楚。它指出调用用户(即
arn:aws:sts::049428796662:assumed...)没有权限在资源上调用进程/机制dynamodb:Query:arn:aws:dynamodb...。 -
是的。但是,我的 cognito id 与表中的主键相同。那么,尽管我正确提供了所有凭据,但为什么会出现此错误?
-
我不能给你一个具体的答案,但我的猜测是这与凭据的正确性无关,它确实与你服务器端的安全设置有关(这这是一个疯狂的猜测,因为我不熟悉 AWS)。
-
确实如此。但是,我无法弄清楚为什么,因为我已经按照 AWS 文档中的说明设置了所有内容
-
很抱歉,但不能真正帮助你超越这一点(即事件提出甚至可能引发你身边想法的愚蠢问题)。希望你早日找到出路。干杯。
标签: amazon-web-services amazon-dynamodb amazon-iam