2016-12-04 2 views
1

Ich versuche, in meine DynamoDB-Tabelle mit Cognito-Benutzer-ID einzufügen, und ich bekomme immer "AccessDeniedException". Ich folgte der Dokumentation und erstellte eine Tabelle und eine Richtlinie dafür. Was fehlt hier. Bitte beachten Sie die vollständige Stack-Informationen und Anfrage-ID.AccessDeniedException mit Cognito ID in DynamoDB

Tabelle hat UserId als Hashkey und id wie rangekey

Politik:

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

-Code speichern Daten:

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: mutant-role/_auth_MOBIL EHub/CognitoIdentityCredentials nicht ausführen dürfen: DynamoDB: describeTable auf Ressource: arn: aws: DynamoDB: us-east-1

Modell:

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

     public string UserId { get; set; } 

     [DynamoDBRangeKey] 

     public string id { get; set; } 
    } 

Antwort

2

Die Fehlermeldung:

. DynamoDB: describeTable auf Ressource: arn: aws: DynamoDB: .. ist nicht auszuführen autorisierte us-east-1 ...

die followin hinzufügen g auf die Aktion in Ihrer Politik:

dynamodb:DescribeTable 

So Ihre Politik wie dieser ist es

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

aussehen wird kein Tisch, es ist eine Aktion, die Teil der IAM Politik. Ich habe meine Antwort bearbeitet, um Ihnen zu zeigen, wie es geht. –

+0

Ja, ich habe nach dem googeln mit einem bestimmten Wort verstanden, nachdem Sie geantwortet haben. Es macht vollkommen Sinn, da ich versuche, "Code zuerst" zu machen, um Tabelle mit Nicht-Admin-Benutzer zu erstellen. Aber was ich nicht verstehe, nachdem ich diese Frage hier gestellt habe, habe ich ein bisschen herumgespielt und auch "Action" versucht: [ "dynamodb: *" ], Ist das nicht DescribeTable? – batmaci

+0

ja "dynamodb. *" Sollte funktionieren. Wenn das nicht funktioniert, stimmt etwas anderes nicht. Meistens debugge ich diese Art von Problemen, indem ich die Richtlinie entspanne, bis sie funktioniert, und dann schrittweise die gelöschten Teile Schritt für Schritt wieder hinzufüge. Zum Beispiel können Sie als Anfang vorübergehend "*" für Ressource verwenden und den Bedingungsteil aus der Richtlinie löschen. –

Verwandte Themen