2016-11-06 129 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