2016-11-06 20 views
6

AWSでIAMを初めて使用しました。また、さまざまなユーザーのクエリを、主キーがCognito 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

私は、ポリシーシムを使用してみました、と私はLeadingKeyのないクエリは以下のPICに示すように、理由を理解することができません許可されています。

enter image description here

とするとき、私は主要なキーを提供し、それが拒否されたと言います。 PIC以下を参照してください。

enter image description here

+0

エラーメッセージは明らかです。起動するユーザ(つまり、 'arn:aws:sts :: 049428796662:assum ...')は、リソース: 'arn:aws:dynamodbに対してプロセス/メカニズム' dynamodb:Query'を呼び出す特権を持っていないことを示しています。 .. '。 – FDavidov

+0

はい。しかし、私のCognito IDはテーブルの主キーと同じです。だから、私はすべての資格情報を正しく提供していますが、なぜこのエラーが発生していますか? – achin

+0

私はあなたに特定の答えを与えることはできませんが、私の推測では、これは資格情報の正確さとは何の関係もなく、サーバー側のセキュリティ設定と関係があります(これは、 AWSに精通していません)。 – FDavidov

答えて

0

それはあなたが発行している要求に依存する場合があります。あなたのIAMポリシーは、要求のすべてのキーを考慮してForAllValuesを使用しています。リクエストの一部のキーが結果の一部の条件値と一致しないと、ポリシーがfalseを返すことがあります。

ForAnyValueを試してみてください。それがうまくいく可能性があります。

詳細はhereを参照してください。