2015-10-07 3 views
0

Я пытаюсь настроить свою политику роли для 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.

ответ

0

"s3:prefix": "*public*" по существу никогда не будет соответствовать ничто значимое.

Указывает префикс - не подстановочный знак.

Чтобы соответствовать изображению объекта на /user-1/image/public/kitten.jpg и все остальное на тот же уровень структуры, условие политики должно быть "s3:prefix": "user-1/image/public/"

Для политики, как это работать, «общественность» должна быть на далеко слева от пути - префикс.

Документация остается неясной, однако возможно что вместо условия вы можете использовать подстановочный шаблон в ресурсе. В нем говорится, просто, "You can use wild card.". Если это правда, то, возможно, что-то вдоль этих линий:

"Resource": [ 
      "arn:aws:s3:::example-bucket/*/public/*" 
      ], 

Если нет, то вы снова ограничены префиксов, которые были бы то, что я подозреваю, что может быть.

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

This action belongs to a service that supports access control mechanisms attached to resources. The simulator does not model these mechanisms, so results may differ in your production environment.

http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_testing-policies.html

+0

Ahhh ok! Спасибо! Кстати, использование подстановочного знака в имени ресурса работает и будет тем, как я реализую то, что я хочу делать. Еще раз спасибо =) – trisha

Смежные вопросы