Я пытаюсь вставить в свою таблицу DynamoDB с помощью идентификатора пользователя Cognito, и я получаю всегда «AccessDeniedException». Я выполнил документацию и создал для нее таблицу и политику, как показано ниже. Что здесь отсутствует. См. Полную информацию о стеке и идентификатор запроса.AccessDeniedException с использованием идентификатора Cognito в DynamoDB
Таблица имеет UserId как Hashkey и идентификатор как rangekey
Политика:
{
"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);
ех = {Amazon.DynamoDBv2 .AmazonDynamoDBException: Предполагаемая роль/_auth_MOBIL EHUB/CognitoIdentityCredentials не разрешается выполнять: dynamodb: DescribeTable на ресурсе: Арн: AWS: dynamodb: мы-восток-1
Модель:
[DynamoDBTable("Table")]
public class Table
{
[DynamoDBHashKey]
public string UserId { get; set; }
[DynamoDBRangeKey]
public string id { get; set; }
}
Это не стол, это действие, которое является частью IAM политики. Я отредактировал свой ответ, чтобы показать вам, как это сделать. –
Да, я понял, после того, как вы ответили определенным словом. Это совершенно разумно, поскольку я пытаюсь сделать, как «первый код», создать таблицу с пользователем, не являющимся администратором. Но я этого не понимаю, после того, как я задал этот вопрос здесь, я немного поиграл, и я попробовал также «Действие»: [ «dynamodb: *» ], разве это не покрытие DescribeTable? – batmaci
Да «dynamodb. *» Должен работать. Если это не работает, то что-то не так. В основном я отлаживаю такие проблемы, расслабляя политику, пока она не работает, а затем постепенно добавляет обратно удаленные части шаг за шагом. Например, в качестве запуска вы можете временно использовать «*» для ресурса и удалить часть условия из политики. –