2016-09-24 11 views
0

私はDynamoDBの使用に関するAWSのドキュメントとサンプルコードをフォローしていますが、進捗状況は停止しています。 Cognito User Pool/IdentityとIAM Rolesを正しく設定した後、自分のDynamoDBテーブルでクエリできなくなりました。スキャン、削除、GetItemを問題なく実行できますが、クエリを実行することはできません。私のDynamoDBテーブルでクエリを実行するために、権限のないIAMロールが正しく設定されていますか?CognitoIdentityCredentialsには実行が許可されていません。dynamodb:クエリのリソース:

IAM無断役割:

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "Stmt1474743569000", 
     "Effect": "Allow", 
     "Action": [ 
      "dynamodb:*" 
     ], 
     "Resource": [ 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable1" 
     ] 
    }, 
    { 
     "Sid": "Stmt1474743616000", 
     "Effect": "Allow", 
     "Action": [ 
      "dynamodb:*" 
     ], 
     "Resource": [ 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable2" 
     ] 
    } 
] 

クエリ機能:

func getQuery(){ 
    //performing a query 

    let dynamoDBObjectMapper = AWSDynamoDBObjectMapper.default() 

    let queryExpression = AWSDynamoDBQueryExpression() 
    //queryExpression.scanIndexForward = 1 
    queryExpression.indexName = "Pay" 

    queryExpression.keyConditionExpression = "Company = :Company AND Pay > :Pay" 

    queryExpression.expressionAttributeValues = [ 
     ":Company" : "TestCompany", 
     ":Pay" : 0]; 

    dynamoDBObjectMapper .query(DDBTableRow.self, expression: queryExpression) .continue(with: AWSExecutor.mainThread(), with: { (task:AWSTask!) -> AnyObject! in 
     if (task.error != nil) { 
      print("Error: \(task.error)") 

      let alertController = UIAlertController(title: "Failed to query a test table.", message: task.error!.localizedDescription, preferredStyle: UIAlertControllerStyle.alert) 
      let okAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.cancel, handler: { (action:UIAlertAction) -> Void in 
      }) 
      alertController.addAction(okAction) 
      self.present(alertController, animated: true, completion: nil) 
     } else { 
      if (task.result != nil) { 
       self.pagniatedOutput = task.result! as AWSDynamoDBPaginatedOutput 
      } 
      //self.performSegue(withIdentifier: "unwindToMainSegue", sender: self) 
     } 
     return nil 
    }) 


} 

はどんなアドバイスを事前にありがとうございます!

更新#2:受信例外に追加 :

Error: Optional(Error Domain=com.amazonaws.AWSServiceErrorDomain Code=6 "(null)" 

    UserInfo={__type=com.amazon.coral.service#AccessDeniedException, 

    Message=User: arn:aws:sts::XXXXXXXXXX:assumed-role/Cognito_testUserUnauth_Role/CognitoIdentityCredentials is 
    not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable1/index/Pay}) 

更新#3: 問題は、私のIAMロール内のリソースパラメータを指定していました。私は1つのマイナーチェンジを行い、クエリを実行できるようになりました。

{ 
"Version": "2012-10-17", 
"Statement": [ 
    { 
     "Sid": "Stmt1474743569000", 
     "Effect": "Allow", 
     "Action": [ 
      "dynamodb:*" 
     ], 
     "Resource": [ 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable1", 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable1/index/*" 
     ] 
    }, 
    { 
     "Sid": "Stmt1474743616000", 
     "Effect": "Allow", 
     "Action": [ 
      "dynamodb:*" 
     ], 
     "Resource": [ 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable2", 
      "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable2/index/*" 
     ] 
    } 
] 
+0

あなたの許可は私にはうまく見えます。正確な例外メッセージを共有できますか、照会しようとしているテーブルも確認できますか? –

+0

@RachitDhall MyTable1を照会しています。私は受け取っている例外を除いて私の投稿を更新しました。ありがとう! –

+0

@RachitDhall私の更新された投稿の変更点に関する問題を解決しました。応答していただきありがとうございます! –

答えて

0

アップデート#3:問題は、自分のIAMロールのリソースパラメータに問題がありました。私は1つのマイナーチェンジを行い、クエリを実行できるようになりました。

{"Version": "2012-10-17","Statement": [ 
{ 
    "Sid": "Stmt1474743569000", 
    "Effect": "Allow", 
    "Action": [ 
     "dynamodb:*" 
    ], 
    "Resource": [ 
     "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable1", 
     "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable1/index/*" 
    ] 
}, 
{ 
    "Sid": "Stmt1474743616000", 
    "Effect": "Allow", 
    "Action": [ 
     "dynamodb:*" 
    ], 
    "Resource": [ 
     "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable2", 
     "arn:aws:dynamodb:us-east-1:XXXXXXXXXXXX:table/MyTable2/index/*" 
    ] 
} 
] 
関連する問題