Я пытаюсь настроить свою политику роли для S3. То, что я пытаюсь сделать, это позволить пользователям выходить из любых изображений, содержащих «общедоступные» в их имени. Проблема в том, что я, кажется, получил правильную политику (она преуспевает в симуляторе политики), но когда я запускаю ее в своем приложении, она, похоже, не работает должным образом.Условие политики ACL для AWS S3
Вот моя политика:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "mobileanalytics:PutEvents", "cognito-sync:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::*" ], "Condition": { "StringLike": { "s3:prefix": "*public*" } } } ] }
я устанавливаю s3:prefix
, как user1/image1-public
. Как я уже упоминал ранее, на симуляторе политики он позволяет всем командам «Получить» и «Список» (как и должен).
Проблема заключается в том, когда я загрузив пример изображения из базы данных с помощью диспетчера передачи в приложение IOS, я получаю следующее сообщение об ошибке:
2015-10-07 14:22:01.716 SimpleAuth[71584:8584520] Error: Error Domain=com.amazonaws.AWSS3ErrorDomain Code=1 "The operation couldn’t be completed. (com.amazonaws.AWSS3ErrorDomain error 1.)" UserInfo=0x7fcbf2d8c560 {HostId=ke/f5x+DKCnjuzlbH5XBWCQfawbkUIRWWhPcY9LdqjPqP5kUyq0rzIjkqeL+8Bm/fvr/l24Wm94=, Message=Access Denied, Code=AccessDenied, RequestId=180803E4DDD0BB73}
Код, который я имею в Xcode проект is
AWSS3TransferManagerDownloadRequest *downloadRequest = [AWSS3TransferManagerDownloadRequest new];
downloadRequest.bucket = @"test";
downloadRequest.key = @"user1/image1-public";
downloadRequest.downloadingFileURL = downloadingFileURL;
// Download the file.
[[transferManager download:downloadRequest] continueWithExecutor:[AWSExecutor mainThreadExecutor]
withBlock:^id(AWSTask *task)
{
if (task.error){
if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) {
switch (task.error.code) {
case AWSS3TransferManagerErrorCancelled:
case AWSS3TransferManagerErrorPaused:
break;
default:
NSLog(@"Error: %@", task.error);
break;
}
} else {
// Unknown error.
NSLog(@"Error: %@", task.error);
}
}
if (task.result)
{
AWSS3TransferManagerDownloadOutput *downloadOutput = task.result;
//File downloaded successfully.
NSLog(@"Now go to the next screen");
[self performSegueWithIdentifier:@"LoginSuccessSegue" sender:self];
}
return nil;
}];
Любая помощь была бы принята с благодарностью. Я никогда не мог получить «Условие» для работы в ACL.
Ahhh ok! Спасибо! Кстати, использование подстановочного знака в имени ресурса работает и будет тем, как я реализую то, что я хочу делать. Еще раз спасибо =) – trisha