2016-12-04 16 views
1

CognitoユーザーIDを使用してDynamoDBテーブルに挿入しようとしていますが、常に「AccessDeniedException」と表示されています。私はドキュメンテーションに従い、以下のようにテーブルとポリシーを作成しました。何がここに欠けている。完全なスタック情報と要求IDを参照してください。DynamoDBのCognito IDを使用したAccessDeniedException

表rangekey

ポリシーとしてハッシュキーとしてユーザIDとIDを有する:データを保存する

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:BatchGetItem", 
       "dynamodb:BatchWriteItem", 
       "dynamodb:DeleteItem", 
       "dynamodb:GetItem", 
       "dynamodb:PutItem", 
       "dynamodb:Query", 
       "dynamodb:UpdateItem" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:us-east-1:1828211111:table/Table" 
      ], 
      "Condition": { 
       "ForAllValues:StringEquals": { 
        "dynamodb:LeadingKeys": [ 
         "${cognito-identity.amazonaws.com:sub}" 
        ] 
       } 
      } 
     } 
    ] 
} 

コード:

AWS.DynamoDBhelper.Credentials.AddLogin(Helpers.Constants.KEY_LAST_USED_PROVIDER,Helpers.Settings.LoginAccessToken); 
       var identityId = await AWS.DynamoDBhelper.Credentials.GetIdentityIdAsync(); 

       var client = new Amazon.DynamoDBv2.AmazonDynamoDBClient(AWS.DynamoDBhelper.Credentials, Amazon.RegionEndpoint.USEast1); 
       Amazon.DynamoDBv2.DataModel.DynamoDBContext context = new Amazon.DynamoDBv2.DataModel.DynamoDBContext(client); 


       AWS.Table table= new AWS.Table(); 
       table.UserId = identityId; 
       table.id = "1"; 
       await context.SaveAsync(table); 

EX = {Amazon.DynamoDBv2 .AmazonDynamoDBException:assume-role/_auth_MOBIL DynamoDBのを::EHUB/CognitoIdentityCredentialsを実行するために許可されていないDescribeTableリソース上:ARN:AWS:DynamoDBの:私たち-東-1

モデル:

[DynamoDBTable("Table")] 
    public class Table 
    { 
     [DynamoDBHashKey] 

     public string UserId { get; set; } 

     [DynamoDBRangeKey] 

     public string id { get; set; } 
    } 

答えて

2

エラーメッセージ:

。 DynamoDBのを:..を実行するために許可されていないリソース上のDescribeTable: ARN:AWS:DynamoDBの:私たち-東-1 ...

はfollowinを追加しますあなたの政策のアクションへのグラム:

dynamodb:DescribeTable 

は、だからあなたのポリシーは、それがテーブルではありません。この

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:BatchGetItem", 
       "dynamodb:BatchWriteItem", 
       "dynamodb:DeleteItem", 
       "dynamodb:GetItem", 
       "dynamodb:PutItem", 
       "dynamodb:Query", 
       "dynamodb:UpdateItem", 
       "dynamodb:DescribeTable" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:us-east-1:1828211111:table/Table" 
      ], 
      "Condition": { 
       "ForAllValues:StringEquals": { 
        "dynamodb:LeadingKeys": [ 
         "${cognito-identity.amazonaws.com:sub}" 
        ] 
       } 
      } 
     } 
    ] 
} 
+0

のようになりますが、それは、IAMポリシーの一部であるアクションです。私はあなたにそれを行う方法を示すために私の答えを編集しました。 –

+0

はい私はあなたが返信した後に特定の単語でグーグルで話した後に理解しました。管理者以外のユーザーと一緒にテーブルを作成するために、 "コードを最初に"実行しようとすると、完全に意味があります。しかし、私はそれを理解していない、ここでこの質問をした後、私はちょっと遊んで、 "アクション"を試みた:[ "dynamodb:*" ]、これはDescribeTableをカバーしていないのですか? – batmaci

+0

はい "dynamodb。*"が有効です。それが動作していない場合、他の何かが間違っています。ほとんどの場合、この種の問題は、ポリシーが機能するまで緩和してから、徐々に削除された部分を段階的に追加してデバッグします。たとえば、リソースとして一時的に「*」を使用し、ポリシーから条件部分を削除することができます。実際には今も働いていた –

関連する問題