AmazonServiceException: пользователь не авторизован для выполнения: dynamodb:DescribeTable Status Code: 400; Код ошибки: AccessDeniedException
Первоначально я думал, что эта проблема связана с несовпадением регионов, но после изменения региона я все еще сталкиваюсь со следующей ошибкой при попытке попробовать образец Amazon AWS, найденный здесь:
AmazonServiceException: User: arn:aws:sts::[My Account
ARN]:assumed-role/Cognito_AndroidAppUnauth_DefaultRole/ProviderSession
is not authorized to perform: dynamodb:DescribeTable on resource:
arn:aws:dynamodb:us-east-1:[My Account ARN]:table/test_table (Service:
AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException;
Request ID: BBFTS0Q8UHTMG120IORC2KSASVVV4KQNSO5AEMVJF66Q9ASUAAJG)
Все более или менее одинаково, единственное, что я изменил, это изменение DBclient
регион для US_EAST_1
где моя тестовая таблица размещается и изменяет файл констант, используя информацию со страницы "Начальный код Amazon Cognito", которая генерируется в соответствии с документацией по началу работы с Cognito.
Для меня Cognito_AndroidAppUnauth_DefaultRole
Ролевая политика Я изменил стандартную мобильную аналитику и разрешение службы синхронизации, чтобы также включить доступ ко всем действиям во всех таблицах, существующих или нет:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CognitoPolicy",
"Action": [
"mobileanalytics:PutEvents",
"cognito-sync:*"
],
"Effect": "Allow",
"Resource": [
"*"
]
},
{
"Sid": "DynamoDBPolicy",
"Effect": "Allow",
"Action": [
"dynamodb: *"
],
"Resource": "*"
}
]
}
Так почему же он утверждает, что у него нет разрешения, когда используется правильный регион, а политика Unauth должна разрешать доступ к таблицам?
РЕДАКТИРОВАТЬ: Stacktrace при вызове метода на ресурсе DynamoDB (создать таблицу), если он окажется полезным
com.amazonaws.AmazonServiceException: User: arn:aws:sts::[My Account ARN]:assumed-role/Cognito_AndroidAppUnauth_DefaultRole/ProviderSession is not authorized to perform: dynamodb:CreateTable on resource: arn:aws:dynamodb:us-east-1:[My Account ARN]:table/test_table (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: AccessDeniedException; Request ID: SDELNSMLO10EV7CM2STC1R9RU3VV4KQNSO5AEMVJF66Q9ASUAAJG)
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(Unknown Source)
at com.amazonaws.http.AmazonHttpClient.executeHelper(Unknown Source)
at com.amazonaws.http.AmazonHttpClient.execute(Unknown Source)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(Unknown Source)
at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.createTable(Unknown Source)
at com.amazonaws.demo.userpreferencesom.DynamoDBManager.createTable(DynamoDBManager.java:72)
at com.amazonaws.demo.userpreferencesom.UserPreferenceDemoActivity$DynamoDBManagerTask.doInBackground(UserPreferenceDemoActivity.java:99)
at com.amazonaws.demo.userpreferencesom.UserPreferenceDemoActivity$DynamoDBManagerTask.doInBackground(UserPreferenceDemoActivity.java:85)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
1 ответ
Работал с инженером Amazon, и оказалось, что проблема была в конфигурации политики:
"dynamodb: *"
должно быть
"dynamodb:*"
Удивительно, что может сделать пространство.
В моем случае имя моей таблицы включало символ "/", что недопустимо. Удаление символа "/" из имени таблицы решило проблему.