2016-11-06 123 views
6

我是AWS中的IAM的新手。而且,我希望将各种用户的查询限制为只有主键与认证ID匹配的表项。要做到这一点,我创建的策略:AWS IAM - 使用条件

{ 
"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}" 
       ] 
      } 
     } 
    } 
] 

}

但是,当我查询使用邮差表如下所示:
enter image description here

我收到以下错误:

"__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" 

有人能让我知道我在做什么错误吗?


======== ======== UPDATE

我试着用政策SIM卡,我无法理解为什么如下图所示PIC不LeadingKey查询被允许。

enter image description here

,当我提供领先的关键,它说拒绝。见下面图:

enter image description here

+0

错误信息非常清楚。它声明调用用户(即'arn:aws:sts :: 049428796662:假设...')没有权限在资源上调用进程/机制'dynamodb:Query':'arn:aws:dynamodb。 ..'。 – FDavidov

+0

是的。但是,我的认证ID与表中的主键相同。那么,为什么我得到这个错误,尽管我正确提供所有凭据? – achin

+0

我不能给你一个具体的答案,但我的猜测是,这与凭证的正确性无关,它确实与服务器端的安全设置有关(这是一种疯狂的猜测,对AWS不熟悉)。 – FDavidov

回答

0

这可能取决于你发出请求。您的IAM政策使用ForAllValues,它将请求的每个关键点都考虑在内。如果请求中的某个键与结果中的某个条件值不匹配,则您的策略可能会返回false。

尝试使用ForAnyValue,这可能会伎俩。

有关更多信息,请参阅here