2017-01-27 2 views
2

Я выполняю эту tutorial и настроили таблицу и разрешения DynamoDB, как описано, но сбой приложения говорят:не в состоянии получить доступ DynamoDB таблицу

CognitoIdentityCredentials is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:us-east-1:some_number:table/Books" (The table which I am trying to access is on us-west-2).

Вы найдете ниже код и ошибка:

Код:

setContentView(R.layout.activity_main); 
Runnable runnable = new Runnable() { 
    public void run() { 
     //DynamoDB calls go here 
     CognitoCachingCredentialsProvider credentialsProvider=new CognitoCachingCredentialsProvider(getApplicationContext(),"us-west-2:some_num", Regions.US_WEST_2); 
     AmazonDynamoDBClient ddbClient = new AmazonDynamoDBClient(credentialsProvider); 
     DynamoDBMapper mapper = new DynamoDBMapper(ddbClient); 
     Book book = new Book(); 
     book.setTitle("Great Expectations"); 
     book.setAuthor("Charles Dickens"); 
     book.setPrice(1299); 
     book.setIsbn("12345678901"); 
     book.setHardCover(false); 
     mapper.save(book); 
     Toast.makeText(MainActivity.this,String.valueOf(mapper), Toast.LENGTH_LONG).show(); 
    } 
}; 
Thread mythread = new Thread(runnable); 
mythread.start(); 

Ошибка:

E/AndroidRuntime: FATAL EXCEPTION: Thread-9530 
Process: com.example.imb_bng_04.dynamodb, PID: 30264 
com.amazonaws.AmazonServiceException: User: arn:aws:sts::some_number:assumed-role/Cognito_sampleapp2Unauth_Role/CognitoIdentityCredentials is not authorized to perform: dynamodb:UpdateItem on resource: arn:aws:dynamodb:us-east-1:some-number:table/Books (Service: AmazonDynamoDB; 
Status Code: 400; Error Code: AccessDeniedException; Request ID: NMSNFJB24D6G3MO8RL6H624FA) 
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:712) 
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:388) 
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:199) 
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:4181) 
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:1582) 
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.doUpdateItem(DynamoDBMapper.java:1173) 
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$2.executeLowLevelRequest(DynamoDBMapper.java:873) 
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:1056) 
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:904) 
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.save(DynamoDBMapper.java:688) 
at com.example.imb_bng_04.dynamodb.MainActivity$1$override.run(MainActivity.java:32) 
at com.example.imb_bng_04.dynamodb.MainActivity$1$override.access$dispatch(MainActivity.java) 
at com.example.imb_bng_04.dynamodb.MainActivity$1.run(MainActivity.java:0) 
at java.lang.Thread.run(Thread.java:818) 
01-27 18:10:16.004 1430-4135/? E/ActivityManager: Invalid thumbnail dimensions: 0x0 

Любая помощь с этим была бы принята с благодарностью.

+0

Перейти к консоли «МАМ» и создать аутентификации для пользователя мандатных вы поставляете –

ответ

2

Вы, вероятно, не создали политику, на AWS каждое действие запрещено, если только кто-то не определился иначе.

Перейти к «IAM» (Изменить URL в ваш регион - https://console.aws.amazon.com/iam/home?region=us-east-1)

на левом меню выберите «Политика», а затем «Создать политику» и выберите «Создать собственную политику»

на имя и описание политики писать, что вы хотите, и в документе политики вставки:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "dynamodb:*" 
      ], 
      "Resource": [ 
       "arn:aws:dynamodb:*:table/YOUR_TABLE_NAME" 
      ] 
     } 
    ] 
} 

Теперь перейдите пользователей: https://console.aws.amazon.com/iam/home?region=us-east-1#/users/

Выбери пользователь, созданные учетные данные для перейдите на вкладку «Разрешение» и нажмите кнопку «Добавить разрешение», а затем «Закрепить существующую политику непосредственно»

enter image description here

Выберите созданную политику и повторите попытку

+0

Спасибо, что решили проблему. –

1

Я следовал тому же учебнику и имел ту же проблему. Наконец, кто-то на форуме AWS отметил, что в учебнике предполагается, что вы находитесь в регионе US-East1 при создании клиентского объекта AmazonDynamoDB.

я должен был сделать следующую корректировку коды учебника для его работы (настроить для вашего региона):

  AmazonDynamoDBClient ddbClient = Region.getRegion(Regions.US_WEST_1) // CRUCIAL 
      .createClient(
        AmazonDynamoDBClient.class, 
        credentialsProvider, 
        new ClientConfiguration() 
      ); 
Смежные вопросы