У меня есть таблица с некоторыми элементами. Я пытаюсь использовать Fine-Grained Access Control (Ограничить доступ к конкретным атрибутам в таблице) на unauth (я хочу вернуть определенные атрибуты для пользователя, которые еще не прошли проверку подлинности), когда пользователь просматривает определенные атрибуты на основе следующего URL-адреса Using IAM Policy Conditions for Fine-Grained Access Control.Amazon DynamoDB: мелкозернистый контроль доступа Сканирование с определенными атрибутами
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "LimitAccessToSpecificAttributes",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:Query",
"dynamodb:BatchGetItem",
"dynamodb:Scan"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:AccountID:table/MyTable"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
"startDate",
"endDate"
]
},
"StringEqualsIfExists": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES",
"dynamodb:ReturnValues": [
"NONE",
"UPDATED_OLD",
"UPDATED_NEW"
]
}
}
}
]
}
когда я удаления следующей роли она работает:
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:Attributes": [
"startDate",
"endDate"
]
},
"StringEqualsIfExists": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES",
"dynamodb:ReturnValues": [
"NONE",
"UPDATED_OLD",
"UPDATED_NEW"
]
}
проблема заключается в том, что, когда я бегу мой код (Android) я получаю следующее исключение:
Пользователь: arn: aws: sts :: AccountID: Предполагаемая роль/Cognito_XXXUnauth_Role/CognitoIdentityCredentials не имеет права выполнять: dynamodb: Scan on resource: arn: aws: dynamodb: us-east-1: AccountID: table/MyTable (Услуга: AmazonDynamoDB; Код состояния: 400; Код ошибки: AccessDeniedException;
Я хотел бы знать, что я делаю неправильно, что вызывает исключение. Есть ли другой способ получить конкретные атрибуты?
Я использую следующий код андроида:
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(getApplicationContext(),
"identityPoolId",
Regions.US_EAST_1
);
AmazonDynamoDBClient ddb = new AmazonDynamoDBClient(credentialsProvider);
ScanRequest scanRequest = new ScanRequest();
scanRequest = scanRequest.withProjectionExpression("startDate, endDate");
scanRequest.setTableName("MyTable");
try {
ScanResult scanResult = ddb.scan(scanRequest);
} catch (Exception ex) {
log(ex.getMessage());
}
Любая помощь будет оценена.